Use fsolve with an elliptic integral

1 visualizzazione (ultimi 30 giorni)
Hello,
I need to solve a non-linear equation with an eliptic integral in it. I tried to used fsolve but it don't want to work, any ideas. I copy the code below:
NI = 6.749914199660242e+05;
NI_ol = 1.749914199660242e+05;
Muo = 4*pi*10^-7; % (T*m/A)
a = 0.2073;
y = 0.15;
% Bos_c = Muo*(NI-NI_ol)*(a^2)/((z(1)^2 + a^2)^(1.5));
% m = (4*a*y)/((a+y)^2+z(1)^2);
%
% [K, E]= ellipke(m);
% Be = 2*Muo*NI*a*((2*m)^0.5)*(a*m*E/(2-2*m) + y*K - y*(2-m)*E/(2-2*m))/(2*pi*(2*a*y)^(1.5));
F=@(z) [Muo*(NI-NI_ol)*(a^2)/((z(1)^2 + a^2)^(1.5))...
- 2*Muo*NI*a*((2*m)^0.5)*(a*m*E/(2-2*m) + y*K - y*(2-m)*E/(2-2*m))/(2*pi*(2*a*y)^(1.5));...
m - (4*a*y)/((a+y)^2+z(1)^2);
[K, E]== ellipke(m)];
z_c = [0; 1000];
opts = optimoptions(@fsolve,'Algorithm', 'levenberg-marquardt');
neff = fsolve(F,z_c,opts);

Risposta accettata

Matt J
Matt J il 17 Mar 2020
Modificato: Matt J il 17 Mar 2020
It does not make sense to have a relational expression like,
[K, E]== ellipke(m)
as one of your equations, expecially one that doesn't depend on any of your unknowns, z(i). Also, z(2) is not used anywhere in the system of equations. In other words, you have multiple equations in a single unknown z(1), so the system is not likely to have a solution.
  6 Commenti
carlos Hernando
carlos Hernando il 17 Mar 2020
Thank you Matt, unknowns z(3) and z(4) are inside equation 1, I cannot eliminated them. The code now looks like this:
NI = 6.749914199660242e+05;
NI_ol = 1.749914199660242e+05;
Muo = 4*pi*10^-7; % (T*m/A)
a = 0.2073;
y = 0.15;
F=@(z) [Muo*(NI-NI_ol)*(a^2)/((z(1)^2 + a^2)^(1.5))...
- 2*Muo*NI*a*((2*z(2))^0.5)*(a*z(2)*z(4)/(2-2*z(2)) - y*z(3) + ...
y*(2-z(2))*z(4)/(2-2*z(2)))/(2*pi*(2*a*y)^(1.5));
z(2) - (4*a*y)/((a+y)^2+z(1)^2);
z(3) - ellipticK(z(2));
z(4) - ellipticE(z(2))];
z_c = [2 0.5 1 1] ;
opts = optimoptions(@fsolve,'Algorithm', 'levenberg-marquardt');
fsolve(F,z_c,opts);
It seems to work, but is unable to find a solution, the following message appears:
Solver stopped prematurely.
fsolve stopped because it exceeded the function evaluation limit,
options.MaxFunctionEvaluations = 8.000000e+02.
Any idea how can I solve this?
carlos Hernando
carlos Hernando il 17 Mar 2020
Ok I sort it out, just eliminating opts seems to work.
Thank you Matt

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Systems of Nonlinear Equations in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by