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的cookie的用法
Jan 10 Javascript
Draggable Elements 元素拖拽功能实现代码
Mar 30 Javascript
ajax提交表单实现网页无刷新注册示例
May 08 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
Nov 29 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
Nov 09 Javascript
JS声明式函数与赋值式函数实例分析
Dec 13 Javascript
Vue.js项目部署到服务器的详细步骤
Jul 17 Javascript
使用命令行工具npm新创建一个vue项目的方法
Dec 27 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
Apr 26 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
Apr 04 Javascript
BootStrap前端框架使用方法详解
Feb 26 Javascript
vue.js 解决v-model让select默认选中不生效的问题
Jul 28 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 print类函数使用总结
2010/06/25 PHP
php语言流程控制中的主动与被动
2012/11/05 PHP
php伪静态之APACHE篇
2014/06/02 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
jquery实现倒计时代码分享
2014/06/13 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
原生JS实现的双色球功能示例
2018/02/02 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
2019/06/18 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
python使用tkinter实现简单计算器
2018/01/30 Python
python配置grpc环境
2019/01/01 Python
python实现五子棋小游戏
2020/03/25 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
python 绘制正态曲线的示例
2020/09/24 Python
给上级领导的感谢信
2015/01/22 职场文书
销售内勤岗位职责
2015/02/10 职场文书
2022年四月新番
2022/03/15 日漫