Error in fzero for solving numerical inverse function
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello
I am trying to find the inverse of an function, g, numerically, as the explicit form of it is complex. Here I wrote the inverse function by solving through the fzero command, however, I don't know why it is giving me this error:
Error using fzero (line 328)
Function value at starting guess must be finite and real.
I really appreciate your help,
Thank you
syms x
g = 1.02*x + 0.6*exp(-8.7*x)-0.292
gx = @(x) g
gval = 0.1 % or 0.2 or...0.6
guess = 0.5
inv_fun = @(x) (gx(x) - gval)
S = fzero (@(x) inv_fun(x) , guess)
0 commentaires
Réponse acceptée
Plus de réponses (2)
James Tursa
le 11 Déc 2020
Modifié(e) : James Tursa
le 11 Déc 2020
These lines don't do what you think they do
syms x
g = 1.02*x + 0.6*exp(-8.7*x)-0.292
gx = @(x) g
The x in g is symbolic. The x in gx is a dummy input argument that is ignored because it isn't used in g. That is, the x dummy input argument in gx is different from the symbolic x in g.
It looks like you really want just a simple function handle:
gx = @(x) 1.02*x + 0.6*exp(-8.7*x)-0.292
E.g.,
>> gx = @(x) 1.02*x + 0.6*exp(-8.7*x)-0.292
gx =
function_handle with value:
@(x)1.02*x+0.6*exp(-8.7*x)-0.292
>> gval = 0.1;
>> guess = 0.5;
>> inv_fun = @(x) (gx(x) - gval)
inv_fun =
function_handle with value:
@(x)(gx(x)-gval)
>> S = fzero (@(x) inv_fun(x) , guess)
S =
0.3583
>> inv_fun(S)
ans =
-2.7756e-17
>> gx(S)
ans =
0.1000
If you insist on starting with a symbolic expression then you need to convert it to a function handle properly. E.g.,
>> gx = matlabFunction(g)
gx =
function_handle with value:
@(x)x.*(5.1e+1./5.0e+1)+exp(x.*(-8.7e+1./1.0e+1)).*(3.0./5.0)-7.3e+1./2.5e+2
0 commentaires
Walter Roberson
le 11 Déc 2020
gx = matlabFunction(g);
or change your solving method
syms gval x
g = 1.02*x + 0.6*exp(-8.7*x)-0.292
inv_formula = solve(g == gval, x);
inv_fun = matlabFunction(inv_formula);
inv_fun(0.1)
0 commentaires
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!