Filter löschen
Filter löschen

Is this a correct way to use fsolve?

6 Ansichten (letzte 30 Tage)
Salvatore Bianco
Salvatore Bianco am 15 Jul. 2024
Bearbeitet: Torsten am 15 Jul. 2024
Since fsolve keeps giving me answers with a very small but non-zero imaginary part, which i really don't want, I though about giving the derivative of my function. Is this a correct way to do it? Also, is there a way to tell the function not to go outside the reale line?
%g is a function that is defined by an equation. I know that is invertible
%and takes values between 0 and kappa.
function g = g(y, z, p, kappa, beta, mu, muz, sigma, sigmaz)
K = (mu^2/sigma^2)*0.5;
M = (sigmaz*mu)/sigma;
q = 1/(p-1);
alpha = (sqrt((beta-M-K)^2+4*K*(beta-muz))-beta+M+K)/(2*K);
C = beta-K*p/(1-p);
%function whose zero i need to find (with respect to w)
F = @(w) ((1-p)/C)*(kappa^q - w^q)+y+z-z*(w/kappa)^(alpha-1);
%its derivative with respect to w
J = @(w) ((1-p)/C)*(-q*(w^(q-1))) -z*((alpha-1)*w^(alpha-2))/(kappa^(alpha-1));
options = optimoptions('fsolve', 'SpecifyObjectiveGradient', true);
fun = {F, J};
w0 = kappa/2;
g = fsolve(fun, w0, options);
end

Akzeptierte Antwort

Torsten
Torsten am 15 Jul. 2024
Bearbeitet: Torsten am 15 Jul. 2024
Solve in w^2 instead of w - then there shouldn't be imaginary parts in the solution:
F = @(w) ((1-p)/C)*(kappa^q - (w^2)^q)+y+z-z*(w^2/kappa)^(alpha-1);
instead of
F = @(w) ((1-p)/C)*(kappa^q - w^q)+y+z-z*(w/kappa)^(alpha-1);
Don't forget to take the square of g before exiting the function:
...
g = fsolve(fun, w0, options);
g = g^2;
end
  8 Kommentare
Salvatore Bianco
Salvatore Bianco am 15 Jul. 2024
Sorry, I just edited it. I did not use g^2 since I am now solving for q^2. So when I do find it, I take the square root so I have g?
Salvatore Bianco
Salvatore Bianco am 15 Jul. 2024
Sorry, I think the summer heat is hitting my brain, now I got it.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by