我使用LaGrange的插值方法在Matlab中编写了以下插值代码,但是当试图将值存储在向量中时(L(i)= ....),我不断得到重塑错误(元素必须没变)。
我不知道该怎么做,如果之前已经提出过这个问题,我很抱歉,但我已经尝试过搜索这个问题了,但是遇到这个问题的人实际上是在尝试使用reshape函数。
我想要做的就是将J循环的结果存储在一个向量中。
syms X
x = [-1, 0, 2]
y = [4, 1, -1]
i = 1
j = 1
P = 0
while i < 4
L(i) = 1
while j < 4
if (i ~= j)
L(i) = L(i) * (X - x(j)) / (x(i) - x(j))
end
j = j + 1
end
P = P + y(i) * L(i)
i = i + 1
end
答案 0 :(得分:1)
您使用此L
将L(i) = 1
初始化为双数组,但之后您尝试将符号内容存储在其中。您需要将L
初始化为符号数组,因为您要在其中存储相同的内容。所以在循环之前添加这一行:
L = sym('L', [3 1]);
同时避免使用i
和j
作为变量名,因为这些是为虚数保留的。
答案 1 :(得分:0)
我使用此代码得到了与您类似的错误,并且能够修复它,提前初始化L.这是您原始代码的修改(clear all
只是为了确保没有任何有趣的事情发生)。
clear all;
syms X L;
L(1:3) = [1 1 1];
x = [-1, 0, 2]
y = [4, 1, -1]
i = 1
j = 1
P = 0
while i < 4
while j < 4
if (i ~= j)
L(i) = L(i) * (X - x(j)) / (x(i) - x(j))
end
j = j + 1
end
P = P + y(i) * L(i)
i = i + 1
end