quad2d: Reached the maximum number of function evaluations
1 view (last 30 days)
Show older comments
Jinsoo
on 16 Jan 2013
Commented: Walter Roberson
on 31 Jul 2017
I'm trying to find the error in the following code. I want to iterate:
for iter = 1:10
% uallA = Int_GLA.*(-Int_GC - Int_GB) + Int_GA;
uallA = Int_GLA.*(-uallC - uallB) + Int_GA;
uallB = Int_GLB.*(-uallC - uallB) + Int_GB;
uallC = Int_GLC.*(-uallC - uallB) + Int_GC;
end
However, I receive the following error:
Warning: Reached the maximum number of function evaluations (2000). The result fails the global error test.
This is my code:
clc; clear all; close all;
x = linspace(-10, 10, 51);
t = linspace(0.1, 5, 51);
nx = length(x);
nt = length(t);
Wx = x(2) - x(1);
Wt = t(2) - t(1);
f = @(x) exp(-x.^2);
%%A right
for mx = 1:nx
for mt = 1:nt
GA = @(xi) 1./sqrt(4*pi*(t(mt))).*exp(-(x(mx) - xi).^2./(4*(t(mt)))).*exp(-xi.^2);
funGA = quad(GA, x(1), x(end));
Int_GA(mx, mt) = funGA;
end
end
figure(1)
surf(t,x, Int_GA)
xlabel('t')
ylabel('x')
zlabel('u')
%%B right
for mx = 1:nx
for mt = 1:nt
GB = @(xi) 1./sqrt(4*pi*(t(mt))).*exp(-(x(mx) - xi).^2./(4*(t(mt))))...
.*(-(x(mx) - xi)/(2*t(mt))).*exp(-xi.^2);
funGB = quad(GB, x(1), x(end));
Int_GB(mx, mt) = funGB;
end
end
figure(2)
surf(t,x, Int_GB)
xlabel('t')
ylabel('x')
zlabel('u')
%%C right
for mx = 1:nx
for mt = 1:nt
GC = @(xi) 1./sqrt(4*pi*(t(mt))).*exp(-(x(mx) - xi).^2./(4*(t(mt))))...
.*((x(mx)-xi).^2/(4*t(mt).^2) - 1./(2*t(mt))).*exp(-xi.^2);
funGC = quad(GC, x(1), x(end));
Int_GC(mx, mt) = funGC;
end
end
figure(3)
surf(t,x, Int_GC)
xlabel('t')
ylabel('x')
zlabel('u')
%%A left
for mt1 = 1:nt
for mx1 = 1:nx
GLA = @(xi, ta) 1./sqrt(4*pi*(t(mt1)-ta)).*exp(-(x(mx1) - xi).^2 ...
./(4*(t(mt1)-ta)));
funGLA = quad2d(GLA, x(1), x(end), t(1), t(mt1), 'AbsTol',1e-4, 'FailurePlot',true);
Int_GLA(mx1, mt1) = funGLA;
end
end
figure(4)
surf(t,x, Int_GLA)
xlabel('t')
ylabel('x')
zlabel('u')
%%B left
for mt2 = 1:nt
for mx2 = 1:nx
GLB = @(xi, ta) -(x(mx2) - xi)./(2*(t(mt2) - ta))./sqrt(4*pi*(t(mt2)-ta))...
.*exp(-(x(mx2) - xi).^2 ./(4*(t(mt2)-ta)));
funGLB = quad2d(GLB, x(1), x(end), t(1), t(mt2), 'AbsTol',1e-4, 'FailurePlot',true);
Int_GLB(mx2, mt2) = funGLB;
end
end
%%C left
for mt3 = 1:nt
for mx3 = 1:nx
GLC = @(xi, ta) 1./(4*(t(mt3)-ta).^2).*((x(mx3) - xi).^2 - ...
2*(t(mt3)-ta))./sqrt(4*pi*(t(mt3)-ta)).*exp(-(x(mx3) - xi).^2 ...
./(4*(t(mt3)-ta)));
funGLC = quad2d(GLC, x(1), x(end), t(1), t(mt3), 'AbsTol',1e-4, 'FailurePlot',true);
Int_GLC(mx3, mt3) = funGLC;
end
end
uallB = zeros(nx, nt);
uallC = zeros(nx, nt);
for iter = 1:10
% uallA = Int_GLA.*(-Int_GC - Int_GB) + Int_GA;
uallA = Int_GLA.*(-uallC - uallB) + Int_GA;
uallB = Int_GLB.*(-uallC - uallB) + Int_GB;
uallC = Int_GLC.*(-uallC - uallB) + Int_GC;
end
% uallA1 = Int_GA;
% uallB1 = Int_GB;
% uallC1 = Int_GC;
% uallA = Int_GLA.*(-uallC1 - uallB1) + Int_GA;
figure(5)
surf(t,x, uallA)
xlabel('t')
ylabel('x')
zlabel('u')
0 Comments
Accepted Answer
Walter Roberson
on 16 Jan 2013
The problem is not occurring in the "for iter" loop that you point out: it is occurring in the quad2d() call.
You should add a MaxFunEvals parameter to your quad2d() call.
Also you should be examining your failure plot.
4 Comments
More Answers (0)
See Also
Categories
Find more on Surface and Mesh Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!