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

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

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

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

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

社区建议QQ群:365716997

分类

0 投票
1.2k 浏览

现有原始数据集uvlst,用ListPlot画图,记为guvlst;然后,用插值函数得到uvlst的插值函数iuvfun1,用Plot画图,记为giuvfun1。用Show[giuvfun1, guvlst]一起显示两图,发现giuvfun1显示的并不完整,有几个uvlst存在的数据点没有一起画出来,为什么呢?

源代码如下:


 

ClearAll["Global`*"]

uvlst = {{0.447958, 0.35463}, {0.357897, 0.360331}, {0.286791, 
    0.356864}, {0.23895, 0.342519}, {0.210788, 0.322504}, {0.195889, 
    0.303568}, {0.188468, 0.289283}, {0.184765, 0.279803}, {0.182826, 
    0.273849}};
{umin, umax} = (Sort[uvlst[[;; , 1]]])[[{1, -1}]];
guvlst = ListPlot[uvlst, PlotStyle -> Red, PlotRange -> All]

l = {-0.0866839, -0.024446, 0.156504, 0.497302, 0.998973, 1.62946, 
   2.29314, 2.86806, 3.29327};
data = Transpose@{uvlst, l} /. {{m1_, m2_}, m3_} -> {{m1}, m2, m3};

iuvfun1 = Interpolation[data, InterpolationOrder -> 3];
giuvfun1 = 
 Plot[iuvfun1[u], {u, umin, umax}, 
  Epilog -> {Green, PointSize[Large], Point[{0.182826, 0.273849}]}]

Show[giuvfun1, guvlst, PlotRange -> All]


ClearAll["Global`*"]

 


运行结果如下:

用户: perkyboy (11 分)

1个回答

+1 投票

当绘图不完整时,首先要想到设置 PlotRange -> All,也可以指定绘图区域,详见帮助。

其它还有两小点建议修改一下,详见下面代码中的注释。

uvlst = {{0.447958, 0.35463}, {0.357897, 0.360331}, {0.286791, 
    0.356864}, {0.23895, 0.342519}, {0.210788, 0.322504}, {0.195889, 
    0.303568}, {0.188468, 0.289283}, {0.184765, 0.279803}, {0.182826, 
    0.273849}};
{umin, umax} = MinMax[uvlst[[;; , 1]]];(* Mma 10 以后可以用 MinMax 函数 *)
guvlst = ListPlot[uvlst, PlotStyle -> Red, PlotRange -> All]

l = {-0.0866839, -0.024446, 0.156504, 0.497302, 0.998973, 1.62946, 
   2.29314, 2.86806, 3.29327};
data = Transpose@{uvlst, l} /. {{m1_, m2_}, m3_} :> {{m1}, m2, 
    m3};(* 此处应该使用 :> 代替 -> *)

iuvfun1 = Interpolation[data, InterpolationOrder -> 6];
giuvfun1 = 
 Plot[iuvfun1[u], {u, umin, umax}, PlotRange -> All, 
  Epilog -> {Green, PointSize[Large], 
    Point[{0.182826, 0.273849}]}](* 有时 Plot 中需要设置 PlotRange -> All*)

Show[giuvfun1, guvlst, PlotRange -> All]

 

用户: 野鹤 (5.1k 分)
嗯,问题已解决,谢谢。剩下 -> 以及  :> 这两个的区别了,我抽空研究一下区别。-> 目前看也能用的
...