[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 【已解决】求助批处理矩阵乘法

假设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 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

把矩阵乘法的算术表达式更新到顶楼吧
不是每个人都知道矩阵乘法是咋回事
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

学过,可是忘记乘法的规则了,呵呵,太长时间了
Still with wax

TOP

加了简单的注释,无误后改输出为R.txt。
  1. @echo off&setlocal enabledelayedexpansion
  2. rem ------------------------------
  3. rem 创建两个矩阵
  4. rem ------------------------------
  5. call :create a.txt A
  6. call :create b.txt B
  7. rem -----------------------------
  8. rem  验证是否可以进行矩阵乘法
  9. rem -----------------------------
  10. if not !lie_A! equ !hang_B! (
  11.    echo 两矩阵无法相乘
  12.    pause>nul
  13.    goto :eof
  14. )
  15. rem ------------------------------
  16. rem   矩阵相乘
  17. rem ------------------------------
  18. echo.&echo  The result is:&echo.
  19. set /a hang_A-=1,lie_B-=1,lie_A-=1
  20. for /l %%i in (0 1 !hang_A!) do (
  21.     for /l %%j in (0 1 !lie_B!) do (
  22.         for /l %%k in (0 1 !lie_A!) do (
  23.             set /a tmp=.A%%i%%k*.B%%k%%j
  24.             set /a result+=tmp
  25.         )
  26.         call :unify
  27.         set /p= !result!<nul
  28.         set /a result=0
  29.     )
  30.     echo.
  31. )
  32. pause>nul
  33. goto :eof
  34. rem ----------------------------
  35. rem 子程序:创建矩阵
  36. rem ----------------------------
  37. :create
  38. set /a i=0
  39. for /f "delims=" %%a in (%~1) do (
  40.      set /a j=0
  41.      set "str=%%a"
  42.      for %%b in (!str!) do (
  43.         set .%~2!i!!j!=%%b
  44.         set /a j+=1
  45.      )
  46.      set /a i+=1
  47. )
  48. set /a hang_%~2=i,lie_%~2=j
  49. goto :eof
  50. rem -----------------------------
  51. rem 子程序:统一输出格式
  52. rem -----------------------------
  53. :unify
  54. if !result! lss 100 set "result= !result!"
  55. if !result! lss 10  set "result= !result!"
  56. goto :eof
复制代码

TOP

回复 4楼 的帖子

佩服!
这样都行!

TOP

虽然已经结贴,但补充两点:
  1、对于验证矩阵是否可以相乘的部分,我只是简单的检查了A矩阵最后一行的元素个数和B矩阵最后一列的元素个数是否相等。并没有判断a.txt和b.txt中的数据是否能构成矩阵。
  2、对于矩阵相乘的算法,我列出的这种是最笨的算法,也是效率很低的算法。在行数和列数相当的情况下,时间复杂度会达到3次方。如果矩阵行、列数很大,就需要借用高级语言来实现一些优化的算法了。

[ 本帖最后由 lhjoanna 于 2009-4-2 19:40 编辑 ]

TOP

返回列表