mathematica 发表于 2021-5-11 10:13:19

如何不修改牛顿迭代法初始值让mathematica得到方程的根?

Clear["Global`*"];
f=2*Log-x^2*Exp+1
fx=D
FindRoot[{f-a*x,fx-a},{{x,20},{a,20}}]


求解结果:
FindRoot::lstol: The line search decreased the step size to within tolerance specified by AccuracyGoal and PrecisionGoal
but was unable to find a sufficient decrease in the merit function. You may need more than MachinePrecision digits of working precision to meet these tolerances.

如何破解这条提示呢?

@chyanog @wayne

wayne 发表于 2021-5-11 18:43:21

FindRoot 算法背后是随机算法, 另外, 不是所有函数都可以在任意处的初始值全局收敛的

mathematica 发表于 2021-5-12 12:45:25

wayne 发表于 2021-5-11 18:43
FindRoot 算法背后是随机算法, 另外, 不是所有函数都可以在任意处的初始值全局收敛的

唯一的随机数就是初始值,没办法,我只能改初始值了,估计是指数函数增长太快了!

mathematica 发表于 2021-5-12 16:20:09

wayne 发表于 2021-5-11 18:43
FindRoot 算法背后是随机算法, 另外, 不是所有函数都可以在任意处的初始值全局收敛的

Clear["Global`*"];
f=2*Log-x^2*Exp+1
fx=D
FindRoot[{f-a*x,fx-a},{{x,200},{a,200}},Method->{"Newton",StepControl->"TrustRegion"},Jacobian->"FiniteDifference",MaxIterations->1000]
FindRoot[{f-a*x,fx-a},{{x,20},{a,20}}]


我自己解决了,我自己在帮助文件里面瞎搜索,解决了!留下代码让你们自己对比着看

mathematica 发表于 2021-5-15 14:06:29

我都没想到自己能解决这个问题!

wayne 发表于 2021-5-22 21:13:51

升级一下Mathematica吧。现在FindRoot可以退休了。12.3版 直接符号求解,用Solve或者 Reduce,无需初值。

比如:
N-x^2*Exp+1==-1,x,Reals],100]

mathematica 发表于 2021-5-23 09:15:47

wayne 发表于 2021-5-22 21:13
升级一下Mathematica吧。现在FindRoot可以退休了。12.3版 直接符号求解,用Solve或者 Reduce,无需初值。
...

wolfram alpha没出结果!
你的运行结果呢?
页: [1]
查看完整版本: 如何不修改牛顿迭代法初始值让mathematica得到方程的根?