三次样条插值Word文档下载推荐.docx
《三次样条插值Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《三次样条插值Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
*QiuJun2007-06-07
*RevisionHistory:
*QiuJun2007-06-07InitiatedVersion
*/
*ANSICSourceCode
*FileName:
*4_38.c
*习题4第38题(上机题):
求解第一型三次样条插值函数
*
*IncludeFiles
#include<
stdio.h>
math.h>
*ConstantsandDefineDeclarations
#definemax_dimension20//允许的三对角矩阵最大维数
*GlobalObjectDefinition
intn;
//插值节点个数
floatdfx0;
//前端点一阶导数值
floatdfxn;
//后端点一阶导数值
staticfloatx[max_dimension];
//插值节点
staticfloatfx[max_dimension];
//插值节点函数值
staticfloatdq1[max_dimension];
//插值节点一阶差商值
staticfloatdq2[max_dimension];
//插值节点二阶差商值
staticfloath[max_dimension];
//插值节点间距
staticfloatu[max_dimension];
//三对角矩阵下副对角线元素
staticfloatb[max_dimension];
//三对角矩阵主对角线元素
staticfloatv[max_dimension];
//三对角矩阵上副对角线元素
staticfloatd[max_dimension];
//三对角矩阵常数项元素
staticfloatM[max_dimension];
//三对角矩阵未知项元素(插值节点二阶导数值)
*FunctionDefinition
*FunctionName:
*data_input
*Description:
*数据输入
*Input:
*Output:
*FunctionReference:
*QiuJun2007-06-07Created
voiddata_input(file_input,file_output)
FILE*file_input;
FILE*file_output;
{
inti;
/*由终端输入数据*/
/*printf("
PleaseInput:
"
);
printf("
*******************************************************\n"
DataAmount:
"
scanf("
%d"
&
n);
Datax:
for(i=0;
i<
n+1;
i++)
scanf("
%f"
x[i]);
Datafx:
fx[i]);
BoundaryCondition:
%f%f"
dfx0,&
dfxn);
*******************************************************\n\n"
/*由文件输入数据*/
fscanf(file_input,"
fscanf(file_input,"
dfx0);
/*输出数据至终端*/
Datainputis:
\n\n"
************************************************************************\n"
x"
printf("
%.3f"
x[i]);
\n"
fx"
fx[i]);
\n************************************************************************\n\n"
/*输出数据至文件*/
fprintf(file_output,"
********************************************************************************************************\n"
fprintf(file_output,"
\n********************************************************************************************************\n\n"
}
*parameter_calculation
*参数计算
voidparameter_calculation(void)
b[i]=2;
if(i!
=n)
{
h[i]=x[i+1]-x[i];
dq1[i]=(fx[i+1]-fx[i])/(x[i+1]-x[i]);
}
=0&
&
i!
dq2[i-1]=(dq1[i]-dq1[i-1])/(x[i+1]-x[i-1]);
u[i]=h[i-1]/(h[i-1]+h[i]);
v[i]=1-u[i];
d[i]=6*dq2[i-1];
v[0]=1;
u[n]=1;
d[0]=6*(dq1[0]-dfx0)/(x[1]-x[0]);
d[n]=6*(dfxn-dq1[n-1])/(x[n]-x[n-1]);
*****************************************************************