Matlab函数不返回向量

时间:2015-09-28 19:00:21

标签: matlab function vector output

这是一个函数,用于评估某个值 f(x),显示矢量 y 中的各种近似值,以便进行比较。输入是一个函数 f (符号或函数处理),值为 n 的向量,以及两个值 x0 x

g=sym(f);
p(1)=subs(g,x0);

k=1;

for i=1:size(n) %Every iteration is an entry of y
    while k<=n(i) %Recursive evaluation of the values
        g=diff(g);
        p(k+1)=subs(g,x0)/factorial(k-1);

        k=k+1;
    end

    y(i)=double(subs(p,x));
end

我想在每个条目中将 f(x)近似为多项式a + bx + cx ^ 2 + ...,而while循环计算a,b,c ......,但 y 原来是一个值,而不是一个向量。此外,如果我尝试

[y1 y2]=(function)

显示的输出参数错误太多。你能告诉我为什么MATLAB不将 y 理解为向量吗?

2 个答案:

答案 0 :(得分:1)

这应该可以解决问题。虽然,老实说我无法理解你写的功能。 (x-x0)项在哪里?

function y = vctay(f, n, x, x0)
    g=sym(f);

    n = sort(n(:));
    p = zeros(max(n)+1,1);

    for i = 0:max(n)
        %This is like you had it p(i) = (1/i!) f^i (x0)
        p(i+1) = subs(g, x0) / factorial(i) ;

        %This is just to save on a derivative in case it's costly
        if (i == numel(p))
            break
        end

        %This is what you had
        g = diff(g);
    end

    y = arrayfun(@(j) dot(p(1:j+1), (x - x0).^(0:j)) , n ); %This is the secret sauce. It's the sum p_0 * (x - x0)^0 + p_1 (x - x0)^1 + ...

end

答案 1 :(得分:0)

我想如果你知道y有多少元素将是最好的方法是将y定义为零向量并逐个给出它的值 或者如果你不知道每次都展开矢量y(由于时间原因,这不是一个好主意!) 喜欢 y(i + 1)= [y(i)sth];