題目:
編制程序求解矩陣 A 的 Cholesky 分解,并用程序求解方程組 Ax=b,其中
代碼實(shí)現(xiàn):
#include#include#includeusing namespace std;
//Cholesky 分解
void Cholesky(double a[4][4], double L[4][4], int m, int n) {for (int j = 0; j< n; j++)
for (int i = j; i< m; i++) {if (i == j) { double sum = 0;
for (int k = 0; k< j; k++) { sum = sum + L[j][k] * L[j][k];
}
L[i][j] = sqrt(a[i][j] - sum);
}
else { double sum = 0;
for (int k = 0; k< j; k++) {sum = sum + L[i][k] * L[j][k];
}
L[i][j] = (a[i][j] - sum) / L[j][j];
}
}
}
//初始化矩陣 L
void InitL(double L[4][4], int m, int n) {for (int i = 0; i< m; i++)
for (int j = 0; j< n; j++) { if (i< j) { L[i][j] = 0;
}
}
}
//顯示 L 和 LT 矩陣
void Display(double L[4][4], double LT[4][4], int m, int n) {cout<< "Cholesky 分解的 L 矩陣為:"<< endl;
for (int i = 0; i< m; i++) {for (int j = 0; j< n; j++) { cout<< setprecision(8)<< setw(12)<< L[i][j]<< "";
}
cout<< endl;
}
cout<< "Cholesky 分解的 LT 矩陣為:"<< endl;
for (int i = 0; i< m; i++) {for (int j = 0; j< n; j++) { cout<< setprecision(8)<< setw(12)<< L[j][i]<< "";
LT[i][j] = L[j][i];
}
cout<< endl;
}
}
//Ax=b 的解答 中間步驟求 y
double* SolveOne(double L[4][4], double b[4], int m, int n) {static double y[4];
y[0] = b[0] / L[0][0];
for (int i = 1; i< m; i++) {double sum = 0;
for (int k = 0; k< i; k++) { sum = sum + L[i][k] * y[k];
}
y[i] = (b[i] - sum) / L[i][i];
}
cout<< "解答的中間結(jié)果 y 為:"<< endl;
for (int i = 0; i< m; i++) {cout<< setprecision(8)<< setw(12)<< y[i]<< endl;
}
cout<< endl;
return y;
}
//Ax=b 的解答 最終結(jié)果
void SolveTwo(double L[4][4], double y[4], int m, int n) {double x[4];
x[m - 1] = y[m - 1] / L[n - 1][n - 1];
for (int i = m - 2; i >= 0; i--) {double sum = 0;
for (int k = i + 1; k< m; k++) { sum = sum + L[k][i] * x[k];
}
x[i] = (y[i] - sum) / L[i][i];
}
cout<< "解答的最終結(jié)果 x 為:"<< endl;
for (int i = 0; i< m; i++) {cout<< setprecision(8)<< setw(12)<< x[i]<< endl;
}
cout<< endl;
}
//主函數(shù)
int main() {double a[4][4] = {{2,1,-1,1},{1,5,2,7},{-1,2,10,1},{1,7,1,11} };
double b[4] = {13,-9,6,0 };
double L[4][4];//L 矩陣
double LT[4][4];//LT 矩陣
double* y;//中間矩陣 y
InitL(L, 4, 4);//初始化矩陣 L
Cholesky(a, L, 4, 4);//Cholesky 分解矩陣 A
Display(L, LT, 4, 4);//顯示矩陣 L 和 LT
//求解原方程 Ax=b 中間步驟:L*y = b; LT*x = y;
y = SolveOne(L, b, 4, 4);
SolveTwo(L, y, 4, 4);
return 0;
}
數(shù)值結(jié)果:
分析:
首先對(duì) A 矩陣進(jìn)行 Cholesky 分解,得到 L 矩陣,然后通過(guò)中間矩陣 y 求解矩陣 x。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享文章:C++實(shí)現(xiàn)Cholesky分解-創(chuàng)新互聯(lián)
本文URL:http://chinadenli.net/article22/deeojc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、App開(kāi)發(fā)、網(wǎng)站策劃、關(guān)鍵詞優(yōu)化、全網(wǎng)營(yíng)銷推廣、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容