solving non linear equation

2 views (last 30 days)
RAFFAELE CANTERI
RAFFAELE CANTERI on 12 Oct 2020
Commented: Star Strider on 13 Oct 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)

Accepted Answer

Star Strider
Star Strider on 12 Oct 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.

More Answers (0)

Categories

Find more on Mathematics in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!