|
|
你这样写不符合 fsolve函数(超链接,自己点进去看) 的语法要求。0 [8 u$ M% l. i
仔细看帮助文档里的示例,以 x = fsolve(@myfun,x0) 这种语法调用时,要求输入函数形为 function F = myfun(x) 这样的“单输入”函数,你有两个输入,当然不行了。要么改写为" [( e* p; J- R
function F = myeqn( Input )5 j) o! H6 v W& o
alpha = Input( 1 );) j% D, I2 L3 X- k) K) B: d; r) D
L = Input( 2 );9 ~1 u0 ^4 T/ e5 V- G+ D& y
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));* c B+ x9 O( o; Q
end9 |" o. `0 o! j- L# c; I0 X1 E
这样的“单输入”,然后用 x0 = [ alpha0, L0 ]; x = fsolve( @myeqn, x0 ) 来求“满足方程的数值向量”(另外还得注意你这初值取得不合适,导致分母出现了零,新手要避免直接取全零或全1这种简单值作为初值,很容易导致各种无穷或零出现在分母之类位置上,导致迭代运算无法继续)0 w) o; e. y: N9 C0 ~2 K
要么不改动自定义函数,但需要另行指定一个输入的值,求另一个,需要改写为$ ?" `0 ^/ V- g) Z* g& N2 h% z
x0 = [ alpha0 ] + eps; % 避免初值无效
* j3 Q [! U" ^6 s0 ^9 @$ Qx = fsolve( @( t ) myeqn( t, L0 ), x0 )2 L) ^' D5 z0 i5 P6 e; O
disp( myeqn( x, L0 ) )
: J7 \2 q7 s& ~7 M$ N w [最后,你得好好检查检查你的函数,你为什么要多此一举地把 0.9*tan(alpha) 扔到分母上去。原方程是6 y% r* f+ `' r8 Y, D0 H
0 == 0.9*tan(alpha) + Others x0 V, u. n8 W# E2 S* j
怎么你改写就成了 0 == Others / ( 0.9*tan(alpha) ) 了? |
|