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 相关文章推荐
JS 拼图游戏 面向对象,注释完整。
Jun 18 Javascript
编程语言JavaScript简介
Oct 16 Javascript
js中flexible.js实现淘宝弹性布局方案
Jun 23 Javascript
理解javascript中DOM事件
Dec 25 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
Jan 12 Javascript
AngularJS ng-bind 指令简单实现
Jul 30 Javascript
vue.js入门教程之计算属性
Sep 01 Javascript
jQuery自定义图片上传插件实例代码
Apr 04 jQuery
JS实现标签页切换效果
May 04 Javascript
JavaScript同源策略和跨域访问实例详解
Apr 03 Javascript
vue 项目build错误异常的解决方法
Apr 22 Javascript
详解JS实现简单的时分秒倒计时代码
Apr 25 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 面向对象 final类与final方法
2010/05/05 PHP
PHP实现删除非站内外部链接实例代码
2014/06/17 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
2020/11/18 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
vue父组件点击触发子组件事件的实例讲解
2018/02/08 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
Vue2.x通用编辑组件的封装及应用详解
2019/05/28 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
python开发之list操作实例分析
2016/02/22 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
音乐系毕业生自荐信
2013/10/27 职场文书
致跳高运动员加油稿
2014/02/12 职场文书
会计电算化应届生自荐信
2014/02/25 职场文书
安全标兵事迹材料
2014/08/17 职场文书
班子四风对照检查材料
2014/08/21 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
同学聚会祝酒词
2015/08/10 职场文书
2019年思想汇报
2019/06/20 职场文书
nginx限制并发连接请求数的方法
2021/04/01 Servers
java设计模式--建造者模式详解
2021/07/21 Java/Android
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript