- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[2018年最新整理]二次样条插值及其C语言的实现
1、实验要求:用C语言编程实现三次样条插值函数及曲线拟合的最小二乘法的求解。
2、实验目的:
(、通过编程加深对三次样条插值及曲线拟合的最小二乘法的理解;
(、学习用计算机解决工程问题,主要包括数据处理与分析。
3、 程序说明:
(、三次样条插值函数的求法:
分析:在解线性方程组确定M值时,因为矩阵是三对角阵,所以我用克拉默法则=进行求解,其中D为三对角阵的行列式,值为2^12。
程序如下:
#includestdio.h
void main()
{
double x[12],y[12],u[11],v[11],g[12]; //x[12]用于存放点的横坐标,y[12]用于存放点的纵坐标,u[11]用于存放μ1~μ10
//v[11]用于存放λ1~λ10,g[12]用于存放g0~g11
int i,j=0;
int AllD=1; //三角对阵的行列式
double Mv=1,Mu=1; //Mv表示λ1*λ2*…*λ10,Mu表示μ1*μ2*…*μ10
double M[12],X3[11],X2[11],X1[11],X0[11]; //M[12]用于存放M0~M11,X3[11]用于存放x^3的系数,X2[11]用于存放x^2的系数,
//X1[11]用于存放x的系数,X0[11]用于存放常数项的系数
printf(Please input x(i):\n);
for(i=0;i12;i++) x[i]=0;
for(i=0;i12;i++) scanf(%lf,x[i]);
printf(Please input y(i):\n);
for(i=0;i12;i++) scanf(%lf,y[i]);
for(i=1;i11;i++)
{
u[i]=(x[i]-x[i-1])/(x[i+1]-x[i-1]); //μ1~μ10的求解公式
v[i]=1-u[i]; //λ1~λ10的求解公式
g[i]=(6/(x[i+1]-x[i-1]))*((y[i+1]-y[i])/(x[i+1]-x[i])-(y[i]-y[i-1])/(x[i]-x[i-1])); //g1~g10的求解公式
}
g[0]=(6/(x[1]-x[0]))*((y[1]-y[0])/(x[1]-x[0])-0.75); //g0的求解公式
g[11]=(6/(x[11]-x[10]))*(18-(y[11]-y[10])/(x[11]-x[10])); //g11的求解公式
printf(u(1) to u(10):\n);
for(i=1;i11;i++)
{
printf( %f , u[i]);
j++;
if(j%4==0) printf(\n);
}
printf(\n);
j=0;
printf(v(1) to v(10):\n);
for(i=1;i11;i++)
{
printf( %f , v[i]);
j++;
if(j%4==0) printf(\n);
}
printf(\n);
j=0;
printf(g(0) to g(11):\n);
for(i=0;i12;i++)
{
printf( %f , g[i]);
j++;
if(j%4==0) printf(\n);
}
for(i=1;i=12;i++)
AllD=AllD*2;
for(i=1;i=10;i++)
{
Mv=Mv*v[i];
Mu=Mu*u[i];
}
//采用克拉默法则进行线性方程组的求解x[i]=D[i]/D
double D[12];
D[0]=g[0]*AllD/2+Mv*g[11];
D[11]=g[11]*AllD/2+Mu*g[0];
for(i=1;i=10;i++) D[i]=g[i]*AllD/2;
for(i=0;i=11;i++) M[i]=D[i]/AllD;
for(i=1;i=11;i++)
{
X3[i]=(M[i]-M[i-1])/(6*(x[i]-x[i-1])); //计算想x^3系数的公式
X2[i]=(x[i]*M[i-1]-x[i-1]*M[i])/(2*(x[i]-x[i-1])); //计算想x^2系数的公式
X1[i]=(-x[i]*
文档评论(0)