|
|
你这样写不符合 fsolve函数(超链接,自己点进去看) 的语法要求。+ m8 ^( W# g$ R2 F9 ^8 k; S
仔细看帮助文档里的示例,以 x = fsolve(@myfun,x0) 这种语法调用时,要求输入函数形为 function F = myfun(x) 这样的“单输入”函数,你有两个输入,当然不行了。要么改写为+ Z3 `, s5 o, v0 Y; |
function F = myeqn( Input )- m/ ]) ^, p( g, T( h/ u5 [
alpha = Input( 1 ); o( p- P2 f. e# G/ V% u# a, O
L = Input( 2 ); u$ @" c$ O' b0 L6 I2 n
F = (0.3*((9.8)*L^1.83)/(2*cos(alpha)^2)+(1.96*L^3)/(3*cos(alpha)^3)-10)/(0.9*tan(alpha));
( ]- @. A4 J. Z/ \/ i( K% eend
. _ x U! w5 w3 a$ r% E这样的“单输入”,然后用 x0 = [ alpha0, L0 ]; x = fsolve( @myeqn, x0 ) 来求“满足方程的数值向量”(另外还得注意你这初值取得不合适,导致分母出现了零,新手要避免直接取全零或全1这种简单值作为初值,很容易导致各种无穷或零出现在分母之类位置上,导致迭代运算无法继续)
" x1 w& e' W* M- y" P4 T8 p要么不改动自定义函数,但需要另行指定一个输入的值,求另一个,需要改写为1 `" W7 ~; `! U, f$ f, ^. m1 y% R
x0 = [ alpha0 ] + eps; % 避免初值无效
, } \7 w) p: z v. p$ Zx = fsolve( @( t ) myeqn( t, L0 ), x0 )* e" [1 T* K6 X5 H9 }! I& w
disp( myeqn( x, L0 ) )! ~1 \& R% Y4 o
最后,你得好好检查检查你的函数,你为什么要多此一举地把 0.9*tan(alpha) 扔到分母上去。原方程是
9 N7 |! V4 E; m! n' ]8 S0 == 0.9*tan(alpha) + Others
2 x0 y5 b) _, k- a8 L7 W5 N怎么你改写就成了 0 == Others / ( 0.9*tan(alpha) ) 了? |
|