|
|
你这样写不符合 fsolve函数(超链接,自己点进去看) 的语法要求。& H# e0 v- y* c. r n
仔细看帮助文档里的示例,以 x = fsolve(@myfun,x0) 这种语法调用时,要求输入函数形为 function F = myfun(x) 这样的“单输入”函数,你有两个输入,当然不行了。要么改写为
; z% k4 p% N3 y! P& ^$ Dfunction F = myeqn( Input ); w1 ?& q0 D5 g4 p2 d w* a4 K4 Q3 \
alpha = Input( 1 );' m0 X8 `2 G2 J! D# h e
L = Input( 2 );
, w6 e; p. f4 }9 m RF = (0.3*((9.8)*L^1.83)/(2*cos(alpha)^2)+(1.96*L^3)/(3*cos(alpha)^3)-10)/(0.9*tan(alpha));
, {# U4 Q2 v0 N5 L" ^# Vend. s, D9 _# _5 q* T" T
这样的“单输入”,然后用 x0 = [ alpha0, L0 ]; x = fsolve( @myeqn, x0 ) 来求“满足方程的数值向量”(另外还得注意你这初值取得不合适,导致分母出现了零,新手要避免直接取全零或全1这种简单值作为初值,很容易导致各种无穷或零出现在分母之类位置上,导致迭代运算无法继续); [- E3 K. t% V, E3 l% y
要么不改动自定义函数,但需要另行指定一个输入的值,求另一个,需要改写为1 f' o' K; e n" g7 E
x0 = [ alpha0 ] + eps; % 避免初值无效
$ R5 M) @, V; v% G* {5 F( {' H3 t+ Yx = fsolve( @( t ) myeqn( t, L0 ), x0 )
9 X0 W% L" y5 R, J3 adisp( myeqn( x, L0 ) )# J2 z3 v7 x3 t* u8 ]' U1 l
最后,你得好好检查检查你的函数,你为什么要多此一举地把 0.9*tan(alpha) 扔到分母上去。原方程是: G+ [0 d0 R7 y4 K
0 == 0.9*tan(alpha) + Others$ B3 h; J( ^# R8 w+ \
怎么你改写就成了 0 == Others / ( 0.9*tan(alpha) ) 了? |
|