




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
武漢大學數學與統計學院數值分析實驗報告實驗名稱關于正定矩陣cholesky分解的研究實驗時間2006年12月姓名雷錦江班級05級數類2班學號200531000174成績一、實驗目的,內容二、相關背景知識介紹三、代碼四、數值結果五、計算結果的分析六、計算中出現的問題,解決方法及體會實驗目的,內容通過對正定矩陣cholesky分解問題的深入研究,掌握對矩陣進行cholesky分解的不同方法。同時對C語言的編程方法進行練習,在此基礎上,學會使用數學軟件matlab對相關問題進行處理。相關背景知識介紹定理(Cholesky分解)如果A是對稱正定的,則存在惟一的一個對角元全部大于零的下三角陣,滿足。證明:由對稱矩陣的分解定理,存在單位下三角陣L和對角陣D=diag使得A=LD.由于大于零,則矩陣是對角元大于零的實下三角陣.它同時滿足.惟一性由分解的惟一性可推得。分解被稱為Cholesky分解,G被稱為Cholesky三角陣.如果我們計算Cholesky分解,然后解三角形方程組Gy=b和x=y,則b=Gy=G(x)=Gx=Ax.在上述定理中,Cholesky分解的證明是構造性的.然而,可以通過利用方程來得到計算Cholesky三角陣的更有效的方法.例:矩陣是正定的.常規Cholesky分解對于n階正定矩陣A,可導出按列的次序來計算其Cholesky分解因子G的元素的計算公式。對第k=1,2,…,n列,,i=k+1,k+2,…,n基于Gaxpy的Cholesky分解我們首先導出一個含有大量Gaxpy運算的Cholesky分解的實現方法.比較等式的第j列可得A(:,j)=.也就是說,G(j,j)(:,j)=A(:,j)-≡v.(*)如果G的第j-1列已知,則可計算出v.由(*)中各元素間的相等關系推出G(j:n,j)=v(j:n)/.這是數乘的Gaxpy運算。于是得到基于運算Gaxpy的Cholesky分解計算方法:Forj=1:nv(j:n)=A(j:n,j)Fork=1:j-1v(j:n)=v(j:n)-G(j,k)G(j:n,k)EndG(j:n,j)=v(j:n)/End可以在計算過程中用G覆蓋A的下三角部分.算法(Cholesky分解:基于Gaxpy運算)給出對稱正定陣,本算法計算出一個下三角陣滿足.對所有i≥j,G(I,j)覆蓋A(i,j).Forj=1:nIfj>1A(j:n,j)=A(j:n,j)-A(j:n,1:j-1)EndA(j:n,j)=A(j:n,j)/End本算法需flops.基于外積的Cholesky分解另一種基于外積(秩為1)的Cholesky分解可通過對矩陣做如下劃分得到:(**)這里,且因是A正定的,故.而是的主子陣,其中故它也是正定的.如果存在Cholesky分解=,則由(4.2.6)有,其中.因此可通過反復利用(**)來得到最終的Cholesky分解,其方向和kji形式的高斯消去法一樣.算法(Cholesky分解:基于外積運算)給定一對稱正定陣.本算法計算滿足的下三角陣,對所有的i>j,G(i,j)覆蓋A(i,j)Fork=1:nA(k,k)=A(k+1:n,k)=A(k+1:n,k)/A(k,k)Forj=k+1:nA(j:n,j)=A(j:n,j)-A(j:n,k)A(j,k)EndEnd本算法需flops.注意,其中的j循環計算外積的下三角部分:A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-A(k+1:n,k).回想在Gaxpy運算和外積運算的比較,容易得知Gaxpy運算中讀寫向量的次數要比外積運算中少一半.基于分塊點積的Cholesky分解假定對稱正定,將A=()和其Cholesky因子看作含有方塊對角塊的N*N分塊陣.取出等式中關于第(I,j)塊(i≥j)的等式有=定義S=-則有,當i=j時,當i>j時,.通過合適的排序,這些方程可用來求得所有的算法(Cholesky:基于分塊點積運算)給定一個對稱正定陣,本算法可求得一個下三角陣滿足,A的下三角部分被G覆蓋,A被看作是含方對角塊的N*N分塊陣.Forj=1:NFori=j:NS=-Ifi=j計算Cholesky分解S=Else從=S解出End用覆蓋EndEnd整個算法需flops,與前述其他形式的Cholesky算法相同.假定A被適當分塊,則本算法中含有大量的矩陣乘法運算.例如,如果n=rN,且每個都是R*R的,則3級運算量約占1-(1/.).由于沒有給出基于gaxpy運算的Cholesky算法得出。將基于gaxpy的Cholesky分解執行r步后,我們已知中的和。再接下來我們不對A,而是對已明顯形成具有可利用的對稱結構的約化后的矩陣進行另外的r步基于gaxpy的Cholesky計算。按此方法進行下去,我們得到基于分塊的Cholesky計算。按此方法進行下去,我們得到基于分塊的Cholesky分解算法,去第k不是對n-(k-1)r階的矩陣進行r次基于gaxpy的Cholesky分解,接著是階為n-kr的三級算法。如果,則三級運算量約占1-3/(2N)。Cholesky分解的穩定性在精確運算下,我們知對稱正定陣存在Cholesky分解.反之,如果一個Cholesky分解過程能夠順利進行完且得到嚴格大于零的平方根,那么A是正定的.因此,判斷是否正定,我們只需用上述任一方法來試著計算其Cholesky分解.有舍入誤差是情形更為有意思.Cholesky算法的數值穩定性大致可從不等式:導出.該不等式說明Cholesky三角陣因子有很好的界.由也可推出相同的結論.Wilkinson(1968)在其經典的論文中對Cholesky分解的舍入誤差作了深入研究.利用該論文的結果可證明,如果是通過上述任一Cholesky分解求得的Ax=b的計算解,則滿足擾動方程組(A+E)=b,其中=,是由決定的小常數.Wilkinson進一步指出,如果,其中是另一個小常數,則分解能夠執行到底,而不會出現對負數開平方根.三、代碼常規Cholesky分解#defineN3#include"math.h"main(){floata[N][N],g[N][N],*pa,temp1,temp2;inti,j,k;pa=a[0];printf("Pleaseinputthemaxim:\n");for(i=0;i<N;i++){pa=pa+i;for(j=i;j<N;j++) scanf("%f",pa++);}for(i=1;i<N;i++)for(j=0;j<i;j++)a[i][j]=a[j][i];for(k=0;k<N;k++){temp1=0;for(j=0;j<k;j++) temp1=temp1+g[k][j]*g[k][j]; g[k][k]=sqrt(a[k][k]-temp1); for(i=k+1;i<N;i++) {temp2=0; for(j=0;j<k;j++) temp2=temp2+g[i][j]*g[k][j]; g[i][k]=(a[i][k]-temp2)/g[k][k]; }}for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)g[i][j]=0;for(i=0;i<N;i++){printf("\n");for(j=0;j<N;j++) printf("%6.2f",g[i][j]);}getch();}基于Gaxpy的Cholesky分解#defineN5#include"math.h"main(){floata[N][N],*pa,temp;inti,j,k;pa=a[0];printf("Pleaseinputthemaxim:\n");for(i=0;i<N;i++){pa=pa+i;for(j=i;j<N;j++) scanf("%f",pa++);}for(i=1;i<N;i++)for(j=0;j<i;j++)a[i][j]=a[j][i];for(j=0;j<N;j++){temp=0;for(k=0;k<j;k++) temp=temp+a[j][k]*a[j][k];a[j][j]=sqrt(a[j][j]-temp);for(i=j+1;i<N;i++) {temp=0; for(k=0;k<j;k++) temp=temp+a[j][k]*a[i][k]; a[i][j]=(a[i][j]-temp)/a[j][j]; }}for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)a[i][j]=0;for(i=0;i<N;i++){printf("\n");for(j=0;j<N;j++) printf("%6.2f",a[i][j]);}getch();}基于外積的Cholesky分解#defineN4#include"math.h"main(){floata[N][N],*pa;inti,j,p,q;pa=a[0];printf("Pleaseinputthemaxim:\n");for(i=0;i<N;i++){pa=pa+i;for(j=i;j<N;j++) scanf("%f",pa++);}for(i=1;i<N;i++)for(j=0;j<i;j++)a[i][j]=a[j][i];for(j=0;j<N;j++){for(p=j+1;p<N;p++) for(q=j+1;q<N;q++) a[p][q]=a[p][q]-a[p][j]*a[q][j]/a[j][j];a[j][j]=sqrt(a[j][j]);for(i=j+1;i<N;i++) a[i][j]=a[i][j]/a[j][j];}for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)a[i][j]=0;for(i=0;i<N;i++){printf("\n");for(j=0;j<N;j++) printf("%6.2f",a[i][j]);}getch();}
基于分塊點積的Cholesky分解#defineN5#include"math.h"main(){floata[N][N],*pa,temp;inti,j,k,p,q;pa=a[0];printf("Pleaseinputthemaxim:\n");for(i=0;i<N;i++){pa=pa+i;for(j=i;j<N;j++) scanf("%f",pa++);}for(i=1;i<N;i++)for(j=0;j<i;j++)a[i][j]=a[j][i];p=N/3;for(q=0;q<p;q++){for(j=3*q;j<3*q+3;j++) {temp=0; for(k=0;k<j;k++) temp=temp+a[j][k]*a[j][k]; a[j][j]=sqrt(a[j][j]-temp); for(i=j+1;i<N;i++) {temp=0; for(k=0;k<j;k++) temp=temp+a[j][k]*a[i][k]; a[i][j]=(a[i][j]-temp)/a[j][j]; } }}if((N-p*3)==2){for(j=N-2;j<N;j++) {temp=0; for(k=0;k<j;k++) temp=temp+a[j][k]*a[j][k]; a[j][j]=sqrt(a[j][j]-temp); for(i=j+1;i<N;i++) {temp=0; for(k=0;k<j;k++) temp=temp+a[j][k]*a[i][k]; a[i][j]=(a[i][j]-temp)/a[j][j]; } } }if((N-p*3)==1){temp=0; for(k=0;k<N-1;k++) temp=temp+a[N-1][k]*a[N-1][k]; a[N-1][N-1]=sqrt(a[N-1][N-1]-temp); }for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)a[i][j]=0;for(i=0;i<N;i++){printf("\n");for(j=0;j<N;j++) printf("%6.2f",a[i][j]);}getch();}四.數值結果常規Cholesky分解Pleaseinputthemaxim:4-2410-282.000.000.00-1.003.000.002.000.002.00基于Gaxpy的Cholesky分解Pleaseinputthemaxim:111112222333441.000.000.000.000.001.001.000.000.000.001.001.001.000.000.001.001.001.001.000.001.001.001.001.001.00基于外積的Cholesky分解Pleaseinputthemaxim:11112223341.000.000.000.001.001.000.000.001.001.001.000.001.001.001.001.00基于分塊點積的Cholesky分解Pleaseinputthemaxim963123291213124130473740643.000.000.000.000.002.005.000.000.000.001.002.006.000.000.004.001.004.002.000.001.002.007.003.001.00五.計算結果分析由于在編程中才有的是浮點數,所以由于系統的限制,該程序的精確度最高能達到6-7位有效數字,而且由于水平有限,該程序只是針對正定矩陣進行Cholesky分解的。對于標準的正定矩陣,且在有效數字位數之內,該程序是有效的。在程序的輸出中,為了使輸出更為明了清晰,我選擇了保留兩位小數,再不影響精度的情況下,這種選取是可取的。六.計算中出現的問題,解決方法及體會這篇論文從開始策劃到最終完成,共花了我們一個多星期的時間,從最開始的擔心無法完成課題的研究,到后來的查資料,編程,到最后的完成論文,我們體會到了其間的種種苦樂,當最終論文完成時,我們感到就如同完成了一件花了很多時間和精力完成的工藝品,也許有很多地方略顯粗糙,但這畢竟是我們努力的結果,我們對于這樣的結果是滿意的,已經沒有遺憾了。在進行Cholesky分解的研究過程中,我認為最關鍵的是對于算法的研究和程序的編寫,由于相關資料略顯簡略,我花了一定的時間將算法弄透,接下來就進入了程序的編寫過程。在編程中,我確實遇到了一些困難,其中多次出現了參數設定的錯誤,而且該錯誤不能被低階的矩陣所反映,所以我曾一度以為程序編寫完成,而實際上程序中還存在著問題,當我對程序作最后測試的時候,才發現了問題,并花了相當長的時間完成了程序的矯正。從中我也得到了頗多的收獲。同時我想指出的是,在考慮基于分塊矩陣的Cholesky分解時,我曾一度想讓計算機能夠根據矩陣的階數自動將其分解,其具體方法是設定一個素數庫,然后在素數庫中按從小到大的順序,依次除以矩陣階數,直到出現能整除的素數為止,其數學基礎是應用了代數基本原則。但后來我又考慮到如果矩陣的階數是一個很大的素數,那么這種方法將轉變為基于Gaxpy的Cholesky分解,而且由于素數庫的限制,該算法不能將某些矩陣分解。于是我最終采取了前面提到的關于基于分塊矩陣的Cholesky分解。最后,要感謝向老師對我們這個課題研究的關心,他在百忙之中抽空對我們的研究提出了寶貴的意見,在這里向他表示誠摯的感謝!七.參考書目:1.MATRIXCOMPUTATIONS(ThirdEdition)GeneH.Golub&CharlesF.VanLoan2.數值計算方法鄭慧嬈陳紹林莫忠息黃象鼎(與邢周華同學合作完成)教師評語指導教師:年月日
武漢大學數學與統計學院數值分析原始書記記錄實驗名稱:關于正定矩陣cholesky分解的研究實驗時間:2006年12月16日姓名:雷錦江邢周華學號:200531000174200531000224班級:05級數學類二班常規Cholesky分解Pleaseinp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 童趣表情包IP授權與動畫制作合同
- 藥品進口代理與供應鏈管理服務合同
- 普及型教育機構招生專員派遣合同
- 建筑施工安全與質量保證協議
- 離婚協議份數要求與生效程序規定的財產分配合同
- 網絡直播設備故障排查與快速修復服務合同
- 節日電商促銷活動消費者隱私保護與風控合同
- 海外留學生家長保險代理服務協議
- 時尚服飾品牌市場推廣活動保險補充協議
- 網店運營稅費代繳及稅務合規服務合同
- 數字修約考試題及答案
- 山東大學《軍事理論》考試試卷及答案解析
- 面向非結構化文本的事件關系抽取關鍵技術剖析與實踐
- 《國別和區域研究專題》教學大綱
- 2025年日歷表含農歷(2025年12個月日歷-每月一張A4可打印)
- 《ESC血壓升高和高血壓管理2024指南》解讀
- 學科競賽在提升學生團隊協作能力中的作用
- 《公共管理學基礎》題庫及答案
- 基本藥物工作計劃
- 2025年行政執法人員執法資格考試必考題庫及答案(共232題)
- 2025手術室年度工作計劃
評論
0/150
提交評論