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)

 Réponse acceptée

Star Strider
Star Strider le 20 Sep 2018

0 votes

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 commentaires

Christian Bauer
Christian Bauer le 25 Sep 2018
thanks a lot. That works fine.
Star Strider
Star Strider le 25 Sep 2018
As always, my pleasure.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Mathematics and Optimization dans Centre d'aide et File Exchange

Produits

Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by