- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数值分析源代码
一,三次样条插值
#includeiostream.h
#includestdlib.h
void ready(double*A,double*B,double*h,double*y,int m,int n,double m0=0,double mn=0)
{A=new double[n];B=new double[n];
if(m==2){
A[0]=0;B[0]=2*m0;
A[n]=1;B[n]=2*mn;
}
else {A[0]=1;B[0]=3*(y[1]-y[0])/h[0];
A[n]=0;B[n]=3*(y[n]-y[n-1])/h[n-1];
}
for(int i=1;in;i++)
{A[i]=h[i-1]/(h[i-1]+h[i]);
B[i]=3*((1-A[i])*(y[i]-y[i-1])/h[i-1]+A[i]*(y[i+1]-y[i])/h[i]);
}
}
void calculate1(double*a,double*b,double*A,double*B,int n)
{a=new double[n];b=new double[n];
a[0]=-A[0]/2;b[0]=B[0]/2;
for(int i=1;i=n;i++)
{a[i]=-A[i]/(2+(1-A[i])*a[i-1]);
b[i]=(B[i]-(1-A[i])*b[i-1])/(2+(1-A[i])*a[i-1]);
}
}
void calculate2(double*m,double*a,double*b,int n)
{m=new double[n+1];
m[n+1]=0;
for(int i=n;i=0;i--)m[i]=m[i+1]*a[i]+b[i];
}
void main()
{int e,t,w,v;
out:
cout求三次样条插值函数:endl请输入函数表中x,y的对数:endl;
cine;
double*x,*y,*h,*A,*B,*a,*b,*m,s0,sn,u,s;
cout请输入x的一系列值:endl;
x=new double[e];
for(int i=0;ie;i++)cinx[i];
cout请输入y的一系列值:endl;
y=new double[e];
for(int f=0;fe;f++)ciny[f];
h=new double[e];
for(int d=0;de;d++)h[d]=x[d+1]-x[d];
loop:
cout边界条件选择: 1.提供了s\(x1)=0,s\(x2)=0; 2.提供了s(x0)=m0,s(xn)=mn (m0,mn!=0)
endl;
cint;
if(t!=1t!=2){cout输入信息错误!请重新输入!endl;goto loop;}
if(t==1)ready(A,B,h,y,t,e);
else {cout请输入s(x0),s(xn)的值:endl;
cins0sn;
ready(A,B,h,y,t,e,s0,sn);}
calculate1(a,b,A,B,e);
calculate2(m,a,b,e);
in:
cout请输入所需要计算的x的值: (x[0]xx[e-1])endl;
cinu;
if(ux[0]||ux[e-1]){cout输入数据错误!endl;goto in;}
for(int c=0;ce;c++)
{if(ux[c]ux[c+1])w=c;}
s=(1+2*(u-x[w])/(x[w+1]-x[w]))*((u-x[w+1])*(u-x[w+1])/((x[w]-x[w+1])*(x[w]-x[w+1])))*y[w]+
(1+2*(u-x[w+1])/(x[w]-x[w+1]))*((u-x[w])*(u-x[w])/((x[w+1]-x[w])*(x[w+1]-x[w])))*y[w+1]+
(u-x[w])*((u-x[w+1])*(u-x[w+1])/((x[w]-x[w+1])*(x[w]-x[w+1])))*m[w]+
(u-x[w+1])*((u-x[w])*(u-x[w])/((x[w+1]-x[w])*(x[w+1]-x[w])))*m[w+1];
coutf(u)的近似值为: endlsendl;
In:
cout请选择:1,继续进行新的操作计算 2,退出不计算 endl;
cinv;
if(v!=1v!=2){cout输入错误!请重新输入!endl;goto In;}
if(v==1){system(cls);goto out;}
文档评论(0)