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 相关文章推荐
解析JavaScript中delete操作符不能删除的对象
Dec 03 Javascript
原生javascript模仿win8等待提示圆圈进度条
Apr 24 Javascript
详解JavaScript中的forEach()方法的使用
Jun 08 Javascript
JavaScript获取两个数组交集的方法
Jun 09 Javascript
javascript作用域链(Scope Chain)用法实例解析
Nov 30 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
Mar 27 Javascript
Node.js利用debug模块打印出调试日志的方法
Apr 25 Javascript
深入理解vue2.0路由如何配置问题
Jul 18 Javascript
基于JavaScript实现评论框展开和隐藏功能
Aug 25 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
Dec 09 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
Sep 25 Javascript
详解微信小程序回到顶部的两种方式
May 09 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
学习php笔记 字符串处理
2010/10/19 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
php curl_init函数用法
2014/01/31 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
python随机生成库faker库api实例详解
2019/11/28 Python
Python 实现数组相减示例
2019/12/27 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
公司开业庆典策划方案
2014/06/04 职场文书
小学安全汇报材料
2014/08/14 职场文书
个人股份转让协议书范本
2014/10/26 职场文书
聘任证明怎么写
2015/03/02 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android