lzqm 发表于 2019-2-20 16:27:17

mathematica使用findroot解方程组出错

代码如下
f _,
Subscript[\,
   i] _] = ((\ - k*I)^2*BesselI])/(
    Subscript*
   D], Subscript]) - (
    Q*\^2*BesselK])/(
    Subscript*D], Subscript]) +
   We*(k^2 + m^2 - 1) /. {Subscript[n,
   1] -> (k^2 + Subscript^2*(\ - k*I)^2)^0.5,
    Subscript[n,
   2] -> (k^2 + Subscript^2*\^2 )^0.5} /. {\ ->
   Subscript[\, r] + Subscript[\, i]*I,
   k -> Subscript + Subscript*I}
m = 0;
We = 8*10^-6;
Q = 0.0014;
Subscript = 0.2;
Subscript = 0.57;
Subscript[\, r] = 0;
Subscript = 150;
FindRoot[{Re _, Subscript[\, i] _]] == 0,
Im _, Subscript[\, i] _]] ==
   0}, {{Subscript, 1.5}, {Subscript[\, i], 160}}]
求解会报错,而且求不出结果,请问这是什么原因?该怎么解决?(很抱歉图片传不上来,报错如下)
FindRoot::nlnum: 在 {Subscript,Subscript[\, i]} = {1.5,160.} 处,函数值 {-0.471847-35.84 Re^0.5]/(BesselK] ((22497.8 +<<1>>)+<<1>>)^0.5)],0.210846 -35.84 Im/(BesselK <<1>>)]} 不是由数字组成的维度为 {2} 的列表.

mathematica 发表于 2019-2-21 08:48:45

软件有bug不正常吗?

lzqm 发表于 2019-2-21 09:54:24

mathematica 发表于 2019-2-21 08:48
软件有bug不正常吗?

那该怎么解决?怎么才能算出结果?

hujunhua 发表于 2019-2-21 10:45:31

这应该是中间结果有表的维度不匹配。自己仔细检查一下。

lzqm 发表于 2019-2-21 16:25:50

hujunhua 发表于 2019-2-21 10:45
这应该是中间结果有表的维度不匹配。自己仔细检查一下。

好像只是方程组这里有表,另外我把{3,160}代入原函数,理论上应该得到一个数,但结果却是一个表达式,请问这是什么原因?是不是这个问题导致上面的报错?

wayne 发表于 2019-2-21 20:37:41

代码太乱了。函数f的定义里 Subscript _ 这个不是Pattern,而是乘积

lzqm 发表于 2019-2-22 09:57:05

wayne 发表于 2019-2-21 20:37
代码太乱了。函数f的定义里这个不是Pattern,而是乘积

什么意思。。。我这里是这样的

wayne 发表于 2019-2-22 11:20:34

按道理Mathematica的语法高亮会起作用的,你的下划线会导致前面的变量 变颜色,没有变颜色说明Mathematica的解释器就是按照乘法解释了【因为 有空格 隔开】

这个是语法问题。带有下标的实际上是一个Subscript函数,而不是表达式。

wayne 发表于 2019-2-22 20:25:09

可以不必函数的,直接用变量
m=0;
We=8*10^-6;
Q=14/10^4;
Subscript=2/10;
Subscript=57/100;
Subscript[\,r]=0;
Subscript=150;
fff=((\-k*I)^2*BesselI])/(Subscript*D],Subscript])-(Q*\^2*BesselK])/(Subscript*D],Subscript])+We*(k^2+m^2-1)/.{Subscript->(k^2+Subscript^2*(\-k*I)^2)^(1/2),Subscript->(k^2+Subscript^2*\^2)^(1/2)}/.{\->Subscript[\,r]+Subscript[\,i]*I,k->Subscript+Subscript*I};
FindRoot[{Re==0,Im==0},{{Subscript,3},{Subscript[\,i],160}},WorkingPrecision->100]


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


lzqm 发表于 2019-2-25 21:30:07

wayne 发表于 2019-2-22 20:25
可以不必函数的,直接用变量

谢谢谢谢,终于解决了,不过那个下划线判别为乘法我还是不太理解,我输入的时候也没有加空格,下去我再多学习吧,还是很感谢你
页: [1]
查看完整版本: mathematica使用findroot解方程组出错