solving non linear equation

2 ビュー (過去 30 日間)
RAFFAELE CANTERI
RAFFAELE CANTERI 2020 年 10 月 12 日
コメント済み: Star Strider 2020 年 10 月 13 日
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)

採用された回答

Star Strider
Star Strider 2020 年 10 月 12 日
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 件のコメント
RAFFAELE CANTERI
RAFFAELE CANTERI 2020 年 10 月 12 日
thanks!
Star Strider
Star Strider 2020 年 10 月 13 日
As always, my pleasure!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMathematics についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by