///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. Android开发总结

    出来工作半年多了,没啥好交代的,就说说自己半年来的Android开发经历. 1.IDE      这半年来,从Eclipse到Android Studio,经历了两个IDE,在这里做一下简单的评价. ...

  2. tips null和undefined的区别

    tips null和undefined的区别 1.undefined类型 undefined类型只有一个值,即特殊的undefined.在使用var声明变量但未对其加以初始化时,这个变量的值就是und ...

  3. 用Qt写软件系列一:QCacheViewer(浏览器缓存查看器)

    介绍 Cache技术广泛应用于计算机行业的软硬件领域.该技术既是人们对新技术探讨的结果,也是对当前软硬件计算能力的一种妥协.在浏览器中使用cache技术,可以大幅度提高web页面的响应速度,降低数据传 ...

  4. Hyperion Business Modeling for Microsoft Windows (32-bit)

    介质包搜索 常见问题    说明   复查 许可证列表 以确定需要下载的产品程序包. 请选择产品程序包和平台,然后单击“查找”. 如果只有一项结果,则可以看到下载页.如果有多个结果,请选择一个,然后单 ...

  5. 自定义控件开发的调试及DesignMode的状态处理

    在开发Winform程序的时候,我们往往需要根据需要做一些自定义的控件模块,这样可以给系统模块重复利用,或者实现更好的效果等功能.但在使用的时候,我们又往往设计时刻发现一些莫名其妙的错误,那么我们该如 ...

  6. mysql数据库入门

    在很多地方都有人提到MySQL这个数据,之前没有接触过的mysql数据库的童鞋们可以跟我一起走进mysql的世界. http://hovertree.com/menu/mysql/ 安装我就不多说了, ...

  7. windbg学习进阶之——dump分析常用命令收集

    #重要说明 (1) windbg命令分为标准命令,元命令和扩展命令. 标准命令提供最基本的调试功能,不区分大小写.如:bp  g  dt  dv  k等 元命令提供标准命令没有提供的功能,也内建在调试 ...

  8. 动态生成RDLC报表

    前段时间,做了RDLC报表,主要是三块功能: 1.从DataGrid提取(包括最新的增删改)的数据,自动生成对应的RDLC报表文件(以流的形式驻存在内存中),用ReportViewer类来展示.打印. ...

  9. 重新想象 Windows 8.1 Store Apps (78) - 控件增强: ScrollViewer, FlipView, Popup

    [源码下载] 重新想象 Windows 8.1 Store Apps (78) - 控件增强: ScrollViewer, FlipView, Popup 作者:webabcd 介绍重新想象 Wind ...

  10. 操作AppConfig.xml中AppSettings对应值字符串

    //查询AppSettings的key         public static List sql()         {             List list = new List();   ...