尝试使用以下代码来计算三元积分,它是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
答案 0 :(得分:1)
当您定义多个这样的函数时,每个函数的end
语句必须在下一次调用function
之前。目前,看起来这是一个名为Inner
的子函数的巨型函数,该子函数还有另一个名为InnerIntegral
的子函数。因此test1
正在尝试调用Inner
,但`Inner
的定义直到内部 test1
的定义后才会出现。< / p>
答案 1 :(得分:1)
我遇到了同样的问题,然后我遇到了一个有效的解决方案。
尝试使用quadgk(函数,下限,上限)代替四元组(函数,下限,上限)
HTH
答案 2 :(得分: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);