Is this a correct way to use fsolve?

3 ビュー (過去 30 日間)
Salvatore Bianco
Salvatore Bianco 2024 年 7 月 15 日
編集済み: Torsten 2024 年 7 月 15 日
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

採用された回答

Torsten
Torsten 2024 年 7 月 15 日
編集済み: Torsten 2024 年 7 月 15 日
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 件のコメント
Salvatore Bianco
Salvatore Bianco 2024 年 7 月 15 日
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 2024 年 7 月 15 日
Sorry, I think the summer heat is hitting my brain, now I got it.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeAnalysis of Variance and Covariance についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by