0

尝试使用以下代码评估作为 q,u 函数的三重积分。得到错误,

Warning: Maximum function count exceeded; singularity likely. 
In quad at 107
In test1>Inner at 12
In test1>@(x)Inner(x) at 5
In quad at 76
In test1 at 5

有谁知道这段代码有什么问题?

function [r] = test1(q,u)
b = u;
r = zeros(1);
for i = 1 : length(q);
    r(i) = quad(@(x)Inner(x),-2,q);
end;


function [w] = Inner(k)
w = zeros(1);
for i = 1 : length(k);
    w(i) = quad(@(n)InnerIntegral(n).*unifpdf(k(i)-n,-1,1),0,k(i)-1,k(i)+1);
end;



function [y] = InnerIntegral(n)
y = zeros(1);
for i = 1 : length(n);
    y(i) = quad(@(m)unifpdf(n(i)-m, -b, b).*unifpdf(m,-b,b), n(i)-b,n(i)+b);
end;
end
end
end
4

3 回答 3

1

当你像这样定义多个函数时,每个函数的end语句必须在下一次调用之前function。目前,看起来这是一个巨大的函数,其中有一个名为的子函数Inner,而该子函数还有另一个名为 的子函数InnerIntegraltest1尝试调用 也是如此Inner,但' 的定义`Inner直到稍后test1.

于 2012-04-24T02:46:03.977 回答
1

我遇到了同样的问题,然后我遇到了一个对我有用的解决方案。

尝试使用 quadgk(Function,lowerlimit,upperlimit) 而不是 quad(Function,lowerlimit,upperlimit)

hth

于 2014-05-25T04:41:42.973 回答
0

问题出在:

function [w] = Inner(k)
w = zeros(1);
for i = 1 : length(k);
    w(i) = quad(@(n)InnerIntegral(n).*unifpdf(k(i)-n,-1,1),0,k(i)-1,k(i)+1);
end

它的设置方式: w(i) = quad(@(n)fcc(n),0,k(i)-1 , k(i)+1 );

quad 的最后一个值设置为容差。我认为您想摆脱 0 术语:

w(i) = quad(@(n)InnerIntegral(n).*unifpdf(k(i)-n,-1,1),k(i)-1,k(i)+1);
于 2012-04-24T02:52:17.957 回答