【求指教】拉格朗日插值
下面是我用C语言编的拉格朗日插值程序,请问各位同仁,红色部分标记的这种间断循环有没有简单一点的处理方式,另外,刚编程序不久,麻烦评价一下,程序有哪些地方可以改进的。感谢哦!#include<stdio.h>
#include <stdlib.h>
#include<math.h>
void main()
{
int i,k,n;
float a,*x,*y,*l1,*l2,*l,p=0;
printf("******* 拉格朗日插值程序 *******\n\n\n");
printf("请输入已知点的个数:");
scanf("%d",&n);
x=(float *)malloc(sizeof(float)*n);y=(float *)malloc(sizeof(float)*n);l1=(float *)malloc(sizeof(float)*n);l2=(float *)malloc(sizeof(float)*n);l=(float *)malloc(sizeof(float)*n);
printf("\n请输入已知点的坐标值,横纵坐标用英文状态下的【逗号】隔开,点与点之间用【空格】隔开:\n");
for(i=0;i<n;i++)
scanf("%f,%f",&x[i],&y[i]);
printf("\n请输入待计算点的横坐标x=");
scanf("%f",&a);
for(k=0;k<n;k++)
{
l1[k]=l2[k]=1;
for(i=0;i<k;i++)
{
l1[k]=l1[k]*(a-x[i]);
l2[k]=l2[k]*(x[k]-x[i]);
}
for(i=k+1;i<n;i++)
{
l1[k]=l1[k]*(a-x[i]);
l2[k]=l2[k]*(x[k]-x[i]);
}
l[k]=l1[k]/l2[k];
}
for(i=0;i<n;i++)
p=p+l[i]*y[i];
n=n-1;
printf("\np%d(%f)=%f即插值点坐标为(%f,%f)\n\n\n",n,a,p,a,p);
free(x);free(y);free(l1);free(l2);free(l);
system("pause");
}
[ 本帖最后由 我是来注册的 于 2012-3-30 10:47 编辑 ]