读书人

能不能帮小弟我把这段代码改为VB代码

发布时间: 2012-07-31 12:33:47 作者: rapoo

能不能帮我把这段代码改为VB代码 ?
大意是这样的:将对称正定矩阵A分解为LDL^T(转置)的形式, L为下三角矩阵,对角线元素为1.D为对角阵
代码是求L D中的元素的。

C# 版本
public void cholfree(MAT A, out MAT L, out VEC D)
{
/*------------------------------------------ comment
Author : syz
Date : 2011-07-01 11:07:09
---------------------------------------------------
Desciption : 不开平方的CHOLESKY分解
* LDL'分解
Post Script :
*
paramtegers :
* A----------对称正定矩阵
* L----------L矩阵
* D----------对角矩阵-(这里实际用N维向量存储)
*
-------------------------------------------------*/
int N = A.dim1;
L = new MAT(N, N);
D = new VEC(N);

MAT G = new MAT(N, N);

int i, j, k;

//设置初值
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
{
L.ele[i, j] = 0.0;
G.ele[i, j] = 0.0;
}


D.ele[0] = A.ele[0, 0];

double tmp1;
for (i = 1; i < N; i++)
{
for (j = 0; j <= i - 1; j++)
//此层循环计算g(i,j)
{
tmp1 = 0.0;

for (k = 0; k <= j - 1; k++)
tmp1 = tmp1 + G.ele[i, k] * L.ele[j, k];

G.ele[i, j] = A.ele[i, j] - tmp1;

}

//此循环计算L(i,j)
for (j = 0; j <= i - 1; j++)
L.ele[i, j] = G.ele[i, j] / D.ele[j];

//以下计算D(i)
tmp1 = 0.0;
for (k = 0; k <= i - 1; k++)
tmp1 = tmp1 + G.ele[i, k] * L.ele[i, k];

D.ele[i] = A.ele[i, i] - tmp1;


}

//设置对角元素
for (i = 0; i < N; i++)
L.ele[i, i] = 1.0;
}

能不能帮忙改成VB代码啊? 谢谢了 。。。验证:
A=(2 2 -2)
2, 5 ,-4
-2 ,-4, 5

L=(1,0,0)
1,1,0
-1,-2/3,1

D=(2,0,0)
0, 3, 0
0, 0, 5/3


谢谢了


[解决办法]
我给你 私下联系哦!

读书人网 >VB

热点推荐