matlab拉格朗日插值法程序

matlab拉格朗日插值法程序,第1张

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

计算卫星定位么?? 要几次插值的 给你一次和二次的吧\x0d\x0a1.n个节点分段Lagrange插值多项式; \x0d\x0a%2.使用格式y=lagrange(x0,y0,x,k); \x0d\x0a%3.输入项x0为n维插值节点向量,y0为n维被插函数值向量; \x0d\x0a%4.x为m维插值点向量,k为分段插值多项式次数,不超过3,缺省为k=1; \x0d\x0a%5.输出y为插值点x处的函数值; \x0d\x0a%6.本程序于2002.4.21.编写? \x0d\x0afunction y=lagrange(x0,y0,x,k) \x0d\x0aif nargin3,error('分段次数过高,容易产生Runge现象,请重新选择次数k.'),end \x0d\x0an=length(x0)\x0d\x0am=length(x)\x0d\x0ann=1\x0d\x0afor i=1:m \x0d\x0a u=x(i)\x0d\x0a switch k \x0d\x0a %---------------------------针对不同的k判断插值区间\x0d\x0a case 1 \x0d\x0a if ux0(n-1) \x0d\x0a t=n-1 \x0d\x0a else \x0d\x0a for j=nn+1:n-2 \x0d\x0aif u>x0(j)&u(x0(n-2)+x0(n-1))/2 \x0d\x0a t=n-2\x0d\x0a else \x0d\x0a for j=nn+1:n-3 \x0d\x0aif u>(x0(j)+x0(j+1))/2 &ux0(n-2) \x0d\x0a t=n-3\x0d\x0a else \x0d\x0a for j=nn+2:n-3 \x0d\x0aif u>x0(j) &u=x0(n-1) \x0d\x0a y(i)=y0(n-1)*(u-x0(n))/(x0(n-1)-x0(n))+... \x0d\x0a y0(n)*(u-x0(n-1))/(x0(n)-x0(n-1))\x0d\x0a else \x0d\x0a for k=2:n-1 \x0d\x0a if u>=x0(k) &u 回答于 2022-11-16

做了一个测试,希望有所帮助。代码:% 用matlab编写拉格朗日插值算法的程序,并以下面给出的函数表为数据基础,

% 在整个插值区间上采用拉格朗日插值法计算f(0.6),写出程序源代码,输出计算结果

% x -2.15 -1.00 0.01 1.02 2.03 3.25

% y 17.03 7.24 1.052.0317.0623.05

function main()

clc

x = [-2.15 -1.00 0.01 1.02 2.03 3.25]

y = [17.03 7.24 1.052.0317.0623.05 ]

x0 = 0.6

f = Language(x,y,x0)function f = Language(x,y,x0)

%求已知数据点的拉格朗日插值多项式

%已知数据点的x坐标向量: x

%已知数据点的y坐标向量: y

%插值点的x坐标: x0

%求得的拉格朗日插值多项式或在x0处的插值: fsyms t l

if(length(x) == length(y))

n = length(x)

else

disp('x和y的维数不相等!')

return %检错

endh=sym(0)

for (i=1:n)

l=sym(y(i))

for(j=1:i-1)

l=l*(t-x(j))/(x(i)-x(j))

end

for(j=i+1:n)

l=l*(t-x(j))/(x(i)-x(j))

end

h=h+l

end

simplify(h)if(nargin == 3)

f = subs (h,'t',x0)%计算插值点的函数值

else

f=collect(h)

f = vpa(f,6)%将插值多项式的系数化成6位精度的小数

end结果:

f =0.0201>>


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

原文地址: https://outofmemory.cn/yw/11087584.html

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

发表评论

登录后才能评论

评论列表(0条)

保存