北航數(shù)值分析A大作業(yè)_第1頁(yè)
北航數(shù)值分析A大作業(yè)_第2頁(yè)
北航數(shù)值分析A大作業(yè)_第3頁(yè)
北航數(shù)值分析A大作業(yè)_第4頁(yè)
北航數(shù)值分析A大作業(yè)_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一、算法設(shè)計(jì)方案1、解非線(xiàn)性方程組將各擬合節(jié)點(diǎn)(xi,yj)分別帶入非線(xiàn)性方程組,求出與相對(duì)應(yīng)的數(shù)組teij,ueij,求解非線(xiàn)性方程組選擇Newton迭代法,迭代過(guò)程中需要求解線(xiàn)性方程組,選擇選主元的Doolittle分解法。2、二元二次分偏插值對(duì)數(shù)表z(t,u)進(jìn)行分片二次代數(shù)插值,求得對(duì)應(yīng)(tij,uij)處的值,即為 的值。根據(jù)給定的數(shù)表,可將整個(gè)插值區(qū)域分成 16 個(gè)小 的區(qū)域,故先判斷(t ij, u ij ) 所在,的區(qū)域,再作此區(qū)域的插值,計(jì)算 z ij,相應(yīng)的Lagrange形式的插值多項(xiàng)式為:其中 (k=m-1, m, m+1) (r=n-1, n, n+1)3、曲面擬合從

2、k=1開(kāi)始逐漸增大k的值,使用最小二乘法曲面擬合法對(duì)z=f(x,y)進(jìn)行擬合,當(dāng)時(shí)結(jié)束計(jì)算。擬合基函數(shù)r(x)s(y)選擇為r(x)=xr,s(y)=ys。擬合系數(shù)矩陣c通過(guò)連續(xù)兩次解線(xiàn)性方程組求得。, 其中,4、觀察比較計(jì)算的值并輸出結(jié)果,以觀察逼近的效果。其中。二、全部源程序/ hean.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。/#include stdafx.h#include #include #include void Set_non_JacobiA(double* A,double* x);/求題中非線(xiàn)性方程組對(duì)應(yīng)自變量向量x的雅克比/矩陣void Set_non_B(double

3、* B,double* x,double a,double b);/求非線(xiàn)性方程組Newton迭代法的右/端式:-F(x)void Array_Mult_Array(double* A,double* B,int m,int s,int n,double* C);/矩陣相乘ABCvoid Transpose(double *A,int m,int n,double* AT);/轉(zhuǎn)置void Doolittle(double *A,int n,int *M);void Solve_LU(double* A,int n,double* b,double* x);/解方程LUxbvoid Solve

4、_lin(double* A,int n,double* B,double* x,int m);/解線(xiàn)性方程組AxBdouble Vector_FanShu(double *V,int n);void Solve_non_Equation(double a,double b,double* x);/求解非線(xiàn)性方程組int Near_Index(double* v,double a,int n);/查找n維向量V中與常數(shù)a最接近的元素的下標(biāo)double ChaZhi(double a,double b);/求數(shù)表z(t,u)在點(diǎn)(x,y)處的分片二次代數(shù)差值void NiHe(double*U,

5、double*x,double*y,int m,int n,int p,int q,double*C);/對(duì)mn數(shù)表U(x,y)進(jìn)行二元多項(xiàng)式擬合double Pxy(double *C,int p,int q,double x,double y);/求多項(xiàng)式擬合函數(shù)P(x,y)在點(diǎn)(x,y)處的函數(shù)值void main()double non4; /非線(xiàn)性方程組變量向量(t,u,v,w)double f1121;/f(x,y)在擬合節(jié)點(diǎn)處的值double x11,y21;/擬合節(jié)點(diǎn)double *C;/擬合系數(shù)矩陣double det=1e-7;/擬合精度要求double p,d;int i

6、,j,k,t;/設(shè)置擬合節(jié)點(diǎn)for(i=0;i11;i+)xi=0.08*i;for(j=0;j21;j+)yj=0.5+0.05*j;/求擬合節(jié)點(diǎn)處的f(x,y)的值for(i=0;i11;i+)for(j=0;j21;j+)Solve_non_Equation(xi,yj,non);fij=ChaZhi(non0,non1);printf(n 數(shù)值分析第三次大作業(yè)n);/打印數(shù)表f(xi,yi)printf(n f(xi,yi) n);for(t=0;t21/3;t+)printf(-n);printf(| f(x,y) |);for(i=3*t;i3*t+3;i+)printf( y=%

7、4.2f |,yi);printf(n);for(j=0;j11;j+)printf(| x=%4.2f |,xj);for(i=3*t;i3*t+3;i+)printf( %+.12e |,fji);printf(n);printf(-n);printf(n);k=0;printf( 不同k對(duì)應(yīng)的精度 );printf(n-);doC=(double*) calloc(k+1)*(k+1),sizeof(double);NiHe(*f,x,y,11,21,k+1,k+1,C);/求在當(dāng)前k值擬合的節(jié)點(diǎn)處誤差d=0;for(i=0;i11;i+)for(j=0;j=det)free(C);el

8、seprintf(n-);printf(n 故可知k=k=%d%.0e,滿(mǎn)足題設(shè)要求,det);break;while(+k11);/打印擬合系數(shù)矩陣cprintf(nnn 當(dāng)k=%d時(shí)擬合函數(shù)p(x,y)的系數(shù)矩陣c:n,k);printf(-n);for(t=0;t(k+1)/3;t+)for(i=0;i(k+1);i+)for(j=3*t;j3*t+3;j+)printf( %+.12e ,Ci*(k+1)+j);printf(n);printf(-n);/打印(x*,y*)處的擬合逼近情況printf(nn觀察以下各點(diǎn)的逼近情況n);printf( | (x*,y*) | f(x*,y

9、*) | p(x*,y*) | |f-p| |n);printf(-n);for(i=1;i=8;i+)for(j=1;j=5;j+)Solve_non_Equation(0.1*i,0.5+0.2*j,non);d=ChaZhi(non0,non1);p=Pxy(C,k+1,k+1,0.1*i,0.5+0.2*j);printf( | (%3.1f,%3.1f)| %+.12e | %+.12e | %f |n,0.1*i,0.5+0.2*j,d,p,abs(d-p);printf(-nnn);/求題中非線(xiàn)性方程組對(duì)應(yīng)自變量向量x的雅克比矩陣void Set_non_JacobiA(doub

10、le* A,double* x)/A為*4階系數(shù)矩陣,x為自變量(t,u,v,w)A0=-0.5*sin(x0);A1=1;A2=1;A3=1;A4=1;A5=0.5*cos(x1);A6=1;A7=1;A8=0.5;A9=1;A10=-sin(x2);A11=1;A12=1;A13=0.5;A14=1;A15=cos(x3);/求非線(xiàn)性方程組Newton迭代法的右端式:-F(x)void Set_non_B(double* B,double* x,double a,double b)/a非線(xiàn)性方程的參數(shù),對(duì)應(yīng)題中的x/b非線(xiàn)性方程的參數(shù),對(duì)應(yīng)題中的yB0=-(0.5*cos(x0)+x1+x

11、2+x3-a-2.67);B1=-(x0+0.5*sin(x1)+x2+x3-b-1.07);B2=-(0.5*x0+x1+cos(x2)+x3-a-3.74);B3=-(x0+0.5*x1+x2+sin(x3)-b-0.79);/矩陣相乘ABC,其中A為ms階,B為sn階。void Array_Mult_Array(double* A,double* B,int m,int s,int n,double* C)int i,j,k;for(i=0;im;i+)for(j=0;jn;j+)Ci*n+j=0;for(k=0;ks;k+)Ci*n+j+=Ai*s+k*Bk*n+j;/將mn階矩陣A的

12、轉(zhuǎn)置為ATvoid Transpose(double *A,int m,int n,double* AT)int i,j;for(i=0;im;i+)for(j=0;jn;j+)ATj*m+i=Ai*n+j;/對(duì)n階矩陣A進(jìn)行選主元的Doolittle分解void Doolittle(double *A,int n,int *M)/將分解得到的L、U仍然存儲(chǔ)在原來(lái)的矩陣A中int i,j,k,t;double *s;double Maxs,temp;s=(double*) calloc(n,sizeof(double);for(k=0;kn;k+) for(i=k;in;i+)si=Ai*n+

13、k;for(t=0;tk;t+)si-= Ai*n+t * At*n+k;Maxs=abs(sk); Mk=k;for(i=k+1;in;i+)if(Maxsabs(si) Maxs=abs(si);Mk=i;if(Mk!=k)for(t=0;tn;t+)temp=Ak*n+t;Ak*n+t=AMk*n+t;AMk*n+t=temp;temp=sk;sk=sMk;sMk=temp;if(Maxs(1e-14) sk=1e-14;printf(%.16e方陣奇異n,Maxs);Ak*n+k=sk;for(j=k+1;(jn)&(kn-1);j+)for(t=0;tk;t+)Ak*n+j-=Ak*

14、n+t*At*n+j;Aj*n+k=sj/Ak*n+k;/解方程LUxbvoid Solve_LU(double* A,int n,double* b,double* x)int i,t;for(i=0;in;i+)xi=bi;for(t=0;t-1;i-)for(t=i+1;tn;t+)xi-=Ai*n+t*xt;xi/=Ai*n+i;/解線(xiàn)性方程組AxBvoid Solve_lin(double* A,int n,double* B,double* x,int m)/B為nm矩陣int* M,i,j;M=(int*) calloc(n,sizeof(int);double *BT,*xT,

15、temp;BT=(double*) calloc(n*m,sizeof(double);xT=(double*) calloc(n*m,sizeof(double);Transpose(B,n,m,BT); Doolittle(A,n,M);/將A三角分解for(i=0;im;i+)for(j=0;jn-1;j+)temp=BTi*n+j;BTi*n+j=BTi*n+Mj;BTi*n+Mj=temp;/將B轉(zhuǎn)置,使得同一方程組對(duì)應(yīng)的系數(shù)連續(xù)存儲(chǔ)Solve_LU(A,n,BT+i*n,xT+i*n);Transpose(xT,m,n,x);/求n維向量V的無(wú)窮范數(shù)double Vector_Fa

16、nShu(double *V,int n)int i;double max=0;for(i=0;in;i+)if(maxabs(Vi)max=abs(Vi);return max;/求解非線(xiàn)性方程組void Solve_non_Equation(double a,double b,double* x)double A44,F4,detx4;double det=1e-12;/求解精度要求int i,k=0;int M=5000;/最大迭代次數(shù)/設(shè)定迭代初始值x0=0.5;x1=1;x2=1;x3=1;doSet_non_B(F,x,a,b);Set_non_JacobiA(*A,x);Solv

17、e_lin(*A,4,F,detx,1);if(Vector_FanShu(detx,4)/Vector_FanShu(x,4)det)return;for(i=0;i4;i+)xi+=detxi;k+;while(kM);printf(Newton法在該初值不收斂n);/查找n維向量V中與常數(shù)a最接近的元素的下標(biāo)int Near_Index(double* v,double a,int n)int i,Index;double min;min=abs(v0-a);Index=0;for(i=1;iabs(vi-a)min=abs(vi-a);Index=i;return Index;/求數(shù)表

18、z(t,u)在點(diǎn)(x,y)處的分片二次代數(shù)差值double ChaZhi(double a,double b)double z66=-0.5,-0.34,0.14,0.94,2.06,3.5,-0.42,-0.5,-0.26,0.3,1.18,2.38,-0.18,-0.5,-0.5,-0.18,0.46,1.42,0.22,-0.34,-0.58,-0.5,-0.1,0.62,0.78,-0.02,-0.5,-0.66,-0.5,-0.02,1.5,0.46,-0.26,-0.66,-0.74,-0.5;double x6=0,0.2,0.4,0.6,0.8,1;double y6=0,0.

19、4,0.8,1.2,1.6,2;double L3,L_3,Z;int i,j,k,r,t;i=Near_Index(x,a,6);j=Near_Index(y,b,6);/插值區(qū)域邊界處插值節(jié)點(diǎn)的選取if(i=0)i=1;if(i=5)i=4;if(j=0)j=1;if(j=5)j=4;for(k=i-1;k=i+1;k+)Lk-i+1=1;for(t=i-1;t=i+1;t+)if(t!=k)Lk-i+1*=(a-xt)/(xk-xt);for(r=j-1;r=j+1;r+)L_r-j+1=1;for(t=j-1;t=j+1;t+)if(t!=r)L_r-j+1*=(b-yt)/(yr-y

20、t);Z=0;for(k=i-1;k=i+1;k+)for(r=j-1;r=j+1;r+)Z+=(Lk-i+1*L_r-j+1*zkr);return Z;/對(duì)mn數(shù)表U(x,y)進(jìn)行二元多項(xiàng)式擬合void NiHe(double*U,double*x,double*y,int m,int n,int p,int q,double*C)/U為擬合數(shù)據(jù)點(diǎn)處的函數(shù)值int i,j;double *B,*BT,*BTB,*G,*GT,*GTG,*BTUG,*temp,*tempT,*CT;B=(double*) calloc(m*p,sizeof(double);BT=(double*) callo

21、c(p*m,sizeof(double);BTB=(double*) calloc(p*p,sizeof(double);G=(double*) calloc(n*q,sizeof(double);GT=(double*) calloc(q*n,sizeof(double);GTG=(double*) calloc(q*q,sizeof(double);BTUG=(double*) calloc(p*q,sizeof(double);temp=(double*) calloc(p*n,sizeof(double);for(i=0;im;i+)for(j=0;jp;j+)Bi*p+j=pow(xi,j);for(i=0;in;i+)for(j=0;jq;j

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論