找回密码
 注册
关于网站域名变更的通知
查看: 474|回复: 2
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    开心
    2022-1-29 15:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2023-2-7 15:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    本帖最后由 peerless2021 于 2023-2-7 15:48 编辑
    1 |! q& M; E; b$ p3 V
    : H9 O; ?6 Z. u: y原程序为
    • function F = myeqn(alpha,L)
    • 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));
    • end
    • alpha0 = 0;
    • L0 = 0;
    • x0 = [alpha0,L0];
    • x = fsolve(@myeqn,x0);- v2 G  G! t; {/ |$ _* L7 T3 B' C
    在调用时会报错截图如下:! ^& H5 k, H1 X2 w

    & j1 C% {, t+ o, M' O原方程比较复杂,如图:
    : Q+ N- \7 V4 T0 B

    ; b( x  V) p7 B; r
    是调用的方式出现了问题吗?

    ' w0 D8 S/ {0 L/ G3 u6 \; K
    ! W2 d0 z* @3 A, p4 A- v, |- N+ I9 I6 J0 R5 h5 B5 K

    该用户从未签到

    2#
    发表于 2023-2-7 16:37 | 只看该作者
    你这样写不符合 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) ) 了?

    点评

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

    [LV.1]初来乍到

    3#
     楼主| 发表于 2023-2-7 16:45 | 只看该作者
    aid4her 发表于 2023-2-7 16:37
    1 [7 S. M9 `) ~! i7 w' D& J你这样写不符合 fsolve函数(超链接,自己点进去看) 的语法要求。
    5 H) G  H2 R1 H. O; s+ q" x# r仔细看帮助文档里的示例,以 x = fsolv ...

    * R  j0 }2 H/ w, V3 d7 [: z3 c是的,我的函数搞错了,是我打的时候想多了。按照您的两个方式我都尝试了一下,程序可以正常运行了,但是我没明白是在哪一步修改初值,最后得到的结果数字都是没输入过的. A4 a4 I/ H1 u0 r% M( q; F  P+ e8 d
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-23 16:22 , Processed in 0.187500 second(s), 28 queries , Gzip On.

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

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

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