【12月学习进度4/31——计算机图形学】拉格朗日插值的MATLAB实现

拉格朗日插值

MATLAB实现

function yy = lagrange(x,y,xx)
	% input:(x,y):输入的离散点
	%        xx:插值的横坐标
	% output: yy: 插值实现的多项式函数关于xx
	
	m = length(x);
	n = length(y);
	yy = zeros(1,length(xx));
	
	if m~= n  %横纵坐标个数不相等  出错
	    disp('ERROR:x,y维度不一致');
	else
	    %先计算插值基函数li(x)
	    
	    for i = 1:n
	        tmp = ones(1,length(xx));
	        for j = 1:n
	            if i~=j
	                tmp = tmp.*(xx - x(j))./(x(i) - x(j));
	            end
	        end
	        yy = yy + tmp * y(i);
	    end
	end
end
  • 一个点 x x xx xx 操作 :
    t m p = 1 tmp = 1 tmp=1
    t m p = t m p ∗ ( x x − x ( j ) ) / ( x ( i ) − x ( j ) ) ; tmp = tmp*(xx - x(j))/(x(i) - x(j)); tmp=tmp(xxx(j))/(x(i)x(j));
  • 对于一系列点 x x xx xx (多维)操作:
    对每一个点分别进行如上操作,转换为向量化表示
    t m p = o n e s ( 1 , l e n g t h ( x x ) ) tmp = ones(1,length(xx)) tmp=ones(1,length(xx))
    t m p = [ 1 , 1 , 1 , . . . . , 1 ] tmp=[1,1,1,....,1] tmp=[1,1,1,....,1] (每一个 1 1 1 对应一个点的结果)
    t m p = t m p . ∗ ( x x − x ( j ) ) . / ( x ( i ) − x ( j ) ) ; tmp = tmp.*(xx - x(j))./(x(i) - x(j)); tmp=tmp.(xxx(j))./(x(i)x(j));

结果

x = [0:0.01:1];
y = lagrange([0,1,0.5],[0,1,2],x);
plot(x,y);
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值