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 相关文章推荐
Mootools 1.2教程 事件处理
Sep 15 Javascript
JQuery 写的个性导航菜单
Dec 24 Javascript
基于jquery的代码显示区域自动拉长效果
Dec 07 Javascript
js精度溢出解决方案
Dec 02 Javascript
js动态修改整个页面样式达到换肤效果
May 23 Javascript
JavaScript 基本概念
Jan 20 Javascript
JS中常用的正则表达式
Sep 29 Javascript
js闭包用法实例详解
Dec 13 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
Dec 01 Javascript
教你如何编写Vue.js的单元测试的方法
Oct 17 Javascript
vue+webpack中配置ESLint
Nov 07 Javascript
实例讲解React 组件生命周期
Jul 08 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中的CMS的涵义
2007/03/11 PHP
php 地区分类排序算法
2013/07/01 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
2016/08/16 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
vue抽出组件并传值实例
2020/07/31 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
vue实现登录功能
2020/12/31 Vue.js
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
python抓取京东商城手机列表url实例代码
2013/12/18 Python
python中__slots__用法实例
2015/06/04 Python
Python删除windows垃圾文件的方法
2015/07/14 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
python实现超市商品销售管理系统
2019/11/22 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
2020/03/11 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
python list的index()和find()的实现
2020/11/16 Python
印度购物网站:TATA CLiQ
2017/11/23 全球购物
个人作风建设自查报告
2014/10/22 职场文书
护士年终考核评语
2014/12/31 职场文书
2016春季幼儿园小班开学寄语
2015/12/03 职场文书
Python代码实现双链表
2022/05/25 Python