数值分析论文.docx

上传人:b****6 文档编号:6551746 上传时间:2023-01-07 格式:DOCX 页数:16 大小:30.37KB
下载 相关 举报
数值分析论文.docx_第1页
第1页 / 共16页
数值分析论文.docx_第2页
第2页 / 共16页
数值分析论文.docx_第3页
第3页 / 共16页
数值分析论文.docx_第4页
第4页 / 共16页
数值分析论文.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数值分析论文.docx

《数值分析论文.docx》由会员分享,可在线阅读,更多相关《数值分析论文.docx(16页珍藏版)》请在冰豆网上搜索。

数值分析论文.docx

数值分析论文

实验一Language算法的实现及应用

#include

#include

voidmain()

{

inti,j,n;

doublex[100],y[100],l[100];

doublea,b=0;

printf("请输入节点数n:

\n");

scanf("%d",&n);

printf("请输入函数点a:

\n");

scanf("%lf",&a);

for(i=0;i

{

printf("请输入插值序列点x[%d],y[%d]:

\n",i,i);

scanf("%lf,%lf",&x[i],&y[i]);

}

for(i=0;i

{

l[i]=1.0;

for(j=0;j

{

if(j!

=i)

l[i]=l[i]*(a-x[j])/(x[i]-x[j]);

}

b=b+l[i]*y[i];

}

printf("%lf",b);

}

实验二Newton算法的实现及应用

#include

#defineMAX_N20

typedefstructtagPOINT

{

doublex;

doubley;

}POINT;

intmain()

{

intn;

inti,j;

POINTpoints[MAX_N+1];doublediff[MAX_N+1];

doublex,tmp,newton=0;

printf("\nInputnvalue:

");

scanf("%d",&n);

if(n>MAX_N)

{

printf("TheInputnislargerthenMAX_N,pleaseredefinetheMAX_N.\n");

return1;

}

if(n<=0)

{

printf("Pleaseinputanumber1and%d.\n",MAX_N);

return1;

}

printf("Nowinputthe(x_i,y_i),i=0,...,%d:

\n",n);

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

scanf("%If%If",&points[i].x,&points[i].y);

printf("Nowinputthexvalue:

");

scanf("%If",&x);

for(i=0;i<=n;i++)diff[i]=points[i].y;

for(i=0;i

{

for(j=n;j>i;j--)

{

diff[j]=(diff[j]-diff[j-1])\(points[j].x-points[j-1-i].x);

}

}

tmp=1;newton=diff[0];

for(i=0;i

{

tmp=tmp*(x-points[i].x);

newton=newton+tmp*diff[i+1];

}

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

return0;

}

实验三Romberg积分算法的实现及应用

#include

#include

#definef(x)(sin(x))

#defineN_H20

#defineMAXREPT10

#definea1.0

#defineb2.0

#defineepsilon0.00001

doublecomputeT(doubleaa,doublebb,longintn)

{

inti;

doublesum,h=(bb-aa)/n;

for(i=1;i

sum+=f(aa+i*h);

sum+=(f(aa)+f(bb))/2;

return(h*sum);

}

voidmain()

{

inti;

longintn=N_H,m=0;

doubleT[MAXREPT+1][2];

T[0][1]=computeT(a,b,n);

n*=2;

for(m=1;m

{

for(i=0;i

{

T[i][0]=T[i][1];

}

T[0][1]=computeT(a,b,n);

n*=2;

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

T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);

if((T[m-1][1]T[m][1]-epsilon))

{

printf("TheIntegrateis%lf\n",T[m][1]);

return;

}

}

printf("Returnnosolved…\n");

}

实验四指数拟合的实现

#include

#include

#include

#defineMAX_N100

typedefstructtagPOINT

{

doublex;

doubley;

doublez;

}POINT;

#definef(x)(pow(x,3))

/*doublef(doublex)

{

returnpow(x,5)+x;

}*/

main()

{

inti,n;

POINTpoints[MAX_N];

doublea,b;

doublea1=0,b1=0,c1=0;

doubled1=0,d2=0;

doubleA,B;

cout<<"Inputnvalue:

"<

cin>>n;

cout<<"Nowinputthe(x[i],y[i]),i=0..n:

"<

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

{

cout<<"x["<

cin>>points[i].x;

cout<<"y["<

cin>>points[i].y;

cout<

}

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

{

points[i].z=log(points[i].y);

}

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

{

a1=a1+1;

b1=b1+points[i].x;

c1=c1+pow(points[i].x,2);

d1=d1+points[i].z;

d2=d2+points[i].x*points[i].z;

}

A=(b1*d2-c1*d1)/(b1*b1-a1*c1);

B=(b1*d1-a1*d2)/(b1*b1-a1*c1);

a=exp(A);

b=B;

cout<<"指数拟合函数P(x)="<

return0;

}

实验五Newton迭代法求根的算法实现

#include"stdio.h"

#include"math.h"

#definef(x)x*x*x-7.7*x*x+19.2*x-15.3

#defineg(x)3*x*x-15.4*x+19.2

voidmain()

{

inti,MAXSIZE;

doubleepsilon,x_k0,x_k1;

doublef0,f1;

printf("请输入控制精度:

");

scanf("%lf",&epsilon);

printf("\n请输入初始值:

");

scanf("%lf",&x_k0);

printf("\n请输入请输入最大迭代次数:

");

scanf("%d",&MAXSIZE);

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

{

f0=f(x_k0);

f1=g(x_k0);

x_k1=x_k0-f0/f1;

printf("x_k1=%lf\n",x_k1);

if(fabs(x_k0-x_k1)

{

printf("输出满足给定精度的近似解x_k1=%lf\n",x_k1);

printf("算法结束!

!

!

\n");

return;

}

x_k0=x_k1;

}

printf("在初始值x_k0附近f(x)无根!

!

!

\n");

}

实验六Runge-Kutta方法的实现

#include

#include

#definef(x,y)(x/y)

voidmain()

{

inti,m;

doublexn,yn=1.0,yn1=0;

doublea,b,h;

doublek1,k2,k3,k4;

printf("请输入x的始末值:

\n");

scanf("%lf%lf",&a,&b);

printf("请输入m的值:

\n");

scanf("%d",&m);

h=(b-a)/m;

xn=a;

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

{

k1=f(xn,yn);

k2=f((xn+h/2),(yn+h*k1/2));

k3=f((xn+h/2),(yn+h*k2/2));

k4=f((xn+h),(yn+h*k3));

yn1=yn+h/6*(k1+2*k2+2*k3+k4);

xn=xn+h;

printf("x%d=%lf,y%d=%lf\n",i,xn,i,yn1);

yn=yn1;

}

}

实验七用Gauss消元法解线性方程组

#include

voidmain()

{

inti,j,k;

doubles,t,x[4];

doublea[4][4]={7.2,2.3,-4.4,0.5,1.3,6.3,-3.5,2.8,5.6,0.9,8.1,-1.3,1.5,0.4,3.7,5.9},b[4]={15.1,1.8,16.6,36.9};

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

{

for(i=k+1;i<4;i++)

{

t=a[i][k]/a[k][k];

for(j=k+1;j<4;j++)

{

a[i][j]=a[i][j]-t*a[k][j];

}

b[i]=b[i]-t*b[k];

}

}

for(i=3;i>=0;i--)

{

s=b[i];

x[3]=b[3]/a[3][3];

for(j=i+1;j<4;j++)

{

s=s-a[i][j]*x[j];

x[i]=s/a[i][i];

}

}

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

cout<<"x["<

}

#include

/*voidmain()

{

inti,j,k;

doubles,t,x[4];

doublea[4][4]={7.2,2.3,-4.4,0.5,1.3,6.3,-3.5,2.8,5.6,0.9,8.1,-1.3,1.5,0.4,3.7,5.9},b[4]={15.1,1.8,16.6,36.9};

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

{

for(i=k+1;i<4;i++)

{

t=a[i][k]/a[k][k];

for(j=k+1;j<4;j++)

{

a[i][j]=a[i][j]-t*a[k][j];

}

b[i]=b[i]-t*b[k];

}

}

for(i=3;i>=0;i--)

{

s=b[i];

x[3]=b[3]/a[3][3];

for(j=i+1;j<4;j++)

{

s=s-a[i][j]*x[j];

x[i]=s/a[i][i];

}

}

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

cout<<"x["<

}*/

voidmain()

{

inti,j,k,r;

doublea[3][3]={2,1,2,-2,2,-1,2,4,6},b[3]={18,-39,24},c=0,d=0,e=0,f=0;

doubley[3],l[3][3],u[3][3],x[3];

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

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

{

if(i

l[i][j]=0;

if(i==j)

l[i][j]=1;

if(i>j)

u[i][j]=0;

}

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

{

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

{

for(r=1;r

c+=l[k][r]*u[r][j];

u[k][j]=a[k][j]-c;

}

for(i=k+1;i<3;i++)

{

for(r=1;r

d+=l[i][r]*u[r][k];

l[i][k]=(a[i][k]-d)/u[k][k];

}

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

cout<

}

/*for(i=0;i<3;i++)

{

for(j=0;j

e+=l[i][j]*y[j];

y[i]=b[i]-e;

}

for(i=2;i>=0;i--)

{

for(j=i+1;i<3;j++)

f+=u[i][j]*x[j];

x[i]=(y[i]-f)/u[i][i];

}*/

}

实验八用Jacobi迭代法解线性方程组

#include"stdafx.h"

#include"math.h"

#defineMAX128

intmain(intargc,char*argv[])

{

doublea[MAX][MAX];

doubleb[MAX];

intn,i,j;

doublex[MAX],m_x[MAX];

doubleh;

doubletemp=100.0;

printf("输入阶数:

");

scanf("%d",&n);

printf("\n输入精确到:

");

scanf("%lf",&h);

printf("\n输入系数:

\n");

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

{

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

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

}

printf("\n输入常数列:

\n");

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

{

scanf("%lf",&b[i]);

}

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

{

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

a[i][j]=-a[i][j]/a[i][i];

b[i]=b[i]/a[i][i];

a[i][i]=0;

}

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

{

x[i]=0;

m_x[i]=1;

}

while(temp>h)

{

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

{

x[i]=m_x[i];

m_x[i]=0;

}

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

{

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

{

m_x[i]=m_x[i]+a[i][j]*x[i]+b[i];

}

}

temp=abs(m_x[1]-x[1]);

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

{

if(abs(m_x[i]-x[i])>temp)

temp=abs(m_x[i]-x[i]);

}

}

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

{

printf("\nx%d=%lf",i,m_x[i]);

}

return0;

}

实验九综合设计

实验一

实验名称:

男大学生的身高问题

实验目的:

有关统计资料表明,我国大学生男性群体的平均身高约为170cm,且该群体中约有99.7﹪的人身高在150cm至190cm之间。

如果将[150cm,190cm]等分成20个高度区间,试问该群体身高在每一高度区间的分布情况怎样?

特别地,身高中等(165cm至175cm之间)的人占该群体的百分比会超过60﹪吗?

实验步骤:

把大学生平均身高分布曲线作为正态分布进行计算,取步长为1,根据期望和方差的公式求解,最后确定身高中等的人会不会超过60%。

程序代码:

#include"stdio.h"

#include"math.h"

#include"string.h"

#definePI3.14159265

voidmain()

{

inti;

intu=170;//期望

doublea;//方差

a=20/3.0;

doublep[60]={0};

doubleb,c;

doubled=0;

b=1/sqrt(2*PI);

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

{

c=pow(i-19,2);

p[i]=b/a*exp((-c)/(2*a*a));

printf("%d到%d的概率是%f\t",i+150,i+151,p[i]);

if(i%2)

printf("\n");

}

for(i=15;i<25;i++)

{

d+=p[i];

}

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

if(d>=0.6)

printf("身高中等的人超过60%\n");

else

printf("身高中等的人小于60%\n");

运行结果:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1