matlab函数工作错误

时间:2013-04-14 14:59:31

标签: matlab polynomial-math

我试图在matlab中创建这样的功能 enter image description here

它必须是l_k的数组k from 1 to 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

2 个答案:

答案 0 :(得分:1)

如果您希望n = size(x);n中的元素数量返回维度的行向量而不是标量,则行size没有意义。请改为n=numel(x);

稍后编辑:我也看到你像这样分配输出数据:out_l = zeros(n);,但你应该知道它会创建一个nxn矩阵,而不是你想象的数组。请尝试out_l = zeros(1,n);进行更改。

另一个建议是:如有疑问,请尽可能经常使用F1键。 :-) Matlab集成的帮助非常擅长解释Matlab的东西。

答案 1 :(得分:1)

Matlab具有嵌入式函数来执行插值,例如interp1; (我可以在公式中识别拉格朗日插值函数。)

如果你想拥有自己的代码来评估拉格朗日插值函数,你应该考虑使用向量并避免循环,以便使代码更快。

请考虑以下事项:

x_n = 0:.3:1; % # interpolation nodes

k = 3;        % # we want for instance the function which is equal to 1 at 3rd node  

z = .5;       % # we want to evaluate the interpolant at z=.5


x_n_l = x_n;
x_n_l(k) = [];   % # we need all the nodes but the k-th

l_k = prod( z - x_n_l )/prod( x_n(k) - x_n_l ) % # this is your value

当然,您可以将代码包装在一个很好的函数中。