矩阵乘法运算

源码下载

  利用嵌套for循环结构实现矩阵乘法法则,验证下面左侧矩阵的乘法运算结果是否等于右侧。

1 0 0 Tx
0 1 0 Ty
0 0 1 Tz
0 0 0 1
x
y
z
1
是否等于?
x+Tz
y+Ty
z+Tz
1
8        //声明一个矩阵乘法运算的函数matrix,矩阵有六个未知数
9        function matrix(x,y,z,Tx,Ty,Tz) {
10           //声明一个4X4矩阵,每四个元素为一组,代表矩阵的一列
11           let arr1 = [1,0,0,0,  0,1,0,0,  0,0,1,0,  Tx,Ty,Tz,1];
12           //声明一个4X1矩阵,四个元素为一组,代表矩阵的一列
13           let arr2 = [x,y,z,1];
14           //容纳arr1矩阵数组和arr2矩阵数组的乘积
15           let arr3 = [];
16           for(let i = 0;i<4;i++){
17               let S = 0;
18               for(let j = 0;j<4;j++){
19                   S =S + arr1[i+4*j]*arr2[j];
20               }
21               arr3.push(S);
22           }
23           return arr3;
24       }
25   /*  调用函数matrix并把函数返回的结果赋值给result(返回的结果不是一个数,是一个数组,
26       所以是把返回数据的索引地址赋值给变量result)*/
27       let result = matrix(1,1,1,0.5,0.5,0.5,0.5);
28       //循环遍历数组元素,显示在网页上
29       for(let i = 0;i<result.length;i++){
30           document.write(result[i]);
31           document.write("<br>");
32       }  

体验测试

  任意填写第27行代码matrix函数的6个参数,查看计算结果。

代码解析

  矩阵乘法法则是矩阵运算的基本法则之一,这里不详述,不清楚的自己百度下。一般比较有某种循环规律的计算流程,一般会选择关键字for或while来构建循环结构程序。上面两个矩阵一个是 4X4矩阵,一个是4X1矩阵,根据矩阵乘法法则,可以知道上面两个矩阵的计算过程是,左矩阵的第一行的四个元素和右矩阵第一列的四个元素分别相乘,并把相乘的结果相加,得到新矩阵的第一个元素, 左矩阵第二行的四个元素,重复上述第一行的计算过程,得到新矩阵的第二个元素,最终中得到的结果仍然是一个4X1矩阵。大家应该注意到这里面有两个循环操作,第一个是对应的四个元素分别相乘, 第二个是左矩阵的每一行都要重复第一行的操作。也就是说嵌套两层for循环结构。

  上面的分为三部分,第一部分是第9到第24行代码定义的是一个函数matrix,,第二部分是第27行代码调用上面定义的函数,第29行代码主要是把计算的结果成现在网页上。 这里主要来看第一部分代码,matrix函数是如何定义的,首先要做的是要声明三个数组,前两个数组用来分别表达两个矩阵,后一个数组用来存储计算结果。很多时候不论解题还是编程,很多 教程通常是给出方法,却没有给方法是如何想出来的,上面的for嵌套循环对于经常写程序的人,很简单,初次接触的往往不知如何下手。就本人写程序的时候的思考来看,不会直接就写出 嵌套的for循环结构,而是边写边思考,先从细节开始写,写细节的同时不要忘了思考。不动手去写代码,光思考是没用的的,光写不思考最终不会解决问题。如果你是初学者,建议把for循环程序阅读一遍,具体说 是模仿CPU阅读一遍。把里面抽象的符号i,j都换成具体的第几行,第几列,看看是否符合矩阵的乘法法则。

  里面的for循环结构表达的是对应的四个元素分别相乘的过程,j代表的左矩阵每一行的第j+1个元素,或这说右矩阵每一列的第j+1个元素; 外层的for循环结构表达的是左矩阵每一行分别参与运算的操作,i代表的就是左矩阵第i+1行。