how to increase 'MaxFunEvals'
25 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I want to increase 'maxFunEvals' in my program, but it doesn't work. What is the problem of my program?
clear all;
a = 0.2; %field loss coefficient α[db/km]
alfa = a*log(20)/20;
gamma = 1.3; % fiber non-linearity coefficient
Ns = 20; %number of span
Ls = 100; %span length[km]
beta2 = 20.7; %dispersion coefficient[ps^2/km]
roll = 0.3; %roll-off of gwdm
%% formula of ρ
syms f f1 f2 real %f,f1,f2 is THz
Le = (1-exp(-2*alfa*Ls))/(2*alfa);
x1(f1,f2,f) = 1-exp(-2*alfa*Ls)*exp(4j*(pi^2)*(f1-f)*(f2-f)*beta2*Ls);%symfun
x2(f1,f2,f) = 2*alfa-(4j*(pi^2)*(f1-f)*(f2-f)*beta2);
p(f1,f2,f) = Le^(-2)*(abs(x1(f1,f2,f)/x2(f1,f2,f)))^2;
%% formula of Gwdm
syms t w k
T=1/(32e-3);
A = pi*t/T;
x(t)= (sin(A)/A)*(cos(roll*A)/(1-(2*roll*t/T)^2));
X(w) = simplify(fourier(rewrite(x(t),'exp'),t,w));
X(f) =X(2*sym(pi)*f);
X(f)= rewrite(abs(X(f)),'sqrt');
xfunc = matlabFunction(X(f));%@(f)
GWDM(f)= (symsum(xfunc(f+(50e-3)*k),k,-5,5)/((32/8.8)*T));
func = p*GWDM(f1)*GWDM(f2)*GWDM(f1+f2-f);
ft=matlabFunction(func);
%% formula of GNLI
pint = @(f)integral2(@(f1,f2)ft(f1,f2,f),-270.8e-3,270.8e-3,-270.8e-3,270.8e-3,'MaxFunEvals',20000);
NLI = @(f)(16/27).*Ns.^1.03.*gamma.^2.*Le.^2.*pint(f); % NLI
%f = -0.3:0.005:0.3;
%plot(f,arrayfun(@(f)NLI(f),f));
%hold on
%plot(f,GWDM(f));
%hold off
5 commentaires
Torsten
le 19 Déc 2022
I suggest you plot NLI for reasonable values of f to see how the function behaves.
Réponse acceptée
Matt J
le 19 Déc 2022
Modifié(e) : Matt J
le 19 Déc 2022
The problem is that integral2 does not support an option called 'MaxFunEvals'. You imagined somehow that it does.
2 commentaires
Szymon
le 16 Avr 2025
Hi @Matt J
I am sorry for digging up a subject from 3 years ago, but when i opened integral2.m, in line 105 it is calling integral2Calc.m
Opening this program, I can see examples that can be run in order to reproduce the warnings. for example:
elseif maxNFEWarn
if ERRBND > max(ATOL,RTOL*abs(Q))
% Example:
% integral2(@(x,y)single(1./(x+y)),0,1,0,1,'Abstol',1e-4,'MaxFunEvals',3)
warning(message('MATLAB:integral2:maxFunEvalsFail',maxFunEvals));
if opstruct.ThrowOnFail
error(message('MATLAB:integral2:unsuccessful'));
end
else
% Example:
% integral2(@(x,y)single(1./(x+y)),0,1,0,1,'Abstol',1e-4,'MaxFunEvals',4)
warning(message('MATLAB:integral2:maxFunEvalsPass',maxFunEvals));
end
elseif minRectWarn
if ERRBND > max(ATOL,RTOL*abs(Q))
% Example:
% integral2(@(x,y)single(1./(x+y)),0,1,0,single(1),'Abstol',1e-5)
warning(message('MATLAB:integral2:minRectSizeFail'));
if opstruct.ThrowOnFail
error(message('MATLAB:integral2:unsuccessful'));
end
As you can see, the examples use 'MaxFunEvals',X as option of the function. However, as you mentioned and as I was able to confirm I am unable to run integral2 with it as an option, becouse it produces an error. Was it a plan to make it an option that was never realised, and someone just forgot to delete it from the code?
I am using matlab 2022b
thank you
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Symbolic Math Toolbox dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!