Задача по С++
Ткните носом как это решать пожалуйста:
9. Разработать алгоритм интерполяции значений функции методом сплайнов. В качестве тестового примера использовать функцию Рунге.
Алгоритм интерполяции значений функции методом сплайна нашел, как сделать ее работу через функцию Рунге?
Код:
cout.setf(ios::left);
int i, n;
double max,max2,dK,oc,x1,A,B,h,x[N],a[N],b[N],c[N],d[N],y[N],mu[N],m[N],S3[N];
A=0;
B=3.141592653589;
max=0;
max2=0;
cout<<"============================================================="<<endl;
cout<<"| n | max | d ocenka | dk | "<<endl;
for(n=5;n<=10240;n=2*n)
{h=(B-A)/n;
for(i=0; i<=n; i++)
x[i]=A+i*h;
a[0]=a[n]=1;
b[0]=c[n]=0;
d[0]=-sin(A);
d[n]=-sin(B);
for(i=1; i<n; i++)
{ a[i]=2*h/3;
b[i]=h/6;
c[i]=h/6;
d[i]=(sin(x[i+1])-2*sin(x[i])+sin(x[i-1]))/h;
}
y[0]=-b[0]/a[0];
mu[0]=d[0]/a[0];
for(i=1; i<=n; i++)
{ y[i]=-b[i]/(a[i]+c[i]*y[i-1]);
mu[i]=(d[i]-c[i]*mu[i-1])/(a[i]+c[i]*y[i-1]);
}
m[n]=mu[n];
for(i=n-1; i>0; i--)
m[i]=y[i]*m[i+1]+mu[i];
for(i=1; i<=n; i++)
{x1=x[i-1]+h/2;
S3[i]=((x[i]-x1)*sin(x[i-1])+(x1-x[i-1])*sin(x[i]))/h+(pow((x[i]-x1),3)-h*h*(x[i]-x1))*m[i-1]/(6*h)+(pow((x1-x[i-1]),3)-h*h*(x1-x[i-1]))*m[i]/(6*h);
}
max=fabs(S3[1]-sin(x[0]+h/2));
for(i=1; i<=n; i++)
{ x1=x[i-1]+h/2;
if(fabs(S3[i]-sin(x1))>max) max=fabs(S3[i]-sin(x1));
}
if(n>5)
{ dK=max2/max;
oc=max2/16;
}
if(n==5)cout<<"|"<<setw(8)<<n<<"|"<<setw(15)<<max<<"|"<<setw(15)<<"-"<<"|"<<setw(18)<<"-"<<"|"<<endl;
if(n>5)cout<<"|"<<setw(8)<<n<<"|"<<setw(15)<<oc<<"|"<<setw(15)<<max<<"|"<<setw(18)<<dK<<"|"<<endl;
max2=max;
}
getch();}
int i, n;
double max,max2,dK,oc,x1,A,B,h,x[N],a[N],b[N],c[N],d[N],y[N],mu[N],m[N],S3[N];
A=0;
B=3.141592653589;
max=0;
max2=0;
cout<<"============================================================="<<endl;
cout<<"| n | max | d ocenka | dk | "<<endl;
for(n=5;n<=10240;n=2*n)
{h=(B-A)/n;
for(i=0; i<=n; i++)
x[i]=A+i*h;
a[0]=a[n]=1;
b[0]=c[n]=0;
d[0]=-sin(A);
d[n]=-sin(B);
for(i=1; i<n; i++)
{ a[i]=2*h/3;
b[i]=h/6;
c[i]=h/6;
d[i]=(sin(x[i+1])-2*sin(x[i])+sin(x[i-1]))/h;
}
y[0]=-b[0]/a[0];
mu[0]=d[0]/a[0];
for(i=1; i<=n; i++)
{ y[i]=-b[i]/(a[i]+c[i]*y[i-1]);
mu[i]=(d[i]-c[i]*mu[i-1])/(a[i]+c[i]*y[i-1]);
}
m[n]=mu[n];
for(i=n-1; i>0; i--)
m[i]=y[i]*m[i+1]+mu[i];
for(i=1; i<=n; i++)
{x1=x[i-1]+h/2;
S3[i]=((x[i]-x1)*sin(x[i-1])+(x1-x[i-1])*sin(x[i]))/h+(pow((x[i]-x1),3)-h*h*(x[i]-x1))*m[i-1]/(6*h)+(pow((x1-x[i-1]),3)-h*h*(x1-x[i-1]))*m[i]/(6*h);
}
max=fabs(S3[1]-sin(x[0]+h/2));
for(i=1; i<=n; i++)
{ x1=x[i-1]+h/2;
if(fabs(S3[i]-sin(x1))>max) max=fabs(S3[i]-sin(x1));
}
if(n>5)
{ dK=max2/max;
oc=max2/16;
}
if(n==5)cout<<"|"<<setw(8)<<n<<"|"<<setw(15)<<max<<"|"<<setw(15)<<"-"<<"|"<<setw(18)<<"-"<<"|"<<endl;
if(n>5)cout<<"|"<<setw(8)<<n<<"|"<<setw(15)<<oc<<"|"<<setw(15)<<max<<"|"<<setw(18)<<dK<<"|"<<endl;
max2=max;
}
getch();}
Вот тебе описание интерполяции в том числе и по Рунге. И впредь подобный вопросы должны располагаться в разделе для студентов.