0
到目前爲止,我有用於LU分解的此代碼。它需要一個輸入數組,並返回下三角矩陣和上三角矩陣。將旋轉功能添加到Doolittle算法
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'將其歸零。 –
是的,我意識到這一點,我編輯了它。謝謝! – DHuang