|
|
你这样写不符合 fsolve函数(超链接,自己点进去看) 的语法要求。
x S2 y" Z5 `" f+ X仔细看帮助文档里的示例,以 x = fsolve(@myfun,x0) 这种语法调用时,要求输入函数形为 function F = myfun(x) 这样的“单输入”函数,你有两个输入,当然不行了。要么改写为
4 o/ q( C7 E7 ]1 }function F = myeqn( Input )
9 J; Y7 c4 Q& Nalpha = Input( 1 );
K6 Y/ a$ l" G b+ s! nL = Input( 2 );
( n1 ]! L' P& ?3 ]; C8 Q5 aF = (0.3*((9.8)*L^1.83)/(2*cos(alpha)^2)+(1.96*L^3)/(3*cos(alpha)^3)-10)/(0.9*tan(alpha));
# l5 t3 l5 d4 h! E, c& T, n1 Kend# D, m' b* y" f' w8 {; n! J, M
这样的“单输入”,然后用 x0 = [ alpha0, L0 ]; x = fsolve( @myeqn, x0 ) 来求“满足方程的数值向量”(另外还得注意你这初值取得不合适,导致分母出现了零,新手要避免直接取全零或全1这种简单值作为初值,很容易导致各种无穷或零出现在分母之类位置上,导致迭代运算无法继续)
" F3 @% n% P; Z/ i |9 y! a要么不改动自定义函数,但需要另行指定一个输入的值,求另一个,需要改写为9 m/ U; q) n, ?
x0 = [ alpha0 ] + eps; % 避免初值无效0 @7 G1 ^; Z/ }+ g& C5 z
x = fsolve( @( t ) myeqn( t, L0 ), x0 )9 o' x4 r9 Z+ ]( e: p$ X' c
disp( myeqn( x, L0 ) )# e$ K) H1 m: g6 m; {% f3 L# g
最后,你得好好检查检查你的函数,你为什么要多此一举地把 0.9*tan(alpha) 扔到分母上去。原方程是1 d8 J0 J0 X% h7 o/ v! D7 s/ j
0 == 0.9*tan(alpha) + Others
8 t* \8 m# h r7 v/ F' y怎么你改写就成了 0 == Others / ( 0.9*tan(alpha) ) 了? |
|