教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 初中教育 >

数值分析计算方法程序汇总

来源:网络收集 时间:2026-04-25
导读: (一)秦九韶法 例:已知p=2x2-3x-4,求x=1时,p=? 程序: #include stdio.h void main() { float a[50],b,x; int n,i,k; scanf(%d%f,n,x); for(i=0;i=n;i++) scanf(%f,a[i]); b=a[0]; k=1; while(k=n) { b=x*b+a[k]; k=k+1; } printf(%f,b); } 结果:-5.000

(一)秦九韶法

例:已知p=2x2-3x-4,求x=1时,p=?

程序:

#include "stdio.h"

void main()

{

float a[50],b,x;

int n,i,k;

scanf("%d%f",&n,&x);

for(i=0;i<=n;i++)

scanf("%f",&a[i]);

b=a[0];

k=1;

while(k<=n)

{

b=x*b+a[k];

k=k+1;

}

printf("%f",b);

}

结果:-5.000000

(二)复化中矩形公式

例:求 0··+g(ym)]h的值(已知g(y)=yn/2-1e-y/2 ,n=11,h=0.1,g(y)dy=[g(y1)+g(y2)+·

ym=20)。

程序:

#include "stdio.h"

#include <math.h>

main()

{

double y,h,s;

int n,i;

n=11;h=0.1;

s=0;y=0;

for(i=0;i<=200;i++)

{

y=y+h;

s=s+pow(y,n/2.0-1)*exp(-y/2.0);

}

s=s*h;

printf("%f\n",s);

}

结果:2266.139467

例:求 x2dx ? 11

程序:

#include "stdio.h"

void main()

{

double a,b,s,h,x;

int i,n;

a=-1.0;b=1.0;n=10;

h=(b-a)/n;x=a;s=x*x/2;

for(i=1;i<n;i++)

{

x=x+h;

s=s+x*x;

}

s=s+b*b/2;

s=s*h;

printf("s=%f\n",s);

}

结果:s=0.680000

(四)复化辛普森公式

例:求 x3dx ? 01

程序:

#include "stdio.h"

void main()

{

double a,b,c,s,h,x,y;

int i,n;

a=0.0;b=1.0;n=10;s=0.0;

h=(b-a)/n;x=a;y=x+h;c=(x+y)/2;

for(i=1;i<=n;i++)

{

s=s+x*x*x+4*c*c*c+y*y*y;

x=x+h;

y=y+h;

c=c+h;

}

s=s*h/6;

printf("s=%f\n",s);

}

结果:s=0.250000

例:求 x2dx ? 02

程序:

#include <stdio.h>

#include <math.h>

main()

{double a,b,h,s,x1,x2;

int i,n;

a=0;b=2;n=20;s=0;

h=(b-a)/n;

for(i=0;i<n;i++)

{x1=a+i*h+h/2*(1/1.732+1);

x2=a+i*h+h/2*(1-1/1.732);

s=s+x1*x1*x1+x2*x2*x2;

}

s=h/2*s;

printf("s=%f\n",s);

}

结果:s=4.000000

(六)二维中矩形公式

例:求 dx (x2 y2)dy ? 0011

程序:

#include <stdio.h>

#include <math.h>

main()

{double a,b,c,d,x[50],y[50],hx,hy,s;

int i,j,n,k;

a=0.0;b=1.0;c=0.0;d=1.0;

n=k=10;

hx=(b-a)/n;hy=(d-c)/k;

x[0]=a+hx/2;y[0]=c+hy/2;s=0.0;

for(j=0;j<k;j++)

{

for(i=0;i<n;i++)

{

s=s+x[i]*x[i]+y[j]*y[j];

x[i+1]=x[i]+hx;

}

y[j+1]=y[j]+hy;

}

s=hx*hy*s;

printf("s=%f\n",s);

}

结果:s=0.665000

(七)迭代法

例:求x=x2的解。

程序:

#include "stdio.h"

#include<math.h>

main()

{

double x,xl,y,yl;

int i,j;

x=0.5;xl=x;

y=0.5;yl=y;

for(i=0;;i++)

{x=x*x;

if(fabs(xl-x)<0.0001)

break;

else xl=x;

}

for(j=0;;j++)

{y=sqrt(y);

if(fabs(yl-y)<0.0001)

break;

else yl=y;

}

printf("x=%f,y=%f\n",x,y);

}

结果:x=0.000000,y=0.999915

(八)牛顿迭代法

y=f(x),求f(x*)=0。

y-y0=f'(x0)(x-x0)

-y0=f'(x0)(x1-x0)

x1=x0-f(x0)/f'(x0)

.......

xn+1=xn-f(xn)/f'(xn)

例:求f(x)=x-x2的零点(已知x0=0.1)。

程序:

#include "stdio.h"

#include<math.h>

main()

{

double x,xl;

int i;

x=0.1;xl=x;

for(i=0;;i++)

{x=x-(x-x*x)/(1-2*x);

if(fabs(xl-x)<0.0001)

break;

else xl=x;

}

printf("x=%f",x);

}

结果:x=-0.000000

(九)二分法

已知f(a)f(b)<0,则在[a,b]中至少有一点f(x*)=0。

令x1=(a+b)/2

如f(a)f(x1)<0,取a1=a,b1=x1;否则,取a1=x1,b1=b。

令x2=(a1+b1)/2

如f(a1)f(x2)<0,取a2=a1,b2=x2;否则,取a2=x2,b2=b1。

......

令xn+1=(an+bn)/2

如f(an)f(xn+1)<0,取an+1=an,bn+1=xn+1;否则,取an+1=xn+1,bn+1=bn。

例:求f(x)=x-x2在[0.1,2.45]内的零点。

程序:

#include "stdio.h"

#include<math.h>

main()

{

double a,al,b,bl,x,xl;

int i;

a=0.1;b=2.45;

for(i=0;;i++)

{x=(a+b)/2;

if((a-a*a)*(x-x*x)<0)

al=a,b=x;

else a=x,bl=b;

if(fabs(xl-x)<0.0001)

break;

else xl=x;

}

printf("x=%f",xl);

}

结果:x=1.000040

(十)一元回归

已知(x1,y1),(x2,y2)···(xN,yN),

y=a+bx yi=a+bxi+Ei Q(a,b)= Ei2

i 1N Ei=yi-a-bxi

总误差Q= (yi a bxi)2 令

i 1N Q Q 0, 0得 a b

aN+bX-Y=0, aX+bX2-XY=0

(其中X= xi, Y= yi, X= x, XY= xiyi)。可得: 22i

i 1i 1i 1i 1NNNN

N XX a Y X2 b XY

12 YX XXY a NX Y 1 2 2bXXXY NX XX NXY XY

例:已知(0,0),(1,2),(2,5);求a,b。

程序:

#include "stdio.h"

main()

{

float a,b,E,X,Y,Xl,Xy,Q,x[3]={0.0,1.0,2.0},y[3]={0.0,2.0,5.0};

int i,j,n=3;

X=0;Y=0;Xl=0;Xy=0;

for(i=0;i<n;i++)

{X=X+x[i];

Y=Y+y[i];

Xl=Xl+x[i]*x[i];

Xy=Xy+x[i]*y[i];

a=(Xl*Y-X*Xy)/(n*Xl-X*X);

b=(n*Xy-X*Y)/(n*Xl-X*X);

}

printf("a=%f,b=%f\n",a,b);

Q=0;E=0;

for(j=0;j<=3;j++)

{Q=Q+E*E;

E=y[j]-a-b*x[j];

}

printf("Q(总误差)=%f\n",Q);

}

结果:a=-0.166667,b=2.500000

Q(总误差)=0.166667

(十一)泰勒插值

例:计算当x=2.104时,ex=pn(x)=?

程序:

#include "stdio.h"

#include <math.h>

void main()

{double x,l,p;

int i,n;

x=2.104;n=100;

p=1;l=1;

for(i=0;i<=n;i++)

{

l=l*x/(i+1);

p=p+l;

}

printf("p=%f\n",p);

}

结果:p=8.198900

(十二)拉格朗日插值

…… 此处隐藏:2951字,全部文档内容请下载后查看。喜欢就下载吧 ……

数值分析计算方法程序汇总.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/47357.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)