用c语言将x∈[0,2π]区间几等分,试用三次样条插值法方式求x=1.4时y=sinx的值并与y=sin(1.4)作比较
答案:1 悬赏:0 手机版
解决时间 2021-11-17 15:24
- 提问者网友:兔牙战士
- 2021-11-16 16:08
用c语言将x∈[0,2π]区间几等分,试用三次样条插值法方式求x=1.4时y=sinx的值并与y=sin(1.4)作比较
最佳答案
- 五星知识达人网友:酒者煙囻
- 2021-11-16 16:49
#include
#include
double fun(double x,double x0,double x1,double x2,double y0,double y1,double y2)
{
double yx=0;
yx=y0*(x-x1)*(x-x2)/((x0-x1)*(x0-x2))+
y1*(x-x0)*(x-x2)/((x1-x0)*(x1-x2))+
y2*(x-x0)*(x-x1)/((x2-x0)*(x2-x1));//3点插值公式
return yx;
}
int main(int argc, char *argv[])
{
double x,x0,x1,x2,y0,y1,y2;
printf("输入待求值x:\n");
scanf("%lf",&x);
x0=x-0.1;x1=x+0.1;x2=x+0.15;//需要输入3个插值点,即对应的x值和函数y值,这里简单计算的可以手动输入
y0=sin(x0);y1=sin(x1);y2=sin(x2);
printf("sin(%lf)=%lf-------fun(%lf)=%lf\n",x,sin(x),x,fun(x,x0,x1,x2,y0,y1,y2));
return 0;
}追问这个不是和我查到的拉格朗日的方法是一样的吗?可是我的是要三次样条的方法
#include
double fun(double x,double x0,double x1,double x2,double y0,double y1,double y2)
{
double yx=0;
yx=y0*(x-x1)*(x-x2)/((x0-x1)*(x0-x2))+
y1*(x-x0)*(x-x2)/((x1-x0)*(x1-x2))+
y2*(x-x0)*(x-x1)/((x2-x0)*(x2-x1));//3点插值公式
return yx;
}
int main(int argc, char *argv[])
{
double x,x0,x1,x2,y0,y1,y2;
printf("输入待求值x:\n");
scanf("%lf",&x);
x0=x-0.1;x1=x+0.1;x2=x+0.15;//需要输入3个插值点,即对应的x值和函数y值,这里简单计算的可以手动输入
y0=sin(x0);y1=sin(x1);y2=sin(x2);
printf("sin(%lf)=%lf-------fun(%lf)=%lf\n",x,sin(x),x,fun(x,x0,x1,x2,y0,y1,y2));
return 0;
}追问这个不是和我查到的拉格朗日的方法是一样的吗?可是我的是要三次样条的方法
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯