版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)值分析實(shí)驗(yàn)程序...[推薦]
1)Guass列主元消元法解線性方程組:
//高斯列主元消去法求解非線性方程組源程序清單
#defineNUMBER20
#include"math.h"
floatA[NUMBER][NUMBER+1],ark;
intflag,n;
exchange(intr,intk)
{inti;
for(i=1;i<=n+1;i++)
A[0][i]=A[r][i];
for(i=1;i<=n+1;i++)
A[r][i]=A[k][i];
for(i=1;i<=n+1;i++)
A[k][i]=A[0][i];
}
floatmax(intk)
{inti;
floattemp=0;
for(i=k;i<=n;i++)
if(fabs(A[i][k])>temp)
{temp=fabs(A[i][k]);
flag=i;}
returntemp;
}
main()
{floatx[NUMBER],b[NUMBER];
intr,k,i,j;
me:printf("\n\n\n用Gauss列主元消元法解線性方程組");
printf("\ninputn=");
scanf("%d",&n);
printf("\n\n現(xiàn)在輸入系數(shù)矩陣A和向量b:\n\n");
for(i=1;i<=n;i++)
for(j=1;j<=n+1;j++)
{if(j==n+1)printf("請(qǐng)輸入b%d:",i);
elseprintf("請(qǐng)輸入a%d%d:",i,j);
scanf("%f",&A[i][j]);
}
k=1;
label:
/****************************************************/
ark=max(k);
/*if(fabs(A[1][k])>=fabs(A[2][k]))
{ark=fabs(A[1][k]);flag=1;}
else{ark=fabs(A[2][k]);flag=2;}
if(fabs(A[3][k])>ark)
{ark=fabs(A[3][k]);flag=3;}*/
/**************************************************/
if(ark==0)
{printf("\n不是合法的方程組!");exit(0);}
elseif(flag!=k)
exchange(flag,k);
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n+1;j++)
A[i][j]=A[i][j]-A[i][k]*A[k][j]/A[k][k];
if(k<n-1)
{k++;gotolabel;}
else
{x[n]=A[n][n+1]/A[n][n];
for(k=n-1;k>=1;k--)
{floatme=0;
for(j=k+1;j<=n;j++)
{me=me+A[k][j]*x[j];}
x[k]=(A[k][n+1]-me)/A[k][k];
}
}
for(i=1;i<=n;i++)
printf("\nx%d=%f",i,x[i]);
gotome;
}
///////////////////////////////////////////////////////////////////////
2)//插值源程序
#definef(x)1/(1+25*x*x)
#definef1(x)-50*x/((1+25*x*x)*(1+25*x*x))
#include"math.h"
floatxi[11],M[11];
intN=10;
floath=0.2;
floatL(inti,floatx)
{floatll=1.0;intj;
for(j=0;j<=N;j++)
{if(i==j)continue;
elsell=ll*(x-xi[j]);
}
for(j=0;j<=N;j++)
{if(i==j)continue;
elsell=ll/(xi[i]-xi[j]);
}
returnll;
}
floatS(intN,floatx)
{floatss=0;intj;
for(j=0;j<=N;++j)
ss=ss+f(xi[j])*L(j,x);
returnss;
}
floatS1(floatx0,floatx1,floatx)
{floatss;
ss=(x-x1)/(x0-x1)*f(x0)+(x-x0)/(x1-x0)*f(x1);
returnss;
}
floatchashan(floatx0,floatx1,floatx2)
{return((f(x2)-f(x0))/(x2-x0)-(f(x1)-f(x0))/(x1-x0))/(x2-x1);
}
floatS3(floatxj,floatxjp1,floatMj,floatMjp1,floatx)
{floatss1,ss2,ss3,ss4,ss;
ss1=(xjp1-x)*(xjp1-x)*(xjp1-x)/(6*h)*Mj;
ss2=(x-xj)*(x-xj)*(x-xj)/(6*h)*Mjp1;
ss3=(x-xj)/h*(f(xjp1)-h*h/6*Mjp1);
ss4=(xjp1-x)/h*(f(xj)-h*h/6*Mj);
ss=ss1+ss2+ss3+ss4;
returnss;
}
main()
{inti,j;intcontrol;floathelp1,help2,helpe,helpb;
floatd[11];intcchar=0;
floatx0,xo1[10],xo2[10];
x0=0;
for(i=0;i<=N;i++)
xi[i]=-1.0+i*2.0/N;
for(j=0;j<=9;++j)
{xo1[j]=0.06+0.1*j;
xo2[j]=-0.06-0.1*j;
}
label:
printf("\n\nRunge現(xiàn)象的克服");
printf("\n\n1.多項(xiàng)式插值");
printf("2.分段線性插值");
printf("3.三次樣條函數(shù)插值");
printf("4.退出");
printf("\n請(qǐng)選擇:");
scanf("%d",&control);
switch(control)
{case1:
//下面是多項(xiàng)式插值
for(i=0;i<=9;i++){
printf("\nf(%5.2f)=%9.6f",xo1[i],f(xo1[i]));
printf("SN(%5.2f)=%9.6f",xo1[i],S(N,xo1[i]));
printf("\nf(%5.2f)=%9.6f",xo2[i],f(xo2[i]));
printf("SN(%5.2f)=%9.6f",xo2[i],S(N,xo2[i]));
help1=f(xo1[i]);help2=S(N,xo1[i]);
helpe=help1-help2;
printf("f-SN=e=%9.6f",helpe);
helpb=helpe/help1*100.0;
printf("相對(duì)誤差=%9.6f%%",helpb);
}
break;
case2:
//下面是分段線性插值
for(j=0;j<=9;j++)
for(i=0;i<=N;i++)
{if(xo1[j]>xi[i]&&xo1[j]<xi[i+1])
{help1=f(xo1[j]);
help2=S1(xi[i],xi[i+1],xo1[j]);
helpe=help1-help2;
helpb=helpe/help1*100.0;
printf("\nf(%5.2f)=%9.6f",xo1[j],help1);
printf("S1(%5.2f)=%9.6f",xo1[j],help2);
printf("f-S1=e=%9.6f",helpe);
printf("相對(duì)誤差=%9.6f%%",helpb);
}
if(xo2[j]>xi[i]&&xo2[j]<xi[i+1])
{help1=f(xo2[j]);
help2=S1(xi[i],xi[i+1],xo2[j]);
printf("\nf(%5.2f)=%9.6f",xo2[j],help1);
printf("S1(%5.2f)=%9.6f",xo2[j],help2);
}
}
break;
case3:
//以下是三次樣條函數(shù)插值
d[0]=6/h*((f(xi[1])-f(xi[0]))/h-f1(xi[0]));
printf("\nd0=%f",d[0]);
for(j=1;j<=N-1;j++)
{d[j]=6*chashan(xi[j-1],xi[j],xi[j+1]);
printf("\nd%d=%f",j,d[j]);
}
d[N]=6/h*(f1(xi[N])-(f(xi[N])-f(xi[N-1]))/h);
printf("\nd10=%f",d[N]);
printf("\n\n請(qǐng)用Gauss列主元法解十一階三對(duì)角方程求出M0至M10
!");
printf("\n然后把M0至M10輸入!準(zhǔn)備好后按1:");
scanf("%d",&cchar);
if(cchar==1)
{for(j=0;j<=10;j++)
{printf("\n請(qǐng)輸入M%d:",j);
scanf("%f",&M[j]);
}}
for(j=0;j<=9;j++)
for(i=0;i<=N;i++)
{if(xo1[j]>xi[i]&&xo1[j]<xi[i+1])
{help1=f(xo1[j]);
help2=S3(xi[i],xi[i+1],M[i],M[i+1],xo1[j]);
helpe=help1-help2;
helpb=helpe/help1*100.0;
printf("\nf(%5.2f)=%9.6f",xo1[j],help1);
printf("S3(%5.2f)=%9.6f",xo1[j],help2);
printf("f-S1=e=%9.6f",helpe);
printf("相對(duì)誤差=%9.6f%%",helpb);
}
if(xo2[j]>xi[i]&&xo2[j]<xi[i+1])
{help1=f(xo2[j]);
help2=S3(xi[i],xi[i+1],M[i],M[i+1],xo2[j]);
printf("\nf(%5.2f)=%9.6f",xo2[j],help1);
printf("S3(%5.2f)=%9.6f",xo2[j],help2);
}
}
break;
case4:exit(0);
break;
}
gotolabel;
}
//////////////////////////////////////////////////////////////////////////////
/
3)//二分法求解非線性方程
#include"math.h"
#definef(x)x*x*x-x-1
main()
{floata,b,c,e;
intk=0;
charaa;
printf("\n\n\n二分法求非線性方程的解");
printf("\n\n為使程序簡(jiǎn)單,f(x)在源程序中定義!");
printf("\n已知f(x)在[a,b]上連續(xù)");
printf("\n請(qǐng)輸入a:");
scanf("%f",&a);
scanf("%c",&aa);
printf("請(qǐng)輸入b:");
scanf("%f",&b);
scanf("%c",&aa);
printf("請(qǐng)輸入允許誤差e:");
scanf("%f",&e);
scanf("%c",&aa);
label:
c=(a+b)/2;
printf("\n\na%d=%f",k,a);
printf("\nb%d=%f",k,b);
printf("\nx%d=%f",k,c);
k++;
if((f(a))*(f(c))>0)a=c;
elseb=c;
if(b-a<=e)
{printf("\n最終結(jié)果是:");
printf("\nx%d=%f",k,(a+b)/2);
exit(0);
}
elsegotolabel;}
//////////////////////////////////////////////////////////////////////////////
/
4)//牛頓迭代法求非線性方程的解源程序清單
#include"math.h"
#definef(x)x*x*x-x-1
#definef1(x)3*x*x-1
main()
{floata,x0,x1,e1,e2;
intN,k;charaa;char*str1,*str2;
printf("\n\n\n用牛頓迭代法求非線性方程的解");
printf("\n\n\n為使程序簡(jiǎn)單,函數(shù)f(x)及f'(x)在源程序中定義!");
printf("\n\n請(qǐng)輸入初值x0:");
scanf("%f",&x0);
/*scanf("%c",&aa);*/
printf("輸入誤差e1:");
scanf("%f",&e1);
scanf("%c",&aa);
printf("輸入誤差e2:");
scanf("%f",&e2);
scanf("%c",&aa);
printf("輸入最大迭代次數(shù)N:");
scanf("%d",&N);
scanf("%c",&aa);
k=1;
label:
if(f(x0)==0){printf("\n%f為所求得根之一!",x0);
exit(0);}
elseif(fabs(f(x0))<e1){printf("\n奇異標(biāo)志!建議重取初值或取更小的e1,e2!")
;
exit(0);}
elsex1=x0-(f(x0))/(f1(x0));
printf("\n第%d次迭代:",k);
printf("\nx%d=%f",k,x1);
if(fabs(x1-x0)<e2){printf("\n%f為所求近似解!",x1);
exit(0);}
elseif(k==N){printf("\n迭代失敗!建議取更大的N值或另選初值!");exit
(0);}
else{x0=x1;
k++;
}
gotolabel;
}//////////////////////////////////////////////////////////////////////////////
/
5)//Romberg積分法
#include"math.h"
floatT[20][20];
floatf(floatx)
{floatss;
if(x==0)x=1e-5;//防止除數(shù)為零而溢出!
ss=sin(x*x);//為被積函數(shù)
returnss;
}
main()
{floata,b,e;floatsum=0.0;floattemp,help;
inti,j,k,m,p,q;
printf("\nRomberg
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 寵物飼料配方對(duì)寵物內(nèi)分泌系統(tǒng)的調(diào)節(jié)作用考核試卷
- 漁業(yè)機(jī)械產(chǎn)業(yè)鏈的技術(shù)創(chuàng)新與標(biāo)準(zhǔn)化建設(shè)考核試卷
- 自行車服務(wù)城市安全指數(shù)研究考核試卷
- 升降機(jī)智能監(jiān)控與故障預(yù)測(cè)考核試卷
- 硝酸銅制備技術(shù)及其在電鍍行業(yè)的應(yīng)用考核試卷
- 電氣安裝工程施工考核試卷
- 植物園突發(fā)事件應(yīng)急處理考核試卷
- 網(wǎng)絡(luò)安全教育的國(guó)際化合作
- 肝臟移植模型評(píng)估新生兒肝炎治療干預(yù)
- 遠(yuǎn)程醫(yī)療的創(chuàng)新和影響
- 小學(xué)四年級(jí)開(kāi)學(xué)家長(zhǎng)會(huì)ppt
- 一字一句普通話千言萬(wàn)語(yǔ)繪中華 課件-2023-2024學(xué)年高一上學(xué)期推廣普通話主題班會(huì)
- 2023新時(shí)代解決臺(tái)灣問(wèn)題的總體方略PPT
- 旋轉(zhuǎn)機(jī)械振動(dòng)分析與工程應(yīng)用課件
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)-終結(jié)性考試試題國(guó)開(kāi)要求
- 電線電纜項(xiàng)目投資計(jì)劃書(shū)
- 《軍事理論與軍事技能》課程標(biāo)準(zhǔn)
- 大數(shù)據(jù)與會(huì)計(jì)專業(yè)人才需求與專業(yè)調(diào)研報(bào)告
- 《文案策劃與寫(xiě)作》課程教學(xué)大綱
- 江蘇響水化工廠爆炸事故經(jīng)驗(yàn)分享
- 對(duì)公開(kāi)型劫持人質(zhì)案件處置戰(zhàn)術(shù)
評(píng)論
0/150
提交評(píng)論