///A 为矩阵,这里写成一维数组,如 【1】,【1,2,3,4】
function GetLU(a)
{
var n = a.length;//矩阵的总数据数目
var s = Math.sqrt(n);//矩阵的阶数
var L = new Array(n);
var U = new Array(n); if (GetDet(a) != 0)
{ var allOrderNotEqulesZero = true;
for (var i = 0; i < s; i++)
{
if (GetDet(GetOrderMatrix(a, i)) == 0)
{
allOrderNotEqulesZero = false;
break;
}
} if (allOrderNotEqulesZero) {
for (var i = 0; i < s; i++)
{
for (var j = 0; j < s; j++)
{
if (i == j)
{
L[i*s + j] = 1;
}
else if (i < j)
{
L[i*s+j] = 0;
}
if (i > j)
U[i*s+j] = 0; U[0*s+j] = a[0*s+j];
L[i*s+0] = a[i*s+0] / U[0*s+0];
}
} for (var k = 1; k < s; k++)
{ for (var j = k; j < s; j++)
{
tmp = 0;
for (var m = 0; m < k; m++)
{
tmp += L[k*s+m] * U[m*s+j];
} U[k*s+j] = a[k*s+j] - tmp;
} for (var i = k+1; i < s; i++)
{
tmp = 0;
for (var m = 0; m < k; m++)
{
tmp += L[i*s+m] * U[m*s+k];
} L[i*s+k] = ( a[i*s+k] - tmp ) / U[k*s+k];
} }
}
else
{
alert('该矩阵的顺序主子式中有零!')
console.log(GetLastMatrix(a));
for (var i = 0; i < s; i++)
{
for (var j = 0; j < s; j++)
{
if (j > i)
{
U[i * s + j] = a[i * s + j];
L[i * s + j] = 0;
}
else if (j == i)
{
U[i * s + j] = a[i * s + j];
L[i * s + j] = 1;
}
else
{
L[i * s + j] = a[i * s + j];
U[i * s + j] = 0;
}
}
}
} console.log(L);
console.log(U);
}
else
{
alert('该矩阵为奇异矩阵,无法进行LU分解!');
} } function GetDet(a)
{
var n = a.length;//矩阵的总数据数目
var s = Math.sqrt(n);//矩阵的阶数
var sum = 0;
if (n == 1)
{
return a[0];
} for (var i = 0; i < s; i++)
{
if (i % 2 == 0)
{
sum += a[i] * GetDet(GetSubMatrix(a, i))
}
else
{
sum -= a[i] * GetDet(GetSubMatrix(a, i))
}
} return sum;
} ///获取比较第n列之后的矩阵
function GetLastMatrix(a)
{
var n = a.length;//矩阵的总数据数目
var s = Math.sqrt(n);//矩阵的阶数
var p = [];
for (var i = 0; i < s; i++)
{
for (var j = 0; j < s; j++)
{
if (i == j)
{
p.push(1); }
else {
p.push(0);
}
}
} for (var i = 0; i < s -1; i++)
{
a = GetNewMatrix(a, i, p);
} console.log(p);
return a;
} function GetNewMatrix(a, k, p)
{
var n = a.length;//矩阵的总数据数目
var s = Math.sqrt(n);//矩阵的阶数
var result = [];
var maxRowNum = 0;
var MAXValue = Math.abs(a[ k * s + k]);
for (var i = 1; i < s; i++)
{
if ( i >= k && Math.abs(a[i * s + k]) > MAXValue )
{
maxRowNum = i;
MAXValue = Math.abs(a[i * s + k]);
}
} //console.log('maxRowNum:' + maxRowNum);
//console.log('MAXValue:' + MAXValue); if (maxRowNum != k)
{
for (var i = 0; i < s; i++)
{ var temp = a[k * s + i];
a[k * s + i] = a[maxRowNum * s + i]
a[maxRowNum * s + i] = temp; var tmp1 = p[k * s + i];
p[k * s + i] = p[maxRowNum * s + i]
p[maxRowNum * s + i] = tmp1;
} //console.log(a);
//console.log(p); if (MAXValue != 0)
{
for (var i = k + 1; i < s; i++)
{ if (a[i * s + k] != 0)
{
a[i * s + k] = parseFloat(a[i * s + k] / a[k * s + k])
for (var j = k + 1; j< s; j++)
{
a[i * s + j] = parseFloat(a[i * s + j]- a[i * s + k] * a[k * s + j])
}
}
}
}
}else
{
if (MAXValue != 0)
{
for (var i = k + 1; i < s; i++)
{ if (a[i * s + k] != 0)
{
a[i * s + k] = parseFloat(a[i * s + k] / a[k * s + k])
for (var j = k + 1; j< s; j++)
{
a[i * s + j] = parseFloat(a[k * s + j] - a[i * s + k] * a[i * s + j])
}
}
}
}
} //console.log(a);
return a;
} ///a为原始矩阵,k为所在的列数
function GetSubMatrix(a, k)
{
var n = a.length;//矩阵的总数据数目
var s = Math.sqrt(n);//矩阵的阶数
var result = [];
for (var i = 1; i < s; i++)
{
for (var j = 0; j < s; j++)
{
if (k != j)
{
result.push(a[i*s +j]);
}
}
} return result;
} ///获取顺序主子式的矩阵, k为阶数
function GetOrderMatrix(a, k)
{
var n = a.length;//矩阵的总数据数目
var s = Math.sqrt(n);//矩阵的阶数
var result = [];
for (var i = 0; i < s; i++)
{
for (var j = 0; j < s; j++)
{
if (i <= k && j <= k)
{
result.push(a[i*s +j]);
}
}
} return result;
}

  

LU分解,Javascript代码的更多相关文章

  1. LU分解(1)

    1/6 LU 分解          LU 分解可以写成A = LU,这里的L代表下三角矩阵,U代表上三角矩阵.对应的matlab代码如下: function[L, U] =zlu(A) % ZLU ...

  2. 新书《编写可测试的JavaScript代码 》出版,感谢支持

    本书介绍 JavaScript专业开发人员必须具备的一个技能是能够编写可测试的代码.不管是创建新应用程序,还是重写遗留代码,本书都将向你展示如何为客户端和服务器编写和维护可测试的JavaScript代 ...

  3. 如何编写可维护的面向对象JavaScript代码

    能够写出可维护的面向对象JavaScript代 码不仅可以节约金钱,还能让你很受欢迎.不信?有可能你自己或者其他什么人有一天会回来重用你的代码.如果能尽量让这个经历不那么痛苦,就可以节省不少时 间.地 ...

  4. 一行能装逼的JavaScript代码

    一行能装逼的JavaScript代码 2016-06-28 野狗 一行神奇的JS代码,当时我就震 惊了,这不就是传说中的ZB神奇么… … 哈哈. 写本篇文章的缘由是之前看到了一段js代码,如下: (! ...

  5. LU分解(2)

    接着上次LU分解的讲解,这次给出使用不同的计算LU分解的方法,这种方法称为基于GaxPy的计算方法.这里需要了解lapapck中的一些函数.lapack中有一个函数名为gaxpy,所对应的矩阵计算公式 ...

  6. 翻译 | 一行 JavaScript 代码的逆向工程

    原文地址:Reverse Engineering One Line of JavaScript 原文作者:Alex Kras 译者:李波 校对者:冬青.小萝卜 几个月前,我看到一个邮件问:有没有人可以 ...

  7. 矩阵LU分解分块算法实现

    本文主要描述实现LU分解算法过程中遇到的问题及解决方案,并给出了全部源代码. 1. 什么是LU分解? 矩阵的LU分解源于线性方程组的高斯消元过程.对于一个含有N个变量的N个线性方程组,总可以用高斯消去 ...

  8. 编程原理—如何用javascript代码解决一些问题

    关于编程,我最喜欢的就是解决问题.我不相信有谁天生具有解决问题的能力.这是一种通过反复锻炼而建立并维持的能力.像任何练习一样,有一套指导方针可以帮助你更有效地提高解决问题的能力.我将介绍5个最重要的软 ...

  9. javascript代码 调试方法

    你的代码可能包含语法错误,逻辑错误,如果没有调试工具,这些错误比较难于发现. 通常,如果 JavaScript 出现错误,是不会有提示信息,这样你就无法找到代码错误的位置. 在程序代码中寻找错误叫做代 ...

随机推荐

  1. 帮助你在 Photoshop 中轻松实现长阴影效果的工具

    扁平化设计正被用于各个主流的移动操作系统以及许多流行的网站,这是一个不断上升的趋势. 这种趋势有其分支,其中之一是“长阴影 “的效果在元素上的使用. 采用角度为 45 度的投影,给对象添加了一份立体感 ...

  2. CSS魔法堂:选择器及其优先级

    一.前言    首先看看一道阿里这期网申的题目吧! 1.找出下面优先级相同的选择器 A. img.thumb:after B.[data-job="frontend"]::firs ...

  3. 自定义JSTL标签和函数库

    一.自定义JSTL标签 1.编写标签处理类: (1)实现 SimpleTag 接口,通过 setJspContext()方法可以获取到 jspContext 对象,实际上也是 pageContext ...

  4. MYSQL企业常用架构与调优经验分享

    一.选择Percona Server.MariaDB还是MYSQL  mysql应用源码:http://www.jinhusns.com/Products/Download/?type=xcj 1.M ...

  5. asp.net.web如何简单生成和保存二维码图片的例子

    首先,要有生成二维码图片,需要二维码生成的类库,到官网下载thoughtWorks.QRCode.dll 例子的步骤: 1.创建项目QRCodeTest1,选择asp.net.web窗体应用程序

  6. ActiveReports 报表应用教程 (9)---交互式报表之动态排序

    在 ActiveReports 中除了提供对数据源进行排序的功能之外,还提供了最终用户排序功能,最终用户可以对报表进行区域内排序和整个数据源排序,结合数据钻取.过滤等功能可以让用户更方便地分析报表数据 ...

  7. 继续寻找app开发的技术方案

    大概12年下半年开始,才有app开发已经来到身边的感觉. 但也一直只是感觉,没想到自己得亲身上阵. 由于要一个人做(帮朋友倒腾倒腾),而且要跨平台,而且前后台都要弄,而且时间有限. 最终选了web方式 ...

  8. Struts2中 Result类型配置详解

    一个result代表了一个可能的输出.当Action类的方法执行完成时,它返回一个字符串类型的结果码,框架根据这个结果码选择对应的result,向用户输出.在com.opensymphony.xwor ...

  9. 关于领域驱动设计(DDD)仓储的思考

    为什么需要仓储呢?领域对象(一般是聚合根)的被创建出来后的到最后持久化到数据库都需要跟数据库打交道,这样我们就需要一个类似数据库访问层的东西来管理领域对象.那是不是我们就可以设计一个类似DAL层的东东 ...

  10. [Xamarin.Android] ActionBar Tips

    [Xamarin.Android] ActionBar Tips ActionBar用途 快速搞懂 ActionBar的用途,可以参考下列文章: [Android]使用 ActionBarCompat ...