how can i return a vector as a solution?
I want back a number of roots equal to the number of values ​​of t
syms S
>> myfun = @(S,t) 0.17*((S/10.8)+(S/21.6*sqrt(1+16*((S/5.4)^2))+((1/16)*log((4*S/5.4)+sqrt(1+(16*(S/5.4)^2))))))- t
>> t = linspace(0,2.6,10)
>> fun = @(S) myfun(S,t)
S = fzero(fun,0.03)
The program return this error:
Operands to the || and && operators must be convertible to logical scalar values.
Error in fzero (line 327)
elseif ~isfinite(fx) || ~isreal(fx)

 Réponse acceptée

Star Strider
Star Strider le 12 Oct 2020

0 votes

First:
vv = vectorize('0.17*((S/10.8)+(S/21.6*sqrt(1+16*((S/5.4)^2))+((1/16)*log((4*S/5.4)+sqrt(1+(16*(S/5.4)^2))))))- t')
then copy the result (between the single quotes) to the body of ‘myfun’.
After that (I have already done and copied the vectorized result):
myfun = @(S,t) 0.17.*((S./10.8)+(S./21.6.*sqrt(1+16.*((S./5.4).^2))+((1./16).*log((4.*S./5.4)+sqrt(1+(16.*(S./5.4).^2))))))- t;
t = linspace(0,2.6,10)
for k = 1:numel(t)
S(k) = fzero(@(S) myfun(S,t(k)),0.03);
end
and you get the result you want.

2 commentaires

RAFFAELE CANTERI
RAFFAELE CANTERI le 12 Oct 2020
thanks!
Star Strider
Star Strider le 13 Oct 2020
As always, my pleasure!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

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

Community Treasure Hunt

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

Start Hunting!

Translated by