找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 494|回复: 1
打印 上一主题 下一主题
收起左侧

3x3矩阵的加法、乘法运算(运用了2维数组)

[复制链接]
跳转到指定楼层
楼主
'====================================================
' 程序:3x3矩阵运算测试版
' 功能:实现两个3x3矩阵的加法、乘法运算并显示结果
'本程序由deekseep生成~~~~
'====================================================

' 单片机配置文件
$regfile = "m16def.dat"            ' 设置晶振频率为8MHz
$crystal = 8000000                 ' 设置串口波特率为9600
$baud = 9600

' 定义3x3矩阵变量(索引从1开始)
Dim MatrixA(3 , 3) As Single    ' 矩阵A
Dim MatrixB(3 , 3) As Single    ' 矩阵B
Dim MatrixResult(3 , 3) As Single  ' 结果矩阵

' 定义循环计数器
Dim I As Byte , J As Byte , K As Byte

' 定义临时变量用于计算
Dim Temp As Single
Dim Temp1 As Single
Dim Temp2 As Single

' 预设测试矩阵数据
' 矩阵A:1-9的连续数字
MatrixA(1,1) = 1 : MatrixA(1,2) = 2 : MatrixA(1,3) = 3
MatrixA(2,1) = 4 : MatrixA(2,2) = 5 : MatrixA(2,3) = 6
MatrixA(3,1) = 7 : MatrixA(3,2) = 8 : MatrixA(3,3) = 9

' 矩阵B:9-1的递减数字
MatrixB(1,1) = 9 : MatrixB(1,2) = 8 : MatrixB(1,3) = 7
MatrixB(2,1) = 6 : MatrixB(2,2) = 5 : MatrixB(2,3) = 4
MatrixB(3,1) = 3 : MatrixB(3,2) = 2 : MatrixB(3,3) = 1

' 主程序开始
Main:
   ' 显示矩阵A
   Print "矩阵A:"
   Gosub Print_matrixa     '调用打印矩阵A的子程序
wait 2  
Print
   ' 显示矩阵B
   Print "矩阵B:"
   Gosub Print_matrixb     ''调用打印矩阵B的子程序
wait 2
Print  
   ' 计算并显示矩阵加法结果
   Print "加法结果(A+B):"

   Gosub Matrix_add        ' 调用矩阵加法运算子程序
   Gosub Print_result      ' 调用打印结果矩阵的子程序
wait 2
Print  
   ' 计算并显示矩阵乘法结果
   Print "乘法结果(A*B):"

   Gosub Matrix_mul        ' 调用矩阵乘法运算子程序
   Gosub Print_result      ' 调用打印结果矩阵的子程序

   ' 程序结束
   End

' 打印矩阵A的子程序
Print_matrixa:
   ' 外层循环遍历行
   For I = 1 To 3
      ' 内层循环遍历列
      For J = 1 To 3
         ' 打印当前元素并加空格
         Print MatrixA(i , J) ; " ";
waitms 200
      Next J
      ' 换行到下一行
      Print
   Next I
Return

' 打印矩阵B的子程序
Print_matrixb:
   For I = 1 To 3
      For J = 1 To 3
         Print MatrixB(i , J) ; " ";
waitms 200
      Next J
      Print
   Next I
Return

' 打印结果矩阵的子程序
Print_result:
   For I = 1 To 3
      For J = 1 To 3
         Print MatrixResult(i , J) ; " ";  '打印当前果矩阵元素并加空格
waitms 300
      Next J
      Print
   Next I
Return

' 矩阵加法运算子程序
Matrix_add:
   For I = 1 To 3        ' 遍历行
      For J = 1 To 3     ' 遍历列
         ' 对应位置元素相加
         MatrixResult(i , J) = MatrixA(i , J) + MatrixB(i , J)
      Next J
   Next I
Return

' 矩阵乘法运算子程序
Matrix_mul:
   For I = 1 To 3        ' 遍历结果矩阵的行
      For J = 1 To 3     ' 遍历结果矩阵的列
         Temp = 0        ' 初始化累加器        
         ' 矩阵乘法:A的第i行与B的第j列点乘
         For K = 1 To 3                  ' 遍历公共维度           
            Temp1 = MatrixA(i , K)       ' 单步计算:先取矩阵A第i行第K列的值           
            Temp2 = MatrixB(k , J)       ' 再取矩阵B第K行第j列的值           
            Temp1 = Temp1 * Temp2        ' 然后相乘得到单个乘积           
            Temp = Temp + Temp1          ' 最后累加到临时变量
         Next K      
         MatrixResult(i , J) = Temp      ' 将计算结果存入结果矩阵
      Next J
   Next I
Return

'(
程序功能说明:
这是一个用于ATmega16单片机的3x3矩阵运算程序,主要功能包括:

1. 矩阵定义:预定义了两个3x3测试矩阵(MatrixA和MatrixB)

2. 矩阵显示:可以打印显示原始矩阵和计算结果

3. 矩阵加法:实现两个矩阵的对应元素相加

4. 矩阵乘法:实现标准的矩阵乘法运算

5. 程序通过串口输出结果,便于调试和验证矩阵运算的正确性。

')


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:342822 发表于 2025-9-25 18:44 | 只看该作者

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表