1 / 14
文档名称:

东南大学数值分析资料报告上机实验题(下).doc

格式:doc   大小:328KB   页数:14页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

东南大学数值分析资料报告上机实验题(下).doc

上传人:cxmckate6 2020/11/25 文件大小:328 KB

下载得到文件列表

东南大学数值分析资料报告上机实验题(下).doc

文档介绍

文档介绍:数值分析上机报告

学号:
2013年12月22日
第四章
38.(上机题)3次样条插值函数
(1)编制求第一型3次样条插值函数的通用程序;
(2) 已知汽车曲线型值点的数据如下:
0
1
2
3
4
5
6
7
8
9
10











端点条件为=,=。用所编制程序求车门的3次样条插值函数S(x),并打印出S(i+)(i=0,1,…9)。
解:
(1)
#include <>
#include <>
float x1[100],f1[100],f2[99],f3[98],m[100],a[100][101],x,d[100];
float c[99],e[99],h[99],u[99],w[99],y_0,y_n,arr,s;
int i,j,k,n,q;
void selectprint(float y)
{
if ((y>0)&&(y!=1)) cout<<"+"<<y;
else if (y==1) cout<<"+";
else if (y<0) cout<<y;

}
void printY(float y){
if (y!=0) cout<<y;

}
float calculation(float x){
for (j=1;j<=n;j++)
if (x<=x1[j])
{
s=(float)(f1[j-1]+c[j-1]*(x-x1[j-1])+m[j-1]/*(x-x1[j-1])*(x-x1[j-1])+e[j-1]*(x-x1[j-1])*(x-x1[j-1])*(x-x1[j-1]));
break;
}
return s;
}
void main()
{
do{
cout<<"请输入n值:";
cin>>n;
if ((n>100)||(n<1)) cout<<"请重新输入整数(1..100):"<<endl;
}
while ((n>100)||(n<1));
cout<<"请输入Xi(i=0,1,...,"<<n<<"):";
for (i=0;i<=n;i++) cin>>x1[i];
cout<<endl;
cout<<"请输入Yi(i=0,1,...,"<<n<<"n):";
for (i=0;i<=n;i++) cin>>f1[i];
cout<<endl;
cout<<"请输入第一型边界条件Y'0,Y'n:";
cin>>y_0>>y_n;
cout<<endl;
for (i=0;i<n;i++) h[i]=x1[i+1]-x1[i];
for (i=1;i<n;i++) u[i]=(float) (h[i-1]/(h[i-1]+h[i]));
for (i=1;i<n;i++) w[i]=(float) (-u[i]);
for (i=0;i<n;i++) f2[i]=(f1[i+1]-f1[i])/h[i]; //一阶差商
for (i=0;i<n-1;i++) f3[i]=(f2[i+1]-f2[i])/(x1[i+2]-x1[i]); //二阶差商
for (i=1;i<n;i++) d[i]=6*f3[i-1]; //求出所有的d[i]
d[0]=6*(f2[0]-y_0)/h[0];
d[n]=6*(y_n-f2[n-1])/h[n-1];
for (i=0;i<=n;i++)
for (j=0;j<=n;j++)
if (i==j) a[i][j]=2;
else a[i][j]=0;
a[0][1]=1;
a[n][n-1]=1;
for (i=1;i<n;i++)
{
a[i][i-1]=u[i];
a[i][