《数值分析》实验指导书附代码Word格式文档下载.docx
- 文档编号:18736803
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:34
- 大小:55.62KB
《数值分析》实验指导书附代码Word格式文档下载.docx
《《数值分析》实验指导书附代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《数值分析》实验指导书附代码Word格式文档下载.docx(34页珍藏版)》请在冰豆网上搜索。
for(intj=0;
j<
j++)
{
if(j!
=i)
{
temp=temp*(xxx-x[j])/(x[i]-x[j]);
}
}
result=result+temp*y[i];
}
returnresult;
}
voidmain()
printf("
Sin(%f)=%f\n"
xx,Lagrange(xx));
实验二Newton均差插值算法的实现
熟悉Newton均差插值算法,并能用计算机语言实现。
用C/C++语言实现Newton均差插值算法
1.认真熟悉教材关于Newton均差插值的理论分析;
2.以书中P.32例4为实例进行数据测试。
#defineN10
doublef[N][N];
doublex[]={0.4,0.55,0.65,0.80,0.90,1.05};
doubley[]={0.41075,0.57815,0.69675,0.88811,1.02652,1.25382};
doublefx(inti,intj);
doubleS(intstart,intend,doublexx);
main()
intloopi,loopj,n;
doubleresult,xx;
scanf("
%d"
&
n);
%lf"
xx);
for(loopi=0;
loopi<
=n;
loopi++)
f[loopi][0]=y[loopi];
//零阶均差作为均差表二维数组的第0列
for(loopi=1;
for(loopj=1;
loopj<
=loopi;
loopj++)
f[loopi][loopj]=fx(loopi,loopj);
result=S(0,n,xx);
Resultis:
%f"
result);
getch();
return1;
//求均差表
doublefx(inti,intj)
if(j==0)
returnf[i][j];
else
return(fx(i,j-1)-fx(i-1,j-1))/(x[i]-x[i-j]);
//这种表示方法需要注意两个x的下标
//用秦九韶算法计算差值多项式结果
doubleS(intstart,intend,doublexx)
if(start==end)
returnf[end][end];
return(S(start+1,end,xx)*(xx-x[start])+f[start][start]);
实验三NEWTON差分插值算法实现
熟悉NEWTON差分插值算法,并能用计算机语言实现。
差分:
(向前差分)
(向后差分)
NEWTON差分插值公式(此处为前插公式)
如果插值节点
,要计算
附近点
的函数值
,则可令
,于是相应的公式为:
4、实验内容
1.用C/C++语言实现NEWTON前插公式
1.认真熟悉教材关于NEWTON差分插值算法的理论分析;
2.以书中P.34例5为实例进行数据测试。
floatf[10][10];
floatfx(inti,intj);
floatS(intn,floatt,intend);
intn=0,loopi,loopj;
floatx,a,b,h,t;
floatresult;
clrscr();
Pleaseinputa&
b&
h(a,b,h):
"
);
%f,%f,%f"
a,&
b,&
h);
\n"
Pleaseinputcishu:
Pleaseinputjiedianzhi(>
=n+1ge):
for(loopj=0;
scanf("
%f"
f[0][loopj]);
**********************************************************"
PleaseinputtheX:
x);
\n**********************************************************"
t=(x-a)/h;
=n-1;
a=%f\n"
a);
b=%f\n"
b);
h=%f\n"
h);
t=%f\n"
t);
x=%f\n"
x);
for(loopi=0;
=n-loopj;
printf("
%f"
f[loopi][loopj]);
printf("
result=S(0,t,n);
\n**********************************************************\n"
floatfx(inti,intj)
if(i==0)
return(fx(i-1,j+1)-fx(i-1,j));
floatS(intn,floatt,intend)
if(n==end)
returnf[n][0];
returnS(n+1,t,end)*(t-n)/(n+1)+f[n][0];
实验四最小二乘法的法方程算法实现
熟悉最小二乘法的原理和基本思想,理解法方程的构造过程,并能用计算机语言实现。
用C/C++语言依据最小二乘法构造其中的法方程。
(以后学习方程组的数值解法后增加解法方程的模块)
1.认真熟悉教材关于最小二乘法的理论分析;
理解法方程的构造过程;
2.以书中P.75例9为实例构造法方程,并输出方程组(不用求解)
#include<
iostream.h>
#defineN4
#defineM1
doublea[N][N],d[N];
doublex[]={19.0,25.0,31.0,38.0,44.0},y[]={19.0,32.3,49.0,73.3,97.8},w[]={1.0,1.0,1.0,1.0,1.0};
iomanip.h>
//setw()用于设置输出数据宽度。
doubleFI(intc,intt)
switch(c)
{//分情况确定FI(k)的表达式
case0:
return1;
case1:
returnx[t]*x[t];
//....
voidcal()
for(intk=0;
k<
=M;
k++)
//算K行系数
a[k][j]=0;
for(intt=0;
t<
=N;
t++)
a[k][j]=a[k][j]+w[t]*FI(k,t)*FI(j,t);
d[k]=0;
//算第K个常数
for(j=0;
d[k]=d[k]+w[j]*FI(k,j)*y[j];
cout<
<
TheMatrixis:
;
cal();
//输出方程组
cout<
setw(12)<
a[i][j]<
X["
]"
if(j<
M)cout<
+"
elsecout<
="
cout<
d[i];
实验五Romberg求积算法的实现
熟悉Romberg求积算法,并能用计算机语言实现。
数值求积的基本思想是通过积分中值定理将积分转化为函数的四则运算。
利用梯形公式、Simpson公式、Cotes公式、Romberg公式间的关系,可构造出由梯形公式计算Romberg公式的方法。
对于积分
,将积分区间[a,b]划分为n等分,分点
,则相应的复化梯形公式为:
,
Simpson公式与复化梯形公式关系:
Cotes公式与Simpson公式关系:
Romberg公式与Cotes公式关系:
用C/C++语言实现Romberg求积算法
1.认真熟悉教材关于求积算法的理论分析;
2.以书中P.108例3为实例进行数据测试。
math.h"
floatT(intn,floata,floatb);
floatS(intn,floata,floatb);
floatC(intn,floata,floatb);
floatR(intn,floata,floatb);
floatf[100];
intn;
floata,b,result;
Pleaseinputn,a,b:
%d,%f,%f"
n,&
b);
result=R(n,a,b);
//求最后的Romberg公式计算结果
floatT(intn,floata,floatb)
floath,s=0;
floatx;
h=(b-a)/n;
for(inti=0;
x=a+i*h;
if(x==0)
f[i]=1;
else
f[i]=sin(x)/x;
//此处是计算函数f(x)在xi这点的函数值
}
if(i==0||i==n)
s=s+f[i];
s=s+2*f[i];
//除了首尾节点,其他节点计算2次
return(h/2*s);
floatS(intn,floata,floatb)
floattemp=0;
temp=4.0/3*T(2*n,a,b)-1.0/3*T(n,a,b);
returntemp;
floatC(intn,floata,floatb)
temp=16.0/15*S(2*n,a,b)-1.0/15*S(n,a,b);
floatR(intn,floata,floatb)
temp=64.0/63*C(2*n,a,b)-1.0/63*C(n,a,b);
实验六高斯列主元素消去法算法实现
熟悉消去法解方程组的原理和基本思想,并能用计算机语言实现。
高斯消去法解线性方程组是最常用的解线性方程组的方法。
而高斯列主元素消去法只是为了避免选用绝对值小的元素作为主元的一种改进方法。
对于线性方程组
来说,可以通过将系数矩阵化为上三角形矩阵,从而采用回代过程求解出线性方程组的解来。
用C/C++语言实现高斯列主元素消去法算法
1.认真熟悉教材关于高斯消去法的理论分析;
并理解其算法过程描述。
2.以书中P.148例4为实例进行数据测试。
//fabs()
stdlib.h"
//exit()
//scanf(),printf()
//clrscr()
floata[10][10];
floatb[10];
floatdet;
floatexchange(inti,intj,intn);
voidmyexit(inti);
intn,loopi,loopj,k,maxi;
floatmax,sum;
Pleaseinputjieshun:
\nPleaseinputa[i][j]:
for(loopj=1;
scanf("
a[loopi][loopj]);
\nPleaseinputb[i]:
b[loopi]);
yourformuleris:
if(loopj==n)
printf("
%6.3fx%d=%6.3f\n"
a[loopi][loopj],loopj,b[loopi]);
else
%6.3fx%d+"
a[loopi][loopj],loopj);
/***************************************************
now,let'
sbegintocalculatetheresult!
***************************************************/
det=1.0;
for(k=1;
maxi=k;
max=a[k][k];
for(loopi=k+1;
if(fabs(a[loopi][k])>
fabs(max))
max=a[loopi][k];
maxi=loopi;
if(max==0)
det=0;
myexit(k);
if(maxi!
=k)
exchange(maxi,k,n);
a[loopi][k]=a[loopi][k]/a[k][k];
for(loopj=k+1;
a[loopi][loopj]=a[loopi][loopj]-a[loopi][k]*a[k][loopj];
b[loopi]=b[loopi]-a[loopi][k]*b[k];
det=a[k][k]*det;
if(a[n][n]==0)
det=0;
myexit(n);
b[n]=b[n]/a[n][n];
for(loopi=n-1;
loopi>
=1;
loopi--)
sum=0;
for(loopj=loopi+1;
sum=sum+a[loopi][loopj]*b[loopj];
b[loopi]=(b[loopi]-sum)/a[loopi][loopi];
det=a[n][n]*det;
\n"
x%d=%10.5f"
loopj,b[loopj]);
det(A)=%10.5f"
det);
floatexchange(inti,intj,intn)
intloopk;
floattemp;
for(loopk=1;
loopk<
loopk++)
temp=a[i][loopk];
a[i][loopk]=a[j][loopk];
a[j][loopk]=temp;
temp=b[i];
b[i]=b[j];
b[j]=temp;
det=-det;
return0;
voidmyexit(inti)
\nTheDET(A)=0,somea[%d][%d]is0!
i,i);
exit(0);
实验七追赶法算法实现
熟悉追赶法解对角占优的三对角线方程组的原理和基本思想,并能用计算机语言实现。
用C/C++语言实现追赶法算法
1.认真熟悉教材关于追赶法的理论分析;
2.以书中P.177第9题为实例进行数据测试。
floata[N],b[N],c[N],f[N],Beta[N],x[N],y[N];
intn,i,j;
//输入数据
\nPleaseinputa[i]:
for(i=2;
a[i]);
for(i=1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值分析 数值 分析 实验 指导书 代码