JS实现简单的二维矩阵乘积运算


Posted in Javascript onJanuary 26, 2016

本文实例讲述了JS实现简单的二维矩阵乘积运算方法。分享给大家供大家参考,具体如下:

Console控制台截图如下:

JS实现简单的二维矩阵乘积运算

(上图为输出结果直接上代码了(A矩阵可以乘以B矩阵的前提是A矩阵的列数等于B矩阵的行数)

<!DOCTYPE html>
<html>
  <head>
    <title>demo</title>
  </head>
  <body>
  </body>
  <script type="text/javascript">
    function log(msg) {
      console.log(msg);
    }
    /**
    * 可视化的打印出矩阵的数据
    */
    function printMatrixData(data) {
      console.log(data);
      if(!data) {
        return;
      }
      var numberSize = 5;
      for(var i=0, len=data.length; i<len; i++) {
        var row = data[i];
        var rowLog = "(";
        for(var j=0, jLen=row.length; j<jLen; j++) {
          rowLog += row[j];
          // 补齐空格
          rowLog += indent(numberSize - (row[j]+"").length);
        }
        rowLog+=")";
        console.log(rowLog);
      }
    }
    /**
    * 拼接指定长度的空格
    */
    function indent(length) {
      var empty = "";
      for(var i=0; i<length; i++) {
        empty += " ";
      }
      return empty;
    }
    /**
    * 矩阵原型
    */
    function Matrix(data) {
      // 这里必须传一个二维数组,最好严格检验一下
      if(typeof data !== "object" || typeof data.length === "undefined" || !data) {
        throw new Error("data's type is error");
      }
      this.data = data;
      this.cols = data.length;
    }
    var M = {
      findByLocation: function(data, xIndex, yIndex) {
        if(data && data[xIndex]) {
          return data[xIndex][yIndex];
        }
      },
      // 矩阵乘积
      multiply: function(m, n) {
        if(!m instanceof Matrix && !n instanceof Matrix) {
          throw new Error("data's type is error");
        }
        var mData = m.data;
        var nData = n.data;
        if(mData.length == 0 || nData.length == 0) {
          return 0;
        }
        if(mData[0].length != nData.length) {
          throw new Error("the two martrix data is not allowed to dot");
        }
        var result = [];
        for(var i=0, len=mData.length; i<len; i++) {
          var mRow = mData[i];
          result[i] = [];
          for(var j=0, jLen=mRow.length; j<jLen; j++) {
            var resultRowCol = 0;
            // 如果n矩阵没有足够的列数相乘,转入m矩阵下一行
            if(typeof this.findByLocation(nData, 0, j) === "undefined") {
              break;
            }
            for(var k=0, kLen=jLen; k<kLen; k++) {
              resultRowCol += mRow[k]*this.findByLocation(nData, k, j);
            }
            result[i][j] = resultRowCol;
          }
        }
        return result;
      }
    };
    var m = new Matrix([[2, -1], [-2, 1], [-1, 2]]);
    var n = new Matrix([[4, -3], [3, 5]]);
    var result = M.multiply(m, n);
    printMatrixData(result);
    var m2 = new Matrix([[2, 3, 1], [5, 2, 4], [-3, 2, 0]]);
    var n2 = new Matrix([[11], [5], [8]]);
    var result2 = M.multiply(m2, n2);
    printMatrixData(result2);
  </script>
</html>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
收藏一些不常用,但是有用的代码
Mar 12 Javascript
jQuery实现鼠标可拖动调整表格列宽度
May 26 Javascript
瀑布流的实现方式(原生js+jquery+css3)
Jun 28 Javascript
自己封装的一个简单的倒计时功能实例
Nov 23 Javascript
JS实现列表页面隔行变色效果
Mar 25 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
Apr 20 Javascript
JS获取字符对应的ASCII码实例
Sep 10 Javascript
微信小程序开发之IOS和Android兼容的问题
Sep 26 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
Oct 21 Javascript
基于vue组件实现猜数字游戏
May 28 Javascript
JS执行控制之节流模式实例分析
Dec 21 Javascript
vue基础之data存储数据及v-for循环用法示例
Mar 08 Javascript
探究Javascript模板引擎mustache.js使用方法
Jan 26 #Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 #Javascript
一篇文章掌握RequireJS常用知识
Jan 26 #Javascript
JS正则表达式比较常见用法
Jan 26 #Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
Jan 26 #Javascript
JS组件中bootstrap multiselect两大组件较量
Jan 26 #Javascript
JS组件Form表单验证神器BootstrapValidator
Jan 26 #Javascript
You might like
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
Chrome Web App开发小结
2014/09/04 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
基于Jquery的动态添加控件并取值的实现代码
2010/09/24 Javascript
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
jquery插件jquery倒计时插件分享
2013/12/27 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
读Javascript高性能编程重点笔记
2016/12/21 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
python学习手册中的python多态示例代码
2014/01/21 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
简单html5代码获取地理位置
2014/03/31 HTML / CSS
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
机电专业体育教师求职信
2013/09/21 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript