| 查看: 2837 | 回復: 10 | ||
舒馬諾銀蟲 (初入文壇)
|
[求助]
帶平方根的(LLT)Cholesky算法分解對稱正定矩陣 c語言實現(xiàn)
|
|
|
新人,不懂規(guī)矩,見諒 大神們好,要求 1先判斷任意矩陣A是否為正定對稱矩陣,否則,返回輸入錯誤 2若輸入為正定對稱矩陣,則將其進行帶平方根的(LLT)Cholesky算法分解,即實現(xiàn)A=LL^T,其中L為下三角形矩陣。 大致就這意思,求助 定理 |
鐵桿木蟲 (職業(yè)作家)

銀蟲 (初入文壇)
|
# include # include void main() { float m,A[9]; float L[6]; printf("請輸入矩陣: \n " ;scanf("%f %f %f\n%f %f %f\n%f %f %f\n",&A[0],&A[1],&A[2],&A[3],&A[4],&A[5],&A[6],&A[7],&A[8]); printf("請輸入??許誤差:m=" ;scanf("%f",&m); if A[0]>m&&(A[0]*A[4]-A[1]*A[3]>m)&&(A[6]*A[4]*A[2]+A[0]*A[7]*A[5]+A[1]*A[3]*A[8]-A[0]*A[4]*A[8]-A[1]*A[6]*A[5]-A[2]*A[3]*A[7]>m)&&(A[1]==A[3])&&(A[2]==A[6])&&(A[5]==A[7]) { L[0]=sqrt(A[0]); L[1]=A[3]/L[0]; L[3]=A[6]/L[0]; L[2]=sqrt(A[4]-L[1]*L[1]); L[4]=(A[7]-L[3]*L[1])/L[2]; L[5]=sqrt(A[8]-L[3]*L[3]-L[4]*L[4]); printf("所求矩陣為L=\n %f 0 0\n%f %f 0\n%f %f %f\n",L[0],L[1],L[2],L[3],L[4], L[5]); } else printf("輸入有誤,請檢查" ;} 調試??行: 1>.\Debug\shiyan.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. {_~0p'1a@'7v par 1>Build log was saved at "file://e:\360data\????數(shù)???\桌???\shiyan\shiyan\Debug\BuildLog.htm" 1>shiyan - 1 error(s), 0 warning(s) ========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ========== 工程無法建立 預期效果: 請輸入矩陣: 1 2 3 2 4 5 3 5 6 請輸入??許誤差:m=1e-6 輸入有誤,請檢查 請輸入矩陣: 5 2 -4 2 1 -2 -4 -2 5 請輸入??許誤差:m=1e-6 所求矩陣L= 2.236068 0 0 0.894427 0.4472136 0 -1.788854 -0.894427 1 我的算法??行??通過啊,而且根本未能實現(xiàn)針對任??階次的矩陣。。。求大神幫忙~ |
銀蟲 (初入文壇)
|
# include # include void main() { float m,A[9]; float L[6]; printf("請輸入矩陣: \n " ;scanf("%f %f %f\n%f %f %f\n%f %f %f\n",&A[0],&A[1],&A[2],&A[3],&A[4],&A[5],&A[6],&A[7],&A[8]); printf("請輸入允許誤差:m=" ;scanf("%f",&m); if A[0]>m&&(A[0]*A[4]-A[1]*A[3]>m)&&(A[6]*A[4]*A[2]+A[0]*A[7]*A[5]+A[1]*A[3]*A[8]-A[0]*A[4]*A[8]-A[1]*A[6]*A[5]-A[2]*A[3]*A[7]>m)&&(A[1]==A[3])&&(A[2]==A[6])&&(A[5]==A[7]) { L[0]=sqrt(A[0]); L[1]=A[3]/L[0]; L[3]=A[6]/L[0]; L[2]=sqrt(A[4]-L[1]*L[1]); L[4]=(A[7]-L[3]*L[1])/L[2]; L[5]=sqrt(A[8]-L[3]*L[3]-L[4]*L[4]); printf("所求矩陣為L=\n %f 0 0\n%f %f 0\n%f %f %f\n",L[0],L[1],L[2],L[3],L[4], L[5]); } else printf("輸入有誤,請檢查" ;} 調試運行: 1>.\Debug\shiyan.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. {_~0p'1a@'7v par 1>Build log was saved at "file://e:\360data\重要數(shù)據(jù)\桌面\shiyan\shiyan\Debug\BuildLog.htm" 1>shiyan - 1 error(s), 0 warning(s) ========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ========== 工程無法建立 失敗了,而且達不到針對任意階次矩陣的效果! |
鐵桿木蟲 (職業(yè)作家)
|
matlab里面直接用root函數(shù)就可以了, 下面是我寫的c++的: // 定義Matrix類(略) // m*n階0矩陣 void Matrix::zeros(int m,int n,double** a){ for(int i=0;i } } } // n為矩陣的階 void Matrix::root(int n,double** A,double** L){ zeros(n,n,L); for(int i=0;i for(int k=0;k } L[j]=(A[j]-sum)/L[j][j]; } double sum=0; for(int k=0;k sum+=L[k]*L[k]; } L=sqrt(A-sum);// 顯然 A-sum<0時不是正定矩陣 } } |

銀蟲 (初入文壇)
鐵桿木蟲 (職業(yè)作家)

鐵桿木蟲 (職業(yè)作家)

鐵桿木蟲 (職業(yè)作家)
|
void Matrix::zeros(int m,int n,double** a){ for(int i=0;i } } } void Matrix::root(int n,double** A,double** L){ zeros(n,n,L); for(int i=0;i for(int k=0;k } L[j]=(A[j]\[i\]-sum)/L[j][j]; } double sum=0; for(int k=0;k sum+=L\[i\][k]*L\[i\][k]; } L=sqrt(A\[i\]\[i\]-sum); } } 把上面的中括號前的反斜線去掉就行了 |

銀蟲 (初入文壇)
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研]
|
鐘llll 2026-03-26 | 5/250 |
|
|---|---|---|---|---|
|
[考研] 0703化學321分求調劑 +10 | 三dd. 2026-03-30 | 11/550 |
|
|
[考研] 287求調劑 +14 | land xuxu 2026-03-26 | 14/700 |
|
|
[考研] 297求調劑 +17 | 田洪有 2026-03-26 | 18/900 |
|
|
[考研] 一志愿南開大學0710生物學359求調劑 +5 | 兔兔兔111223314 2026-03-29 | 7/350 |
|
|
[考研] 材料化工340求調劑 +3 | jhx777 2026-03-30 | 3/150 |
|
|
[考研] 南京大學化學調劑 +10 | 景隨風 2026-03-29 | 15/750 |
|
|
[考研] 375求調劑 +6 | 雨夏整夜 2026-03-29 | 6/300 |
|
|
[考研] 275求調劑 +15 | Micky11223 2026-03-25 | 20/1000 |
|
|
[考研] 【求調劑】085601材料工程專碩 | 總分272 | +7 | 腳滑的守法公民 2026-03-27 | 7/350 |
|
|
[考研] 299求調劑 +10 | 15188958825 2026-03-25 | 10/500 |
|
|
[考研] 289求調劑 +5 | BrightLL 2026-03-29 | 5/250 |
|
|
[考研] 一志愿北京理工大學本科211材料工程294求調劑 +8 | mikasa的圍巾 2026-03-28 | 8/400 |
|
|
[考研] 332求92調劑 +8 | 蕉蕉123 2026-03-28 | 8/400 |
|
|
[碩博家園] 招收生物學/細胞生物學調劑 +4 | IceGuo 2026-03-26 | 5/250 |
|
|
[考研] 086000調劑 +3 | 7901117076 2026-03-26 | 3/150 |
|
|
[考研] 一志愿上海理工能源動力(085800)310分求調劑 +3 | zhangmingc 2026-03-27 | 4/200 |
|
|
[考研] 一志愿鄭大085600,310分求調劑 +5 | 李瀟可 2026-03-26 | 5/250 |
|
|
[考研] 考研調劑 +9 | 小蠟新筆 2026-03-26 | 9/450 |
|
|
[考研] 材料求調劑 +5 | .m.. 2026-03-25 | 5/250 |
|