// 数值分析--三次样条插值公式
#include"iostream.h"
#include"fstream.h"
#define N 100
float X[N],Y[N],M[N],a,b;
double f(int i,int j)
{
double sum1=0;
if(j-i==1) return (Y[j]-Y[i])/(X[j]-X[i]);
else return (f(i+1,j)-f(i,j-1))/(X[j]-X[i]);
}
void main()
{
ifstream istrm("E:\\data.txt");//这里是文件的输入,请相应改成普通键盘输入
int n=3;
for(int i=0;i<=n;i++)
istrm>>X[i]>>Y[i];
istrm>>a>>b;
float h[N],u[N],q[N],d[N];
for(i=0;i<n;i++)
h[i]=X[i+1]-X[i];
q[0]=1;q[n]=0;
for(i=1;i<n;i++)
q[i]=h[i]/(h[i-1]+h[i]);
for(i=0;i<=n;i++)
u[i]=1-q[i];
d[0]=(6*(f(0,1)-a))/h[0];
d[n]=(6*(b-f(n-1,n)))/h[n-1];
for(i=1;i<n;i++)
d[i]=6*f(i-1,i+1);
float m[N];
for(i=0;i<=n;i++) m[i]=2;
for(i=1;i<=n;i++)
{
m[i]=m[i]-(u[i]/m[i-1])*q[i-1];
d[i]=d[i]-(u[i]/m[i-1])*d[i-1];
}
M[n]=d[n]/m[n];
cout<<M[n]<<endl;
for(i=n-1;i>=0;i--)
{
M[i]=(d[i]-q[i]*M[i+1])/m[i];
cout<<M[i]<<endl;
}
}
2008年12月14日 10:14
omCSTW <a href="http://gcklctwujdkx.com/">gcklctwujdkx</a>, [url=http://zdtksucjfwbe.com/]zdtksucjfwbe[/url], [link=http://kfuadwocnsiu.com/]kfuadwocnsiu[/link], http://xqzrqwcmtvup.com/
2011年2月18日 03:04
数值分析中正好用得着!呵呵!thanks!~