我试图在matlab中创建这样的功能
它必须是l_k的数组,从1到n,但是.
在代码中:x – 一些向量(数组),z – 标量;在代码中,w是压裂的上部,而g是较低的.
function out_l = l_k(z, x)
%вычисления массива l_k для числа z
%x - узлы интерполяции
%z - значение для которог овычисляем значение полинома
n = size(x);
w = 1;
g = 1;
out_l = zeros(n);
for k = 1:n
for j = 1:n
%вычислим w
for i=1:n
if((i ~= k) && (i ~= j))
w = w * (z - x(i));
end
end
%вычислим g
for i=1:n
if(i ~= k)
g = g * (x(k) - x(i));
end
end
end
out_l(k) = (w/g);
end
end
问题是 – 当涉及到循环时,它只是在第一次检查if语句后退出!什么是哇?
%вычислим w
for i=1:n
if((i ~= k) && (i ~= j))
w = w * (z - x(i));
end
end
%вычислим g
for i=1:n
if(i ~= k)
g = g * (x(k) - x(i));
end
end
最佳答案 线n = size(x);如果你想要n中的元素数量(大小返回维度的行向量,而不是标量),则没有意义.试试n = numel(x);代替.
稍后编辑:我也看到你像这样分配你的输出数据:out_l = zeros(n);但你应该知道它创建了一个nxn矩阵,而不是你想象的数组.尝试out_l =零(1,n);改变.
另一个建议是:如有疑问,请尽可能频繁地使用F1键. 🙂 Matlab集成的帮助非常擅长解释Matlab的东西.