公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

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

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

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

社区建议QQ群:365716997

分类

0 投票
2.0k 浏览

想用Manipulate 绘制动态函数交点,但两种方法均有问题

1.问题在于多出两个无关点(估计是复根但不知道怎么可以消除)

Clear[f]
Manipulate[f[x_] := Sqrt[Exp[x] + x - a]; 
Plot[{f[f[Sin[x]]], Sin[x]}, {x, 0, 4}, PlotRange -> {0, 4}, 
AxesOrigin -> {0, 0}, 
MeshFunctions -> {(f[f[Sin[x]]] - Sin[x]) /. {x -> #, 
a -> Dynamic@a} &}, Mesh -> {{0}}, 
MeshStyle -> PointSize[Large]], {a, E^(-1) - 1, E + 1}, 
TrackedSymbols :> {a}]

2.问题在于初始交点不显示,且运行缓慢

Clear[f, g]
f[x_, a_] := Sqrt[Exp[x] + x - a]
Manipulate[
Plot[{f[f[Sin[x], a], a], Sin[x]}, {x, 0, 4}, PlotRange -> {0, 4}, 
AxesOrigin -> {0, 0}, 
Epilog -> {PointSize[Large], 
If[NSolve[f[f[Sin[x], a], a] == Sin[x] && 0 < x < 4, x] == {}, 
Null, (Point[{#, f[f[Sin[x], a], a] /. x -> #}] &) /@ (x /. 
NSolve[f[f[Sin[x], a], a] == Sin[x] && 0 < x < 4, x])]}], {a, 
E^(-1) - 1, E + 1}, TrackedSymbols :> {a}]

 

实在找不出解决办法,求帮助。

用户: mma-2-2-2 (1.3k 分)

1个回答

+1 投票
 
已采纳

改一下 f 的定义行么,比如下面这样,无定义时默认值为-10

Clear[f]
Manipulate[
 f[x_] := Piecewise[{{Sqrt[Exp[x] + x - a], 
     Exp[x] + x - a >= 0}}, -10];
 Plot[{f[f[Sin[x]]], Sin[x]}, {x, 0, 4}, PlotRange -> {0, 4}, 
  AxesOrigin -> {0, 0}, 
  MeshFunctions -> {(f[f[Sin[x]]] - Sin[x]) /. {x -> #, 
       a -> Dynamic@a} &}, Mesh -> {{0}}, 
  MeshStyle -> PointSize[Large]], {a, E^(-1) - 1, E + 1}, 
 TrackedSymbols :> {a}]

 

用户: 野鹤 (5.1k 分)
采纳于 用户:mma-2-2-2
第二种方法为什么有一段不显示交点,以及如何优化运行速度?
刚刚用11.2测试了一下,第2种方法并没有出现你截图中的那种无交点的现象。

速度慢主要是由于在 Manipulate 中解方程耗时多,对于绘图来说并不需要很精确的解,所以建议在Manipulate外面,先用多项式势逼近之,然后在求出多项式的解,在Manipulate中直接使用这个解来绘制交点。

另外,你这次的问题,描述的很清晰,展示也很规整。进步很大,赞一个!
O(∩_∩)O谢谢宣哥鼓励。
...