关于分段函数绘图的问题
mathematica吧
全部回复
仅看楼主
level 5
imblacksheep 楼主
代码:
tax[x_] :=
Piecewise[{{0.03 x, x <= 1500}, {0.1 x - 105,
1500 < x <= 4500}, {0.2 x - 555,
4500 < x <= 9000}, {0.25 x - 1005,
9000 < x <= 35000}, {0.3 x - 2755,
35000 < x <= 55000}, {0.35 x - 5505,
55000 < x <= 80000}, {0.45 x - 13505, x > 80000}}];
Plot[tax[x], {x, 0, 100000}, PlotPoints -> #, ImageSize -> Large,
PlotStyle -> Thick] & /@ {10, 50}
在这段代码中,首先定义了一个分段函数tax[x],然后对分段函数绘图。第一个图的PlotPoints为10,第二个图的PlotPoints为50。我的疑问是,为什么第二个图会出现间断,为什么PlotPoints大了,反而会出现间断?
2014年05月20日 08点05分 1
level 1
Plot[tax[x], {x, 0, 100000}, Exclusions -> None]
能解决问题不能解释问题。
2014年05月20日 09点05分 2
的确,从函数定义上来看,貌似也没有问题,再次谢谢苹果大神~~
2014年05月20日 09点05分
level 5
imblacksheep 楼主
我来自问自答吧,参考了下面stackexchange上的帖子
http://mathematica.stackexchange.com/questions/24400/mathematica-plots-a-discontinuity-in-piecewise-function-that-does-not-exist/24402#24402
主要原因是,分段函数在分段的地方导数不存在。
tax[x_] :=
Piecewise[{{0.03 x, x <= 1500}, {0.1 x - 105,
1500 < x <= 4500}, {0.2 x - 555,
4500 < x <= 9000}, {0.25 x - 1005,
9000 < x <= 35000}, {0.3 x - 2755,
35000 < x <= 55000}, {0.35 x - 5505,
55000 < x <= 80000}, {0.45 x - 13505, x > 80000}}];
Plot[tax[x], {x, 0, 100000}, PlotPoints -> #, ImageSize -> Large,
PlotStyle -> Thick, Mesh -> All, MeshStyle -> Red,
MaxRecursion -> 0,
GridLines -> {{1500, 4500, 9000, 35000, 55000}, None}] & /@ {5, 11,
12, 15}
这段代码画了四个图,PlotPoints分别是,5, 11, 12, 15
当PlotPoints比较少的时候,不足以在每一个分段端点处都取样作图。这时候,分段断点处没有被取样,因此该处导数不连续不会产生间断。而当取样点足够多时,分段端点处都被取样了,此时该处导数不存在就使该点与后一取样点间无法绘图,出现间断。
2014年05月20日 11点05分 3
我之前也猜到和采样点有关,也用Mesh看了看。只是不知道采样点是怎么自动计算的,所以没法解释,就搜了搜SE给了个解决方案。
2014年05月20日 11点05分
回复 苹果_nb :如果不是分段函数的话,采样点会平均取样。如果是分段函数的话,在采样点足够多的情况下,会优先在分段点取样;采样点不足,就会平均取样。
2014年05月20日 11点05分
level 1
为什么我做三次样条插值时也出现了这个问题[喷],难道它采样点要算三阶导来画吗。。
2019年05月12日 20点05分 4
1