公告:1)网站程序升级:Q2A升级到1.8.6,Wordpress升级到5.7.2
2)修复了头像加载慢与提交问题反应慢等问题
2021-06-16

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

0 投票
538 浏览

比如下面这个具体的问题,重复地给c一个随机值 ([-10000,0.1]间的随机数),直到 没有 消息 FindRoot::lstol 产生

FindRoot[x^2 - c, {x, 1000}]

好像用 Check 命令,但具体不会做。

谢谢

分类:函数 | 用户: pfg (506 分)

1个回答

0 投票
 
已采纳

先说一下你想要的方法:

c = 2;
root = True;
While[root,
  root = Check[FindRoot[x^2 - c, {x, RandomReal[{-10000, 0.1}]}], 
     True, FindRoot::lstol];
  ];
root

再说一下你问题中的问题:

  1. c是多少?如果c<0,那么随机实数是不能解决问题的,需要随机复数 RandomComplex
  2. 产生 FindRoot::lstol 消息表示:在指定的最大迭代次数内找不到符合要求的解。产生的根本原因是方程的复杂性,如果方程在指定数域内有解,可以选择不同的初始值来进行尝试(也就是你所想要的方法)。但还有可能是参数设置的问题,如下。
  3. 如果精度要求不高,可以设置较低的 AccuracyGoal 和 PrecisionGoal 
  4. 如果精度要求高,可以设置较大的 MaxIterations

用户: 野鹤 (5.1k 分)
采纳于 用户:pfg
明白了,很详细,非常感谢,
...