how to increase 'MaxFunEvals'

8 vues (au cours des 30 derniers jours)
柊介 小山内
柊介 小山内 le 19 Déc 2022
Commenté : Torsten le 19 Déc 2022
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
柊介 小山内
柊介 小山内 le 19 Déc 2022
Modifié(e) : 柊介 小山内 le 19 Déc 2022
Sorry my program was wrong. if you fix formula of GNLI in my code as below, warning message 'you have reached the maxmum number of function evaluations(10000). the result didn't pass global error test.' will display. I think this warning can solve by increasing MaxFunEvals. but I can't increase the value.
pint = @(f)integral2(@(f1,f2)ft(f1,f2,f),-270.8e-3,270.8e-3,-270.8e-3,270.8e-3);
NLI = @(f)(16/27).*Ns.^1.03.*gamma.^2.*Le.^2.*pint(f); % NLI
NLI(0.165)
I tried to increase value as below, but didn't increase.
options = optimset('MaxFunEvals',20000);
pint =@(f)integral2(@(f1,f2)ft(f1,f2,f),-270.8e-3,270.8e-3,-270.8e-3,270.8e-3);
NLI = @(f)(16/27).*Ns.^1.03.*gamma.^2.*Le.^2.*pint(f); % NLI
fminsearch(NLI,0.165,options);
Torsten
Torsten le 19 Déc 2022
I suggest you plot NLI for reasonable values of f to see how the function behaves.

Connectez-vous pour commenter.

Réponse acceptée

Matt J
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.
  1 commentaire
Matt J
Matt J le 19 Déc 2022
Modifié(e) : Matt J le 19 Déc 2022
pint = @(f)integral2(@(f1,f2)ft(f1,f2,f),-270.8e-3,270.8e-3,-270.8e-3,270.8e-3,...
'AbsTol',1e-7);
NLI = @(f)(16/27).*Ns.^1.03.*gamma.^2.*Le.^2.*pint(f); % NLI
NLI(0.165)
ans = 0.0037

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Argument Definitions dans Help Center et File Exchange

Produits


Version

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by