找回密码
 欢迎注册
查看: 14056|回复: 10

[求助] mathematica使用findroot解方程组出错

[复制链接]
发表于 2019-2-20 16:27:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
代码如下
  1. f[Subscript[k, i] _,
  2.   Subscript[\[Omega],
  3.    i] _] = ((\[Omega] - k*I)^2*BesselI[m, Subscript[n, 1]])/(
  4.     Subscript[n, 1]*
  5.      D[BesselI[m, Subscript[n, 1]], Subscript[n, 1]]) - (
  6.     Q*\[Omega]^2*BesselK[m, Subscript[n, 2]])/(
  7.     Subscript[n, 2]*D[BesselK[m, Subscript[n, 2]], Subscript[n, 2]]) +
  8.      We*(k^2 + m^2 - 1) /. {Subscript[n,
  9.      1] -> (k^2 + Subscript[Ma, 1]^2*(\[Omega] - k*I)^2)^0.5,
  10.     Subscript[n,
  11.      2] -> (k^2 + Subscript[Ma, 2]^2*\[Omega]^2 )^0.5} /. {\[Omega] ->
  12.      Subscript[\[Omega], r] + Subscript[\[Omega], i]*I,
  13.    k -> Subscript[k, r] + Subscript[k, i]*I}
  14. m = 0;
  15. We = 8*10^-6;
  16. Q = 0.0014;
  17. Subscript[Ma, 1] = 0.2;
  18. Subscript[Ma, 2] = 0.57;
  19. Subscript[\[Omega], r] = 0;
  20. Subscript[k, r] = 150;
  21. FindRoot[{Re[f[Subscript[k, i] _, Subscript[\[Omega], i] _]] == 0,
  22.   Im[f[Subscript[k, i] _, Subscript[\[Omega], i] _]] ==
  23.    0}, {{Subscript[k, i], 1.5}, {Subscript[\[Omega], i], 160}}]
复制代码

求解会报错,而且求不出结果,请问这是什么原因?该怎么解决?(很抱歉图片传不上来,报错如下)
  1. FindRoot::nlnum: 在 {Subscript[k, i],Subscript[\[Omega], i]} = {1.5,160.} 处,函数值 {-0.471847-35.84 Re[BesselK[0.,Plus[<<2>>]^0.5]/(BesselK[1.,Power[<<2>>]] ((22497.8 +<<1>>)+<<1>>)^0.5)],0.210846 -35.84 Im[BesselK[0.,<<1>>^<<4>>]/(BesselK[1.,<<1>>] <<1>>)]} 不是由数字组成的维度为 {2} 的列表.
复制代码

评分

参与人数 1金币 +20 收起 理由
gxqcn + 20 首帖奖励,欢迎常来。

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-2-21 08:48:45 | 显示全部楼层
软件有bug不正常吗?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2019-2-21 09:54:24 | 显示全部楼层
mathematica 发表于 2019-2-21 08:48
软件有bug不正常吗?

那该怎么解决?怎么才能算出结果?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-2-21 10:45:31 | 显示全部楼层
这应该是中间结果有表的维度不匹配。自己仔细检查一下。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2019-2-21 16:25:50 | 显示全部楼层
hujunhua 发表于 2019-2-21 10:45
这应该是中间结果有表的维度不匹配。自己仔细检查一下。

好像只是方程组这里有表,另外我把{3,160}代入原函数,理论上应该得到一个数,但结果却是一个表达式,请问这是什么原因?是不是这个问题导致上面的报错?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-2-21 20:37:41 | 显示全部楼层
代码太乱了。函数f的定义里
  1. Subscript[k, i] _
复制代码
这个不是Pattern,而是乘积
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2019-2-22 09:57:05 | 显示全部楼层
wayne 发表于 2019-2-21 20:37
代码太乱了。函数f的定义里  这个不是Pattern,而是乘积

什么意思。。。我这里是这样的
SSE)(3G{EL`2BKZ~(TS$M0E.png
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-2-22 11:20:34 | 显示全部楼层
按道理Mathematica的语法高亮会起作用的,你的下划线会导致前面的变量 变颜色,没有变颜色说明Mathematica的解释器就是按照乘法解释了【因为 有空格 隔开】

这个是语法问题。带有下标的实际上是一个Subscript函数,而不是表达式。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-2-22 20:25:09 | 显示全部楼层
可以不必函数的,直接用变量
  1. m=0;
  2. We=8*10^-6;
  3. Q=14/10^4;
  4. Subscript[Ma,1]=2/10;
  5. Subscript[Ma,2]=57/100;
  6. Subscript[\[Omega],r]=0;
  7. Subscript[k,r]=150;
  8. fff=((\[Omega]-k*I)^2*BesselI[m,Subscript[n,1]])/(Subscript[n,1]*D[BesselI[m,Subscript[n,1]],Subscript[n,1]])-(Q*\[Omega]^2*BesselK[m,Subscript[n,2]])/(Subscript[n,2]*D[BesselK[m,Subscript[n,2]],Subscript[n,2]])+We*(k^2+m^2-1)/.{Subscript[n,1]->(k^2+Subscript[Ma,1]^2*(\[Omega]-k*I)^2)^(1/2),Subscript[n,2]->(k^2+Subscript[Ma,2]^2*\[Omega]^2)^(1/2)}/.{\[Omega]->Subscript[\[Omega],r]+Subscript[\[Omega],i]*I,k->Subscript[k,r]+Subscript[k,i]*I};
  9. FindRoot[{Re[fff]==0,Im[fff]==0},{{Subscript[k,i],3},{Subscript[\[Omega],i],160}},WorkingPrecision->100]
复制代码


{Subscript[k, i]->3.327053339450944610195029892563089265167289827915281452890687358908902031079265845904909468842704783
,Subscript[\[Omega], i]->149.6716262510162998687133461054467696048408225279457142116181855022206759477681954516776447786470369}



毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2019-2-25 21:30:07 | 显示全部楼层
wayne 发表于 2019-2-22 20:25
可以不必函数的,直接用变量

谢谢谢谢,终于解决了,不过那个下划线判别为乘法我还是不太理解,我输入的时候也没有加空格,下去我再多学习吧,还是很感谢你

点评

自己没有加,软件也会根据上下文自动加空格的,这个可以通过语法高亮看得出来  发表于 2019-2-25 22:39
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-3-29 20:28 , Processed in 0.050871 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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