尝试同时使用命名函数和函数句柄时出现八度数值积分错误

时间:2019-06-07 17:18:31

标签: octave numerical-integration

我的问题是我得到一个错误:“即使被积体确实返回这样的向量,被积F也必须返回与输入大小相同的单个实值向量”。

我在函数中调用以下内容:

Vsame = @(x) Vsame_fit(x./lB);
F0011 = @(x) (1-(x.^2)/2).*exp(-(x.^2./2));
integ_F0011same = @(x) F0011(x).*Vsame(x);
integ_F0011same(linspace(1,3,10))
Fsame(1,1,2,2) = quadcc(integ_F0011same,0,Inf);
我在其他地方定义了常数。在该函数之外,我定义了Vsame_fit:

function y = Vsame_fit(q)
    for k=1:length(q)
        if q(k)<0.022913
            y(k) = 0.98*tanh(200*q(k));
        elseif q(k)<0.50274
            y(k) = 1/(0.9*q(k)+1);
        elseif q(k)<21.598
            y(k) = 1/(1.046*q(k)+0.9266);
        else
            y(k) = 1/(0.9512*q(k)+2.89);
        end
    end
end

我在自变量的长度上编写了循环,以确保它将返回向量。此外,如果我将一些简单的测试称为

integ_F0011same(linspace(1,3,10))

在函数内部,按预期返回10个元素。为什么会出现此错误? 最终,我只想让我希望将其保存到Fsame(1,1,2,2)的积分值。我之所以用这么多单独的函数定义事物,是因为我又重复使用Vsame 3次来评估相似的积分,例如

integ_F0110same = @(x) F0110(x).*Vsame(x);
Fsame(1,2,2,1) = quadcc(integ_F0110same,0,Inf);

其中,F011(x)也通过函数句柄定义。我应该有更好的方法吗?

0 个答案:

没有答案