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

Posted fu_GAGA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

以上是关于12月学习进度4/31——计算机图形学拉格朗日插值的MATLAB实现的主要内容,如果未能解决你的问题,请参考以下文章

拉格朗日插值公式

浅谈拉格朗日插值公式

拉格朗日插值公式

拉格朗日插值

12月学习进度5/31——计算机图形学期末准备02规范化两点三次Hermite插值及MATLAB实现

拉格朗日插值法