Hi, I need to solve equations of the type b = @(x,s) solve(bb==x-s*icdf('Normal',bb,0,1),bb)
and after the function call
>> b(0.2,0.4)
I get this error. Can anyone help me?
Best,
Christian
Error using symengine Unable to prove 'bb < 0 | 1 < bb' literally. Use 'isAlways' to test the statement mathematically.
Error in sym/subsindex (line 821) X = find(mupadmex('symobj::logical',A.s,9)) - 1;
Error in sym/privsubsasgn (line 1096) L_tilde2 = builtin('subsasgn',L_tilde,struct('type','()','subs',{varargin}),R_tilde);
Error in sym/subsasgn (line 933) C = privsubsasgn(L,R,inds{:});
Error in norminv (line 57) p(p < 0 | 1 < p) = NaN;
Error in icdf (line 91) x = norminv(p,a,b);
Error in @(x,s)solve(bb==x-s*icdf('Normal',bb,0,1),bb)

 Respuesta aceptada

Star Strider
Star Strider el 20 de Sept. de 2018

0 votos

It is probably best to avoid the Symbolic Math Toolbox for such problems.
Try this:
b = @(x,s,bb) x-s*icdf('Normal',bb,0,1)-bb;
B = fsolve(@(bb)b(x,s,bb), 0.01)
You may need a different initial parameter estimate (I used 0.01 here), depending on what ‘x’ and ‘s’ are. This uses the Optimization Toolbox fsolve (link) function. It is more robust than fzero.

2 comentarios

Christian Bauer
Christian Bauer el 25 de Sept. de 2018
thanks a lot. That works fine.
Star Strider
Star Strider el 25 de Sept. de 2018
As always, my pleasure.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Mathematics and Optimization en Centro de ayuda y File Exchange.

Productos

Versión

R2018a

Etiquetas

Preguntada:

el 20 de Sept. de 2018

Comentada:

el 25 de Sept. de 2018

Community Treasure Hunt

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

Start Hunting!

Translated by