即时工作八度不确定它是否会在matlab中运行,我试图做一个简单的拉格朗日多项式绘制点,函数和拉格朗日近似,所以我做了以下,
clear all
clc
function [y] = lagrange(x, x0, y0)
n = size(x0,1);
y = 0;
for i=1:n
p = 1;
for j=1:n
if j == i % avoiding division by 0
continue;
endif;
p *= (x-x0(j)) / (x0(i)-x0(j));
endfor;
y += y0(i) * p;
endfor;
endfunction;
x=[0:0.1:5];
x0=[2;2.75;4];
y0=[1/2;1/2.75;1/4];
y=lagrange(x,x0,y0);
我遇到以下问题,"运营商*:不一致的参数(op1是1x41,op2是1x41)"只有在x中使用矢量时才出现,如果我尝试在特定点评估例如lagrange(3,x0,y0),该函数正常工作并且没有问题,问题是当你使用更大的x的矢量,
所以我的问题是,有没有办法可以修改函数,因此它可以使用更大的向量x,或者有一种方法可以在不使用函数中直接使用较大的向量的情况下绘制函数?
答案 0 :(得分:1)
该行
p *= (x-x0(j)) / (x0(i)-x0(j));
表示
p = p * (x-x0(j)) / (x0(i)-x0(j));
这*表示矩阵乘法,并且不能将两个矩阵(1,41)和(1,41)相乘:内部维度不匹配。
你需要的是元素乘法,
p = p .* (x-x0(j)) / (x0(i)-x0(j));
(有关差异的解释,请参阅docs)。
可以写成
p .*= (x-x0(j)) / (x0(i)-x0(j));
但我建议避免这种收缩;在Matlab / Octave中,它没有像其他语言那样使用,可能是因为并排放置两个操作数会使二元运算中的错误选择更加明显。