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 CSS修改学习第三章 修改样式表
Feb 19 Javascript
鼠标经过显示二级菜单js特效
Aug 13 Javascript
jquery ajax 简单范例(界面+后台)
Nov 19 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
Aug 30 Javascript
jQuery带进度条全屏图片轮播特效代码分享
Jun 28 Javascript
浅谈angular懒加载的一些坑
Aug 20 Javascript
Avalonjs 实现简单购物车功能(实例代码)
Feb 07 Javascript
微信小程序 request接口的封装实例代码
Apr 26 Javascript
jQuery.form.js的使用详解
Jun 14 jQuery
小程序测试后台服务的方法(ngrok)
Mar 08 Javascript
一文快速详解前端框架 Vue 最强大的功能
May 21 Javascript
vue proxy 的优势与使用场景实现
Jun 15 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 JSON 数据解析代码
2010/05/26 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
php简单复制文件的方法
2016/05/09 PHP
PHP面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
微信小程序 教程之列表渲染
2016/10/18 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
node删除、复制文件或文件夹示例代码
2019/08/13 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
Python常用模块用法分析
2014/09/08 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
Python实现压缩与解压gzip大文件的方法
2016/09/18 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
python函数与方法的区别总结
2019/06/23 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题
2012/12/13 HTML / CSS
统计岗位职责
2014/02/21 职场文书
大学生优秀自荐信范文
2014/02/25 职场文书
校长个人总结
2015/03/03 职场文书
你真的了解PHP中的引用符号(&)吗
2021/05/12 PHP
vue打包时去掉所有的console.log
2022/04/10 Vue.js