最新数值分析实验答案.docx
《最新数值分析实验答案.docx》由会员分享,可在线阅读,更多相关《最新数值分析实验答案.docx(13页珍藏版)》请在冰豆网上搜索。
![最新数值分析实验答案.docx](https://file1.bdocx.com/fileroot1/2023-1/23/c1b3a6fb-0647-4363-81f0-5e09d2e19f1c/c1b3a6fb-0647-4363-81f0-5e09d2e19f1c1.gif)
最新数值分析实验答案
实验0截断误差与舍入误差
#include"stdio.h"
#include"math.h"
constdoubleln2=0.693147190546;
constdoublee1=5e-6;
voidmain()
{
intsign;
doubles;
longi;
s=0.0;
sign=1;
i=1;
while(fabs(ln2-s)>=e1)
{s+=(1.0/i)*sign;
sign=-sign;
i++;
}
printf("n=%ld\n",i-1);
getch();
}_
实验1拉格朗日插值法
编写拉格朗日插值法通用子程序,并用以下函数表来上机求
。
x
0.0
0.1
0.195
0.3
0.401
0.5
f(x)
0.39894
0.39695
0.39142
0.38138
0.36812
0.35206
#include
main()
{
staticfloatLx[10],Ly[10];
intn,i,j;
floatx,y,p;
printf("entern=");
scanf("%d",&n);
printf("enterxi\n");
for(i=0;iscanf("%f",&Lx[i]);
printf("enteryi\n");
for(i=0;iscanf("%f",&Ly[i]);
printf("enterx=");
scanf("%f",&x);
/*
n=6;
Lx[0]=0;
Lx[1]=0.1;
Lx[2]=0.195;
Lx[3]=0.3;
Lx[4]=0.401;
Lx[5]=0.5;
Ly[0]=0.39894;
Ly[1]=0.39695;
Ly[2]=0.39142;
Ly[3]=0.38138;
Ly[4]=0.36812;
Ly[5]=0.35206;
x=0.15;
*/
for(i=0;i{p=1;
for(j=0;j{if(i!
=j)
p=p*(x-Lx[j])/(Lx[i]-Lx[j]);
}
y+=p*Ly[i];
}
printf("y=%f\n",y);
getch();
}
_实验2最小二乘法
测得铜导线在温度
(℃)时的电阻
如下表,求电阻R与温度T的近似函数关系。
i
0
1
2
3
4
5
6
(℃)
19.1
25.0
30.1
36.0
40.0
45.1
50.0
76.30
77.80
79.25
80.80
82.35
83.90
85.10
#include
#include
floatgs(floata[20][20],floatb[20],intn)
{inti,j,k,l;
floats;
k=1;
while(k!
=n+1)
{
if(a[k][k]!
=0)
{
for(i=k+1;i<=n+1;i++)
{
a[i][k]=a[i][k]/a[k][k];
b[i]=b[i]-a[i][k]*b[k];
for(j=k+1;j<=n+1;j++)
a[i][j]=a[i][j]-a[i][k]*a[k][j];
}
}
k=k+1;
}
for(k=n+1;k>=1;k--)
{
s=0;
for(l=k+1;l<=n+1;l++)
s=s+a[k][l]*b[l];
b[k]=(b[k]-s)/a[k][k];
}
return0;
}
main()
{
staticfloatb[20],Lx[20],Ly[20],c[20][20],ct[20][20],a[20][20];
intm,n,i,j,k=0,l;
floats,rtn;
printf("enterm=");
scanf("%d",&m);
printf("entern=");
scanf("%d",&n);
printf("enterxi\n");
for(i=1;i<=m;i++)
scanf("%f",&Lx[i]);
printf("enteryi\n");
for(i=1;i<=m;i++)
scanf("%f",&Ly[i]);
for(i=1;i<=m;i++)
{c[i][1]=1;
for(j=2;j<=n+1;j++)
c[i][j]=Lx[i]*c[i][j-1];
}
for(i=1;i<=m;i++)
for(j=1;j<=n+1;j++)
ct[j][i]=c[i][j];
for(i=1;i<=n+1;i++)
for(j=1;j<=n+1;j++)
a[i][j]=0;
for(i=1;i<=n+1;i++)
b[i]=0;
for(i=1;i<=n+1;i++)
for(k=1;k<=n+1;k++)
for(j=1;j<=m;j++)
a[i][k]=a[i][k]+ct[i][j]*c[j][k];
for(i=1;i<=n+1;i++)
for(j=1;j<=m;j++)
b[i]+=ct[i][j]*Ly[j];
gs(a,b,n);
printf("\nTheresultis:
");
for(i=1;i<=n+1;i++)
{j=i-1;
printf("\na[%d]=%f",j,b[i]);
}
}
_实验3变步长复合梯形公式
求
的近似值。
(1)编写定步长复合梯形程序求解上式;
(2)编写变步长复合梯形程序求解上式,使误差不超过10-6。
#include"math.h"
doublef(doublex)
{doublef1;
f1=4/(1+x*x);
return(f1);
}
doubletrapezia2(intk,doubleh,doublea,doubletn)
{doublet2n,s=0;
inti;
t2n=tn/2;
for(i=1;i<=pow(2,k);i++)
{
s+=f(a+(2*i-1)*h);
}
t2n=t2n+s*h;
returnt2n;
}
voidmain()
{doublea,b,h,Tn,T2n,e;
intn,k;
printf("pleaseinputa,b,n,e\n");
scanf("%lf%lf%d%lf",&a,&b,&n,&e);
h=b-a;
Tn=(b-a)*(f(a)+f(b))/2;
for(k=0;k{h=h/2;
T2n=trapezia2(k,h,a,Tn);
if(fabs(T2n-Tn)break;
printf("%lf\n",Tn);
Tn=T2n;
}
printf("%lf\n",Tn);
}
_实验3定步长复合梯形公式
doublef(doublex)
{return(4/(1+x*x));
}
floattrapezia(intn,floath,floata)
{floatfk=0;
inti;
for(i=1;ifk+=f(a+i*h);
return(fk*h);
}
voidmain()
{floata,b,h,Tn;
intn;
printf("pleaseinputa,b,n");
scanf("%f%f%d",&a,&b,&n);
h=(b-a)/n;
Tn=(f(a)+f(b))*h/2;
Tn+=trapezia(n,h,a);
printf("%f",Tn);
}
_
实验5非线性方程求解
编写Newton迭代法通用子程序。
实现方程f(x)=x6-x-1=0的满足精度要求的解。
要求求解过程中用一个变量I控制三种状态,其中:
i=0表示求解满足给定精度的近似解;
i=1表示f`(x0)=0,计算中断;
i=2表示迭代n次后精度要求仍不满足。
#defineN1000
#include
main()
{
doublex,x0,p=1e-6;
doublef(doublex),g(doublex);
inti,j,k,n=0;
printf("\nenterx0:
");
scanf("%lf",&x0);
do{
x=x0-f(x0)/g(x0);
printf("\n%d%12.8lf%8.3le",n,x0,f(x0));
if(n{
n=n+1;
x0=x;
}
else
{
printf("\nFAILURE!
");
break;
}
}while(fabs(f(x0))>p);
printf("\ntheresultis:
%lf",x0);
}
/***********MAIN**/
doublef(doublex)
{
return(pow(x,6)-x-1);
}
/*******F(X)******/
doubleg(doublex)
{
return(6*pow(x,5)-1);
}
/*******G(X)*****/_
实验6高斯消元法
编写选列主元的高斯消去法。
求出下列线性方程组Ax=b的解x。
#include
#defineN10
main()
{
inti,ik,k=0,j,l,n,max;
staticfloata[N][N],b[N],t,s,min=1e-6;
printf("\nentern:
");
scanf("%d",&n);
printf("\nenterA=(aij)(linefirst):
");
for(i=0;ifor(j=0;jscanf("%f",&a[i][j]);
printf("\nenterb:
");
for(i=0;iscanf("%f",&b[i]);
for(k=0;k{max=0;
for(i=k;i{if(max-fabs(a[i][k])<0)
{max=fabs(a[i][k]);
ik=i;
}
}
if(maxbreak;
if(ik!
=k)
{
for(j=k;j{
t=a[ik][j];
a[ik][j]=a[k][j];
a[k][j]=t;
}
t=b[ik];
b[ik]=b[k];
b[k]=t;
}
for(i=k+1;i{a[i][k]=a[i][k]/a[k][k];
for(j=k+1;ja[i][j]=a[i][j]-a[i][k]*a[k][j];
b[i]=b[i]-a[i][k]*b[k];
a[i][k]=0;
}
}
b[n-1]=b[n-1]/a[n-1][n-1];
for(i=n-2;i>=0;i--)
{for(j=i+1;jb[i]=b[i]-a[i][j]*b[j];
b[i]=b[i]/a[i][i];
}
printf("\nTheresultis:
");
for(i=0;i{
j=n-i;
printf("\nx[%d]=%f",j,b[i]);
}
}
实验7改进欧拉法
#include"math.h"
#include"stdio.h"
在我们学校大约有4000多名学生,其中女生约占90%以上。
按每十人一件饰品计算,大概需要360多件。
这对于开设饰品市场是很有利的。
女生成为消费人群的主体。
floatf(floatx,floaty)
{
return(2.0/x*y+x*x*exp(x));
}
2.www。
cer。
net/artide/2003082213089728。
shtml。
floatg(floatx)
体现市民生活质量状况的指标---恩格尔系数,上海也从1995年的53.4%下降到了2003年的37.2%,虽然与恩格尔系数多在20%以下的发达国家相比仍有差距,但按照联合国粮农组织的划分,表明上海消费已开始进入富裕状态(联合国粮农组织曾依据恩格尔系数,将恩格尔系数在40%-50%定为小康水平的消费,20%-40%定为富裕状态的消费)。
{
10、如果学校开设一家DIY手工艺制品店,你希望_____return(x*x*(exp(x)-exp
(1)));
服饰□学习用品□食品□休闲娱乐□小饰品□}
动漫书籍□化妆品□其他□voidmain()
合计50100%{floatx,y,h,a,b,a0,yp,yc;
(一)上海的经济环境对饰品消费的影响printf("pleaseinputa,b,handa0\n");
scanf("%f%f%f%f",&a,&b,&h,&a0);
x=a;
(二)上海的人口环境对饰品消费的影响y=a0;
while(x<=b+h)
{
printf("x=%f,y=%f,y(x)=%f,y(x)-y=%f\n",x,y,g(x),fabs(y-g(x)));
标题:
上海发出通知为大学生就业—鼓励自主创业,灵活就业2004年3月17日yp=y+h*f(x,y);
x+=h;
yc=y+h*f(x,yp);
y=0.5*(yp+yc);
}
}_
_
实验7龙格库塔法
#include
#definef(x,y)(x-y)
main()
{
floata,b,h,x,y,k1,k2,k3,k4,y0,x0;
intn=0,i,j,N;
clrscr();
printf("\nenterN:
");
scanf("%d",&N);
printf("\nentera,b:
");
scanf("%f%f",&a,&b);
printf("\nenterprimarydatay(0):
");
scanf("%f",&y0);
h=(b-a)/N;
x0=a;
printf("\n%10.5f%10.5f",x0,y0);
do{
x=x0+h;
k1=f(x0,y0);
k2=f((x0+h/2),(y0+h/2*k1));
k3=f((x0+h/2),(y0+h/2*k2));
k4=f((x0+h),(y0+h*k3));
y=y0+h/6*(k1+2*(k2+k3)+k4);
printf("\n%10.5f%10.5f",x,y);
n=n+1;
x0=x;
y0=y;
}while(n}_