(2)题
2、用LU分解法解方程组 (1)程序设计 #include
void DirectLU(float*u,int n,float x[]) { int i,r,k; for(r=0;r<=n-1;r++) { for(i=r;r<=n;i++) for(k=0;k<=r-1;k++) *(u+r*(n+1)+i)-=*(u+r*(n+1)+k)*(*(u+k*(n+1)+i)); for(i=r+1;i<=n-1;i++)
}
{ for(k=0;k<=r-1;k++) *(u+i*(n+1)+r)-=*(u+i*(n+1)+k)*(*(u+k*(n+1)+r)); *(u+i*(n+1)+r)/=*(u+r*(n+1)+r); } }
for(i=n-1;i>=0;i--) { for(r=n-1;r>=i+1;r--) *(u+i*(n+1)+n)-=*(u+i*(n+1)+r)*x[r]; x[i]=*(u+i*(n+1)+n)/(*(u+i*(n+1)+i)); }
四、总结
掌握了用列主元消去法和LU分解法求解方程组程序编写的技巧。
4 插值法
一、实验目的
(1)熟悉拉格朗日插值法多项式和牛顿插值多项式,注意其不同点; (2)掌握三次样条插值解决一些实际问题。
二、实验内容
1、按所给数据做二次插值,并求给定点的函数值 2、按所给数据做五次插值,并求给定点的函数值 3、牛顿前插公式计算函数值
三、实验步骤、程序设计、实验结果及分析
1、二次插值 (1)程序设计 #include
float Lagrange(float x[],float y[],float xx,int n) //n为(n+1)次插值; { int i,j; float *a,yy=0; a=new float[n]; for(i=0;i<=n-1;i++) {
a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; } delete a; return yy; }
void main() { float x[5]={-3.0,-1.0,1.0,2.0,3.0}; float y[5]={1.0,1.5,2.0,2.0,1.0}; float xx1=-2,xx2=0,xx3=2.75,yy1,yy2,yy3; yy1=Lagrange(x,y,xx1,3); yy2=Lagrange(x,y,xx2,3); yy3=Lagrange(x,y,xx3,3); printf(\ printf(\ printf(\}
(2)实验结果
2、五次插值 (1)程序设计 #include
float Lagrange(float x[],float y[],float xx,int n) //n为(n+1)次插值; { int i,j; float *a,yy=0; a=new float[n]; for(i=0;i<=n-1;i++) { a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; }
delete a; return yy; }
int main() { float x[6]={0.30,0.42,0.50,0.58,0.66,0.72}; float y[6]={1.04403,1.08462,1.11803,1.15603,1.19817,1.23223}; float xx1=0.46,xx2=0.55,xx3=0.60,yy1,yy2,yy3; yy1=Lagrange(x,y,xx1,6); yy2=Lagrange(x,y,xx2,6); yy3=Lagrange(x,y,xx3,6); printf(\ printf(\ printf(\}
(2)实验结果
3、牛顿前插公式计算函数值 (1)程序设计 #include
void Difference(float y[],float f[4][4],int n) { int k,i; f[0][0]=y[0];f[1][0]=y[1];f[2][0]=y[2];f[3][0]=y[3]; for(k=1;k<=n;k++) for(i=0;i<=(N-k);i++) f[i][k]=f[i+1][k-1]-f[i][k-1]; return; }
int main() { int i,k=1; float a,b=1,m=21.4,t=1.4,f[4][4]={0};
float x[5]={20,21,22,23,24}; float y[5]={1.30103,1.32222,1.34242,1.36173,1.38021}; Difference(y,f,N); a=f[0][0]; for(i=1;i<=N;i++) { k=k*i; b=b*(t-i+1); a=a+b*f[0][i]/k; } printf(\ for (i=0;i<=4;i++) printf( \ printf(\ for (i=0;i<=4;i++) printf(\ for(k=1;k<=3;k++) { printf(\ for(i=0;i<=(3-k);i++) { printf(\ } } printf (\ printf(\ printf (\}
(2)实验结果
四、总结
学习了插值法,学会了利用插值法编程求多项式的解,可以求解很多问题,让求解多项式解变得非常简单。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库西电计算方法上机实习题(3)在线全文阅读。
相关推荐: