超越函数求根有范围限制是咋回事?
mathematica吧
全部回复
仅看楼主
level 6
Shu_lty 楼主
在求J1(\[Mu]m)=0的时候,\[Mu]m范围必须要限制在30个数以内,否则会出现
{ToRules[C[1] \[Element] Integers &&
1. <= C[1] <= 15. && \[Mu]m == BesselJZero[1., C[1]]]},很奇怪,麻烦各位老哥帮忙看看,谢谢!
代码如下:
Clear[findRoots]
Options[findRoots] = Options[Reduce];
findRoots[gl_Equal, {x_, von_, bis_},
prec : (_Integer?Positive | MachinePrecision | Infinity) :
MachinePrecision, wrap_: Identity, opts : OptionsPattern[]] :=
Module[{work, glp, vonp,
bisp}, {glp, vonp, bisp} = {gl, von, bis} /.
r_Real :> SetPrecision[r, prec];
work = wrap@Reduce[{glp, vonp <= x <= bisp}, opts];
work = {ToRules[work]};
If[prec === Infinity, work, N[work, prec]]];
Plot[BesselJ[1, x], {x, 0, 50}]
st1 = Table[findRoots[BesselJ[1, \[Mu]m] == 0, {\[Mu]m, 1, 50}]];
M = Table[\[Mu]m /. st1]
Length[Table[\[Mu]m /. st1]]
2021年12月31日 17点12分 1
吧务
level 15
因为根的数目超过一定值了Reduce就不会直接给解的列表了。预先执行
SetSystemOptions["ReduceOptions" -> "DiscreteSolutionBound" -> 1000];
即可。(也可以在Reduce里改选项。)参看自带帮助中的教程“丢番图多项式系统”。
另外,你们是从哪学来这个Table的隐藏语法(Table[a]等效于a)的?自己瞎试出来的?你们隔三岔五能撞出些隐藏语法这点我还是有点佩服的。
2022年01月01日 02点01分 2
谢谢谢谢!搞定了! 吧主新年快乐哈哈,这个可能是学的不扎实,想当然的[黑线] Table这个方法用错了吗?确实不太确定0.0
2022年01月01日 07点01分
@Shu_lty 文档里从来没说过这个用法。更多内容请按下F1查询帮助。
2022年01月01日 07点01分
@xzcyr KOK,谢谢!
2022年01月01日 08点01分
1