Отправляет email-рассылки с помощью сервиса Sendsay

[prg] интерполяция кубическими спланнами, помогите найти ошибку

Всем здравствовать. Как-то даже неудобно со своими студенческими
заморочками, но все же.
Помогите, пожалуйста найти ошибку в следующем коде:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define pi 3.141592653589793
#define n 3
float x[] ={0.0,2.55,pi};// узлы интерполяции
float *y =NULL;//значения в узлах
float *h =NULL;//шаг сетки
float *g=NULL;//недостающие коэффициенты
float v(float x)//интерполируемая функция
{
float arg =(pi*x)/6;
return cos(arg);
}
void val()
{
int i;
y =(float*)malloc(n*sizeof(float));
for(i =0; i < n; i++)
{
y[i] =v(x[i]);
}
}
void step()
{
int i;
h =(float*)malloc((n -1)*sizeof(float));
for(i =0;i<n-1; i++)
{
h[i] =x[i+1] -x[i];
}
}
void sweep(float k,float l)
{
int i;
g=(float*)malloc(n*sizeof(float));
float a[n-2],b[n-2],c[n-2],d[n-2],xi[n-2],eta[n-2];
a[0]=0.0;
c[n-3]=0.0;
g[0]=k;
g[n-1]=l;
xi[0]=0.0;
eta[0]=0.0;
for(i=0;i<=n-3;i++)
{
a[i]=h[i]/6;
b[i]=(h[i]+h[i+1])/6;
d[i]=(y[i+2]-y[i+1])/h[i+1]-(y[i+1]-y[i])/h[i];
}
for(i=0;i<=n-4;i++)
{
c[i]=h[i]/3;
}
for(i=0;i<=n-3;i++)
{
xi[i+1]=c[i]/(a[i]*xi[i]+b[i]);
eta[i+1]=(d[i]-a[i]*eta[i])/(a[i]*xi[i]+b[i]);
}
for(i=n-2;i<=1;i--)
{
g[i]=xi[i-1]*g[i+1]+eta[i-1];
}
}
float builtspline(float z)
{
int i;
float f;
for (i=0;i<=n-1;i++)
{
f=y[i]*((x[i+1]-z)/h[i])+y[i+1]*((z-x[i])/h[i])+g[i]*(((x[i+1]-z)*(x[i+1]-z)*(x[i+1]-z)-h[i]*h[i]*(x[i+1]-z))/(6*h[i]))+g[i+1]*(((z-x[i])*(z-x[i])*(z-x[i])-h[i]*h[i]*(z-x[i]))/(6*h[i]));
}
return f;
}
int main()
{
float k,l,z,function_res,spline_res;
k=0.12;
l=3.13;
z=1.85;
FILE *in =fopen("res.txt","w");
val();
step();
sweep(k,l);
spline_res=builtspline(z);
function_res=v(z);
fprintf(in,"function res =%f,spline res =%f\n",function_res,spline_res);

fclose(in);
free(y);
free(h);
free(g);
return 0;
}
заранее спасибо за ответ.

Ответить   Thu, 24 Apr 2014 18:07:44 +0700 (#3013430)