矩阵乘法运算
源码下载利用嵌套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行。