solving non linear equation

3 Ansichten (letzte 30 Tage)
RAFFAELE CANTERI
RAFFAELE CANTERI am 12 Okt. 2020
Kommentiert: Star Strider am 13 Okt. 2020
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)

Akzeptierte Antwort

Star Strider
Star Strider am 12 Okt. 2020
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 Kommentare
RAFFAELE CANTERI
RAFFAELE CANTERI am 12 Okt. 2020
thanks!
Star Strider
Star Strider am 13 Okt. 2020
As always, my pleasure!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by