计算方法程序.docx
- 文档编号:6135893
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:14
- 大小:17.21KB
计算方法程序.docx
《计算方法程序.docx》由会员分享,可在线阅读,更多相关《计算方法程序.docx(14页珍藏版)》请在冰豆网上搜索。
计算方法程序
1.秦九韶算法:
编程求多项式P(x)=(((0.0625x+0.0425)x+1.912)x+2.1296在x=1.0处的值。
#include"stdio.h"
main()
{staticfloata[]={2.1296,1.912,0.0425,0.0625};
floaty;
inti;
floatx=1.0;
clrscr();
y=a[3];
for(i=2;i>=0;i--)
y=y*x+a[i];
printf("x=%4.2f,y=%6.4f",x,y);
}
2.二分法:
方程f(x)=x3-x-1=0,利用逐步搜索法确定一个有根区间。
#include"stdio.h"
#include"math.h"
#definef(x)(x*(x*x-1)-1)
#definee0.005
main()
{
inti=0;
floatx,a=1,b=1.5,y=f(a);
if(y*f(b)>=0)
{
printf("\nTherangeiserror!
");
return;
}
else
do
{x=(a+b)/2;
printf("\nx%d=%6.4f",i,x);
i++;
if(f(x)==0)break;
if(y*f(x)<0)
b=x;
else
a=x;
}while(fabs(b-a)>e);
printf("\nx=%4.2f",x);
}
3.迭代法:
求方程f(x)=x-10x+2=0的一个根
#include"stdio.h"
#include"math.h"
main()
{
floatx0,x1=1;
inti=1;
do
{x0=x1;
x1=log10(x0+2);
printf("\nx%d=%6.4f",i,x1);
i++;
}while(fabs(x1-x0)>=0.00005);
printf("\nx=%6.4f",x1);
printf("\nf(x)=%6.4f",fabs(x1-pow(10,x1)+2));
}
4.牛顿迭代法:
(1)求方程x=e-x在0.5附近的根。
#include"stdio.h"
#include"math.h"
main()
{
floatx0,x1=0.5;
inti=0;
printf("\nx%d=%7.5f",i,x1);
i++;
do
{
x0=x1;
x1=x0-(x0-exp(-x0))/(1+x0);
printf("\nx%d=%7.5f",i,x1);
i++;
}while(fabs(x1-x0)>=0.001);
printf("\nx=%5.3f",x1);
}
(2)求方程f(x)=x3-2x2-4x-7=0在[3,4]中的根的近似值,精度要求为ε=10-2。
#include"stdio.h"
#include"math.h"
main()
{
floatx0,x1=4;
inti=0;
printf("\nx%d=%5.3f",i,x1);
i++;
do
{
x0=x1;
x1=x0-((((x0-2)*x0-4)*x0)-7)/((3*x0-4)*x0-4);
printf("\nx%d=%5.3f",i,x1);
i++;
}while(fabs(x1-x0)>=0.01);
printf("\nx=%4.2f",x1);
}
1.列主元消去法:
求解线性方程组:
0.01x1+2x2-0.5x3=-5
-x1-0.5x2+2x3=5
5x1-4x2+0.5x3=9
#include"stdio.h"
#include"math.h"
#definen3
main()
{
inti,j,k;
intmi;
floatmv,tmp;
floata[n][n]={{0.01,2,-0.5},{-1,-0.5,2},{5,-4,0.5}};
floatb[n]={-5,5,9},x[n];
for(k=0;k {mi=k; mv=fabs(a[k][k]); for(i=k+1;i if(fabs(a[i][k])>mv) {mi=i; mv=fabs(a[i][k]); } if(mi>k) {tmp=b[k]; b[k]=b[mi]; b[mi]=tmp; for(j=k;j {tmp=a[k][j]; a[k][j]=a[mi][j]; a[mi][j]=tmp; } } for(i=k+1;i {tmp=a[i][k]/a[k][k]; b[i]=b[i]-b[k]*tmp; for(j=k+1;j a[i][j]=a[i][j]-a[k][j]*tmp; } } x[n-1]=b[n-1]/a[n-1][n-1]; for(i=n-2;i>=0;i--) {x[i]=b[i]; for(j=i+1;j x[i]=x[i]-a[i][j]*x[j]; x[i]=x[i]/a[i][i]; } printf("\nTheresultis: "); for(i=0;i printf("\nx%d=%4.2f",i,x[i]); } 2.矩阵三角分解法: 求解线性方程组 x1+2x2-x3=3 x1-x2+5x3=0 4x1+x2+2x3=2 #include"stdio.h" #include"math.h" #definen3 main() { inti,j,k,r; floats; staticfloata[n][n]={{1,2,-1},{1,-1,5},{4,1,2}}; staticfloatb[n]={3,0,2},x[n],y[n]; staticfloatl[n][n],u[n][n]; for(i=0;i l[i][i]=1; for(k=0;k {for(j=k;j {s=0; for(r=0;r s=s+l[k][r]*u[r][j]; u[k][j]=a[k][j]-s; } for(i=k+1;i {s=0; for(r=0;r s=s+l[i][r]*u[r][k]; l[i][k]=(a[i][k]-s)/u[k][k]; } } for(i=0;i {s=0; for(j=0;j s=s+l[i][j]*y[j]; y[i]=b[i]-s; } for(i=n-1;i>=0;i--) {s=0; for(j=n-1;j>=i+1;j--) s=s+u[i][j]*x[j]; x[i]=(y[i]-s)/u[i][i]; } printf("Theresultis: "); for(i=0;i { printf("\nx[%d]=%5.3f",i,x[i]); } } (3)雅可比迭代法求解方程组: 10x1-2x2-x3=3 -2x1+10x2-x3=15 -x1-2x2+5x3=10 #include"stdio.h" #include"math.h" #defineMAX100 #definen3 #defineexp0.005 main() { inti,j,k,m; floattemp,s; floata[n][n]={{10,-2,-1},{-2,10,-1},{-1,-2,5}}; floatstaticb[n]={3,15,10}; floatstaticx[n],B[n][n],g[n],y[n]={0,0,0}; for(i=0;i for(j=0;j {B[i][j]=-a[i][j]/a[i][i]; g[i]=b[i]/a[i][i]; } for(i=0;i B[i][i]=0; m=0; do {for(i=0;i x[i]=y[i]; for(i=0;i {y[i]=g[i]; for(j=0;j y[i]=y[i]+B[i][j]*x[j]; } m++; printf("\n%dthresultis: ",m); printf("\nx0=%7.5f,x1=%7.5f,x2=%7.5f",y[0],y[1],y[2]); temp=0; for(i=0;i {s=fabs(y[i]-x[i]); if(temp } printf("\ntemp=%f",temp); }while(temp>=exp); printf("\n\nThelastresultis: "); for(i=0;i printf("\nx[%d]=%7.5f",i,y[i]); } (3)高斯赛德尔迭代法: #include"stdio.h" #include"math.h" #defineMAX100 #definen3 #defineexp0.005 main() { inti,j,k,m; floattemp,s; floata[n][n]={{10,-2,-1},{-2,10,-1},{-1,-2,5}}; floatstaticb[n]={3,15,10}; floatstaticx[n]={0,0,0},B[n][n],g[n]; for(i=0;i for(j=0;j {B[i][j]=-a[i][j]/a[i][i]; g[i]=b[i]/a[i][i]; } for(i=0;i B[i][i]=0; m=0; do {temp=0; for(i=0;i {s=x[i]; x[i]=g[i]; for(j=0;j x[i]=x[i]+B[i][j]*x[j]; if(fabs(x[i]-s)>temp) temp=fabs(x[i]-s); } m++; printf("\n%dthresultis: ",m); printf("\nx0=%7.5f,x1=%7.5f,x2=%7.5f",x[0],x[1],x[2]); printf("\ntemp=%f",temp); }while(temp>=exp); printf("\n\nThelastresultis: "); for(i=0;i printf("\nx[%d]=%7.5f",i,x[i]); } 1.拉格朗日插值法: 已知数据表: x1.12751.15031.17351.1972 f(x)0.11910.139540.159320.17903 用插值公式计算f(1.1300)的值。 #include"stdio.h" main() {floatstaticx[4]={1.1275,1.1503,1.1735,1.972}; floatstaticy[4]={0.1191,0.13954,0.15932,0.17903}; inti,j; floatc,f,t; c=1.13; /*printf("\nPleaseinputc="); scanf("%f",&c);*/ f=0; for(i=0;i<=3;i++) {t=1; for(j=0;j<=3;j++) {if(j! =i) t=t*(c-x[j])/(x[i]-x[j]); } f=f+t*y[i]; } printf("\nf(%6.4f)=%6.4f",c,f); } 2.牛顿插值法: 已知函数y=f(x)的观测数据如下表所示,试用全部基点构造牛顿均差插值多项式,并用二次插值求f(3)的近似值。 x02456 f(x)159-413 #include"stdio.h" main() {floatstaticx[5]={0,2,4,5,6}; floatstaticy[5]={1,5,9,-4,13}; inti,k; floatc,p; for(k=1;k<=4;k++) {printf("\n%dthis: ",k); for(i=4;i>=k;i--) {y[i]=(y[i]-y[i-1])/(x[i]-x[i-k]); printf("\n%8.6f",y[i]); } } c=3; /*c=0.70; c=0.85;*/printf("\np[%4.2f]=%8.6f",c,y[0]+y[1]*(c-x[0])+y[2]*(c-x[0])*(c-x[1])+y[3]*(c-x[0])*(c-x[1])*(c-x[2])+y[4]*(c-x[0])*(c-x[1])*(c-x[2])*(c-x[3])); p=y[4]; for(i=3;i>=0;i--) p=p*(c-x[i])+y[i]; printf("\n秦九韶方法: p[%4.2f]=%8.6f",c,p); } 3.龙贝格求积法: 计算积分: #include"stdio.h" #include"math.h" floatf(floatx) {return(4/(1+x*x));} main() {floata=0,b=1,h,t1,t2,s1,s2=0,c1,c2=0,r1,r2=0,exp=0.00001; floats,x; intk=0; h=b-a; t2=0.5*h*(f(a)+f(b)); do {r1=r2; do {c1=c2; do {s1=s2; t1=t2; k++; h=0.5*h; s=0; x=a+h; while(x {s=s+f(x); x=x+2*h; } t2=0.5*t1+h*s; s2=t2+(t2-t1)/3; }while(k==1); c2=s2+(s2-s1)/15; }while(k==2); r2=c2+(c2-c1)/63; }while(fabs(r2-r1)>=exp); printf("\nTheresultis: %7.5f",r2); } 4.欧拉法: 取步长h=0.2,求初值问题的数值解。 #include"stdio.h" #include"math.h" floatf(floatx,floaty) {return(x+y);} main() {floatx1,x2=0,y1,y2=1,h=0.2; inti; for(i=1;i<=2;i++) {x1=x2; y1=y2; x2=x1+h; y2=y1+h*f(x1,y1); y2=y1+0.5*h*(f(x1,y1)+f(x2,y2)); printf("\ny%d=%5.3f",i,y2); } } 5.四阶龙格-库塔法: 取步长h=0.2,用四阶龙格-库塔公式求初值问题的数值解。 #include"stdio.h" #include"math.h" floatf(floatx,floaty) {return(y-2*x/y);} main() {floatx1,y1,x2=0,y2=1,h=0.2; floatk1,k2,k3,k4; inti; for(i=1;i<=5;i++) {x1=x2; y1=y2; k1=f(x1,y1); k2=f(x1+0.5*h,y1+0.5*h*k1); k3=f(x1+0.5*h,y1+0.5*h*k2); k4=f(x1+h,y1+h*k3); y2=y1+h*(k1+2*k2+2*k3+k4)/6; x2=x1+h; printf("\ny[%3.1f]=%7.5f",x2,y2); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算方法 程序