标题: [数值计算] 【已解决】求助批处理矩阵乘法 [打印本页]
作者: xeqxerxes 时间: 2009-4-1 12:57 标题: 【已解决】求助批处理矩阵乘法
假设A.TXT中有个矩阵,括号可以省略
A11 A12 A13
A21 A22 A23
A31 A32 A33
批处理可以算出乘法,那如何求出改矩阵与矩阵
B11
B21
B31
的乘法呢?
要求将结果写如R.TXT
格式象A中一样
举个例子,比如这两个矩阵相乘得
A11*B11+A12*B21+A13*B31
A21*B11+A22*B21+A23*B31
A31*B11+A32*B21+A33*B31
如果为2*2得 就是两行两列,括号我不打了
第一行乘第一列相加 第一行乘第二列相加
第二行乘第一列相加 第二行乘第二列相加
[ 本帖最后由 xeqxerxes 于 2009-4-2 17:09 编辑 ]
作者: Batcher 时间: 2009-4-1 14:21
把矩阵乘法的算术表达式更新到顶楼吧
不是每个人都知道矩阵乘法是咋回事
作者: Lumiere 时间: 2009-4-1 14:22
学过,可是忘记乘法的规则了,呵呵,太长时间了
作者: lhjoanna 时间: 2009-4-1 19:54
加了简单的注释,无误后改输出为R.txt。- @echo off&setlocal enabledelayedexpansion
-
- rem ------------------------------
- rem 创建两个矩阵
- rem ------------------------------
-
- call :create a.txt A
- call :create b.txt B
-
- rem -----------------------------
- rem 验证是否可以进行矩阵乘法
- rem -----------------------------
-
- if not !lie_A! equ !hang_B! (
- echo 两矩阵无法相乘
- pause>nul
- goto :eof
- )
-
- rem ------------------------------
- rem 矩阵相乘
- rem ------------------------------
-
- echo.&echo The result is:&echo.
- set /a hang_A-=1,lie_B-=1,lie_A-=1
- for /l %%i in (0 1 !hang_A!) do (
- for /l %%j in (0 1 !lie_B!) do (
- for /l %%k in (0 1 !lie_A!) do (
- set /a tmp=.A%%i%%k*.B%%k%%j
- set /a result+=tmp
- )
- call :unify
- set /p= !result!<nul
- set /a result=0
- )
- echo.
- )
- pause>nul
- goto :eof
-
- rem ----------------------------
- rem 子程序:创建矩阵
- rem ----------------------------
-
- :create
- set /a i=0
- for /f "delims=" %%a in (%~1) do (
- set /a j=0
- set "str=%%a"
- for %%b in (!str!) do (
- set .%~2!i!!j!=%%b
- set /a j+=1
- )
- set /a i+=1
- )
- set /a hang_%~2=i,lie_%~2=j
- goto :eof
-
- rem -----------------------------
- rem 子程序:统一输出格式
- rem -----------------------------
-
- :unify
- if !result! lss 100 set "result= !result!"
- if !result! lss 10 set "result= !result!"
- goto :eof
复制代码
作者: xeqxerxes 时间: 2009-4-2 17:09 标题: 回复 4楼 的帖子
佩服!
这样都行!
作者: lhjoanna 时间: 2009-4-2 18:53
虽然已经结贴,但补充两点:
1、对于验证矩阵是否可以相乘的部分,我只是简单的检查了A矩阵最后一行的元素个数和B矩阵最后一列的元素个数是否相等。并没有判断a.txt和b.txt中的数据是否能构成矩阵。
2、对于矩阵相乘的算法,我列出的这种是最笨的算法,也是效率很低的算法。在行数和列数相当的情况下,时间复杂度会达到3次方。如果矩阵行、列数很大,就需要借用高级语言来实现一些优化的算法了。
[ 本帖最后由 lhjoanna 于 2009-4-2 19:40 编辑 ]
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |