📄 lagrange.c.c
字号:
#include <stdio.h>
#include <math.h>
double lg(double x0,double h,double f[],double t,int n)
{
int i,j,k,m;
double v,s,xi,xj;
v=0.0;
if (n<1) return(v);
if (n==1)
{
v=f[0]; return(v);
}
if (n==2)
{
v=(f[1]*(t-x0)-f[0]*(t-x0-h))/h;
return(v);
}
if (t<=x0+h) { k=0; m=2;}
else if (t>=x0+(n-3)*h) { k=n-3; m=n-1;}
else
{
i=(int)((t-x0)/h)+1;
if (fabs(t-x0-i*h)>=fabs(t-x0-(i-1)*h))
{ k=i-2; m=i;}
else {k=i-1; m=i+1;}
}
v=0.0;
for (i=k;i<=m;i++)
{
s=1.0; xi=x0+i*h;
for (j=k;j<=m;j++)
if (j!=i)
{ xj=x0+j*h; s=s*(t-xj)/(xi-xj);}
v=v+s*f[i];
}
return(v);
}
main()
{
double x0,h,x,v,f[10];
int n,i;
char c='y';
printf("请输入初始节点x0=");
scanf("%lf",&x0);
printf("请输入节点数n=");
scanf("%d",&n);
printf("请输入步长h=");
scanf("%lf",&h);
printf("请输入个节点的函数值,函数值之间以空格分开:");
for(i=0;i<n;i++)
scanf("%lf",&f[i]);
while(c=='y')
{
printf("请输入需要求函数值的节点x=");
scanf("%lf",&x);
v=lg(x0,h,f,x,n);
printf("x=%6.3f f(x)=%e\n",x,v);
printf("continue?y/n?");
getchar();
scanf("%c",&c);
printf("\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -