找回密码
 注册
关于网站域名变更的通知

使用matlab中的fsolve求解非线性方程时报错

查看数: 473 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-2-7 15:47

正文摘要:

本帖最后由 peerless2021 于 2023-2-7 15:48 编辑 + X/ K6 k( \4 r; a$ l  K( X$ [0 ^; p, \' V/ p8 l( o$ J 原程序为function F = myeqn(alpha,L)F = (0.3*((9.8)*L^1.83)/(2*cos(alpha)^2)+(1.96*L^ ...

回复

peerless2021 发表于 2023-2-7 16:45
aid4her 发表于 2023-2-7 16:37
- y7 J( N7 w- J* K! @( R你这样写不符合 fsolve函数(超链接,自己点进去看) 的语法要求。* y* V; y! q# Y+ O2 h2 {; M3 q
仔细看帮助文档里的示例,以 x = fsolv ...
0 h& a/ |; u+ N9 o& b0 f7 H& B& H
是的,我的函数搞错了,是我打的时候想多了。按照您的两个方式我都尝试了一下,程序可以正常运行了,但是我没明白是在哪一步修改初值,最后得到的结果数字都是没输入过的, H" v0 E3 q# S4 V" f
aid4her 发表于 2023-2-7 16:37
你这样写不符合 fsolve函数(超链接,自己点进去看) 的语法要求。6 n: l  O3 E& Q$ `, a/ j
仔细看帮助文档里的示例,以 x = fsolve(@myfun,x0) 这种语法调用时,要求输入函数形为 function F = myfun(x) 这样的“单输入”函数,你有两个输入,当然不行了。要么改写为
" T) z, J, @% t6 g% Bfunction F = myeqn( Input )
& A! v- b0 A* J  @- F- valpha = Input( 1 );# I3 G# j  I* o6 e. G: t' ^
L = Input( 2 );
* L/ g6 R* H' M6 ~$ J7 X  \' y& bF = (0.3*((9.8)*L^1.83)/(2*cos(alpha)^2)+(1.96*L^3)/(3*cos(alpha)^3)-10)/(0.9*tan(alpha));3 J0 C# X4 f; u$ Q! O. |* A6 e; z
end
  F7 U" t  v) @6 j/ s* n! b这样的“单输入”,然后用 x0 = [ alpha0, L0 ]; x = fsolve( @myeqn, x0 ) 来求“满足方程的数值向量”(另外还得注意你这初值取得不合适,导致分母出现了零,新手要避免直接取全零或全1这种简单值作为初值,很容易导致各种无穷或零出现在分母之类位置上,导致迭代运算无法继续)0 Q* k, K& }6 J2 T6 |3 u& u8 Y2 i. K
要么不改动自定义函数,但需要另行指定一个输入的值,求另一个,需要改写为9 e- x; a0 w/ i4 s& N( s  `: D
x0 = [ alpha0 ] + eps; % 避免初值无效
/ i( l+ r/ T" O: f6 cx = fsolve( @( t ) myeqn( t, L0 ), x0 )5 D3 Y) d. A5 s3 U5 K: R# n; R. A$ |
disp( myeqn( x, L0 ) )
$ k# `* J' F" W, o. {最后,你得好好检查检查你的函数,你为什么要多此一举地把 0.9*tan(alpha) 扔到分母上去。原方程是
7 d7 w8 E; i7 [* L0 == 0.9*tan(alpha) + Others
) P. R$ Q; D; K1 @) N$ R0 T怎么你改写就成了 0 == Others / ( 0.9*tan(alpha) ) 了?

点评

是的,我的函数搞错了,是我打的时候想多了。按照您的两个方式我都尝试了一下,程序可以正常运行了,但是我没明白是在哪一步修改初值,最后得到的结果数字都是没输入过的  详情 回复 发表于 2023-2-7 16:45
关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 13:42 , Processed in 0.171875 second(s), 29 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表