拉格朗日插值法用C语言表示

拉格朗日插值法用C语言表示,第1张

我的程序是牛顿插值和拉格朗日插值合起来,你自己看下,用山搭的是C++

#include <iostream>

#include <iomanip>

#include <stdlib.h>

using namespace std

#define N 100

void lagrange()

{

int n,k,m,q=1

float x[N],y[N],xx,yyy1,yyy2,yy1,yy2,yy3

cout<<"请输入X的个数:"

cin>>n

for(k=0k<=n-1k++)

{

cout<<"请输入X"<<k<<"的值:"

cin>>x[k]

cout<<"请输入Y"<<k<<"的值:"

cin>>y[k]

}

system("cls")

cout<<"则Xi与Yi表格如下:"<<endl

cout<<"Xi"<<" "for(k=0k<=n-1k++)cout<<setiosflags(ios::left)<<setw(10)<<x[k]

cout<<endl

cout<<"Yi"<<" "for(k=0k<=n-1k++)cout<<setiosflags(ios::left)<<setw(10)<<y[k]

cout<<endl

while(q)

{

cout<<"请输入所求x的值:"

cin>>xx

while(xx>x[k-1]||xx<x[0])

{

cout<<"输亩唯陪迅蠢入错误,请重新输入:"

cin>>xx

}

for(k=0k<=n-1k++)

{

if(xx<x[k])

{

m=k-1

k=n-1

}

}

yyy1=y[m]*((xx-x[m+1])/(x[m]-x[m+1]))+y[m+1]*((xx-x[m])/(x[m+1]-x[m]))

cout<<"则拉格朗日分段线性插值为:"<<yyy1<<endl

for(k=0k<=n-1k++)

{

if(xx<x[k])

{

m=k-1

k=n-1

}

}

if((xx-x[m])>(x[m+1]-xx))m=m+1

else m=m

yy1=y[m-1]*((xx-x[m])*(xx-x[m+1]))/((x[m-1]-x[m])*(x[m-1]-x[m+1]))

yy2=y[m]*((xx-x[m-1])*(xx-x[m+1]))/((x[m]-x[m-1])*(x[m]-x[m+1]))

yy3=y[m+1]*((xx-x[m-1])*(xx-x[m]))/((x[m+1]-x[m-1])*(x[m+1]-x[m]))

yyy2=yy1+yy2+yy3

cout<<"则拉格朗日分段二次插值为:"<<yyy2<<endl

cout<<"是否输入其余要求x的值[是(1),否(0)]:"

cin>>q

}

system("cls")

}

void main()

{

lagrange()

}

三次样条插值函数边界条件由实际问题对三次样条插值在端点的派槐世状态要求给出。以第1边界条件为例,用节点处二阶导数表示三次样条插值函数,用追赶法求解相关方程组。通过Matlab编制三次样条函数的通尘肢用程序,可直接显示各区间段三次样条函数体表达式,计算出已给点插值并显示各区间分段曲线图

0引言分段低次样条插值虽然计算简单、稳定性好、收敛性有保证且易在电子计算机上实现,但只能保证各小段曲线在连接处的连续性,不能保证整件曲线的光滑性。利用样条插值,既可保持分段低次插值多项式,又可提高插值函数光滑性。故给出分段三次样条插值的构造过明银程、算法步骤,利用

function yh=lagrange (x,y,xh)

n = length(x)

m = length(xh)

yh = zeros(1,m)

c1 = ones(n-1,1)

c2 = ones(1,m)

for i=1:n

xp = x([1:i-1 i+1:n])

yh = yh + y(i)*prod((c1*xh-xp'*c2)./(x(i)-xp'*c2))

end

注:该程序只可一次计算实现一个插值计算。可实现多个插值计算的镇知程序滚碰如下:御备消

function yh=lagrange(x,y,xh)

n = length(x)

m = length(xh)

x = x(:)

y = y(:)

xh = xh(:)

yh = zeros(m,1)

c1 = ones(1,n-1)

c2 = ones(m,1)

for i=1:n,

xp = x([1:i-1 i+1:n])

yh = yh + y(i) * prod((xh*c1-c2*xp')./(c2*(x(i)*c1-xp')),2)

end


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12426498.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存