【发布时间】:2017-06-30 00:52:40
【问题描述】:
到目前为止,我有这段代码用于 LU 分解。它接受一个输入数组并返回下三角矩阵和上三角矩阵。
void LUFactorization ( int d, const double*S, double*L, double*U )
{
for(int k = 0; k < d; ++k){
if (
for(int j = k; j < d; ++j){
double sum = 0.;
for(int p = 0; p < k; ++p) {
sum+=L[k*d+p]*L[p*d+j];
cout << L[k*d+p] << endl;
}
sum = S[k*d+j] - sum;
L[k*d+j]=sum;
U[k*d+j]=sum;
}
for(int i = k + 1; i < d; ++i){
double sum=0.;
for(int p = 0; p < k; ++p) sum+=L[i*d+p]*L[p*d+k];
L[i*d+k]=(S[i*d+k]-sum)/L[k*d+k];
}
}
for(int k = 0; k < d; ++k){
for(int j = k; j < d; ++j){
if (k < j) L[k*d+j]=0;
else if (k == j) L[k*d+j]=1;
}
}
}
有什么方法可以调整它来执行行交换吗?如果没有,是否有其他算法可以指导我?
谢谢
【问题讨论】:
-
在我提供完整答案之前,您是否知道,由于您从
j=k迭代到d,条件k <= j始终为真?因此,您将关于上对角矩阵的相同信息存储在 L 和 U 中,稍后仅在L中将其归零。 -
是的,我意识到了这一点,并对其进行了编辑。谢谢!
标签: c++ algorithm linear-programming factorization