# Is this a correct way to use fsolve?

11 visualizzazioni (ultimi 30 giorni)
Salvatore Bianco il 15 Lug 2024
Modificato: Torsten il 15 Lug 2024 alle 21:04
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));
fun = {F, J};
w0 = kappa/2;
g = fsolve(fun, w0, options);
end
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Risposta accettata

Torsten il 15 Lug 2024
Modificato: Torsten il 15 Lug 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);
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 CommentiMostra 6 commenti meno recentiNascondi 6 commenti meno recenti
Salvatore Bianco il 15 Lug 2024 alle 20:59
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 il 15 Lug 2024 alle 21:03
Sorry, I think the summer heat is hitting my brain, now I got it.

Accedi per commentare.

### Community Treasure Hunt

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

Start Hunting!

Translated by