【问题标题】:Matlab function doesn't return vectorMatlab函数不返回向量
【发布时间】:2015-09-28 19:00:20
【问题描述】:

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

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 理解为向量吗?

【问题讨论】:

  • 是什么让您认为(function) 在任何方面都是有效的matlab 语法?请告诉我你的函数不叫function。如果在你的函数头文件funname.m中有function [y1,y2]=funname(inputs),那么你将你的函数称为[yout1, yout2]=funname(inputs);
  • 我可能倾向于认为 size(n) 是 1
  • Andras:实际函数称为 vctay(泰勒多项式的值比较),所以我当然将其称为 [y1,y2]=vctay(inputs)。 Agawa001:我明确地放置了一个示例向量 n=[0 2],并首先创建了向量。我还使用了包含 7 个条目的向量。
  • @KonhatLeeSakurai size(n) 为 1,因为它默认为 size(n,1),使用 size(n,2) 或 numel(n)跨度>
  • 谢谢你,@Agawa001 我刚刚尝试了你的建议,它奏效了!

标签: matlab function vector output


【解决方案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

【讨论】:

  • 对不起。谢谢你的回答,但是已经解决了。我发布的代码不是我使用的完整代码,因为向量 y 的术语的生成完全写在该部分中。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-05-10
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2013-02-16
    相关资源
    最近更新 更多