quad2d: Reached the maximum number of function evaluations
    4 ビュー (過去 30 日間)
  
       古いコメントを表示
    
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 件のコメント
採用された回答
  Walter Roberson
      
      
 2013 年 1 月 16 日
        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 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



