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 相关文章推荐
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
Aug 19 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
Jul 10 Javascript
jQuery EasyUI datagrid实现本地分页的方法
Feb 13 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
Mar 30 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
May 26 Javascript
根据Bootstrap Paginator改写的js分页插件
Dec 25 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
Feb 14 Javascript
JS Input里添加小图标的两种方法
Nov 11 Javascript
jQuery实现轮播图及其原理详解
Apr 12 jQuery
Vue的编码技巧与规范使用详解
Aug 28 Javascript
原生js实现的观察者和订阅者模式简单示例
Apr 18 Javascript
uni-app微信小程序登录授权的实现
May 22 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 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
Yii2下点击验证码的切换实例代码
2017/03/14 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
jquery文字上下滚动的实现方法
2013/03/22 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
javascript中的正则表达式使用详解
2015/08/30 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
vue router+vuex实现首页登录验证判断逻辑
2018/05/17 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
[01:32:22]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第一场 2月5日
2021/03/11 DOTA
python制作企业邮箱的爆破脚本
2016/10/05 Python
python K近邻算法的kd树实现
2018/09/06 Python
selenium+python环境配置教程详解
2019/05/28 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
高校十八大报告感想
2014/01/27 职场文书
行政助理的岗位职责
2014/02/18 职场文书
学期个人自我总结
2015/02/13 职场文书
Python道路车道线检测的实现
2021/06/27 Python
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript