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∗(xx−x(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.∗(xx−x(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实现的主要内容,如果未能解决你的问题,请参考以下文章