这个mathematica画图问题大家可能都没有遇到过吧
mathematica吧
全部回复
仅看楼主
level 1
yanshao124 楼主
图1代码:
f[\[Alpha]_] = (2 - \[Alpha]^2)/(\[Alpha]*(2 - \[Alpha]));
g[\[Alpha]_] = (1 + \[Alpha] - \[Alpha]^2)/(
3*\[Alpha] - \[Alpha]^2 - 1); k[\[Alpha]_] = 1/(2*\[Alpha] - 1);
Quxian = Plot[f[\[Alpha]], {\[Alpha], 0.2, 1},
PlotStyle -> {AbsoluteThickness[3], Red}];
Quxian2 =
Plot[g[\[Alpha]], {\[Alpha], 0.2, 1},
PlotStyle -> {AbsoluteThickness[3], Blue}];
Quxian3 =
Plot[k[\[Alpha]], {\[Alpha], 0.2, 1},
PlotStyle -> {AbsoluteThickness[3], Yellow}];
Quyu31 = RegionPlot[
k[\[Alpha]] >= y >= f[\[Alpha]], {\[Alpha], 1/2, 1}, {y, 1, 5},
PlotStyle -> Blue];
Show[Quyu31, Axes -> Automatic, Frame -> True]
稍作变化,图2:
f[\[Alpha]_] = (2 - \[Alpha]^2)/(\[Alpha]*(2 - \[Alpha]));
g[\[Alpha]_] = (1 + \[Alpha] - \[Alpha]^2)/(
3*\[Alpha] - \[Alpha]^2 - 1); k[\[Alpha]_] = 1/(2*\[Alpha] - 1);
Quxian = Plot[f[\[Alpha]], {\[Alpha], 0.2, 1},
PlotStyle -> {AbsoluteThickness[3], Red}];
Quxian2 =
Plot[g[\[Alpha]], {\[Alpha], 0.2, 1},
PlotStyle -> {AbsoluteThickness[3], Blue}];
Quxian3 =
Plot[k[\[Alpha]], {\[Alpha], 0.2, 1},
PlotStyle -> {AbsoluteThickness[3], Yellow}];
Quyu31 = RegionPlot[k[\[Alpha]] >= y, {\[Alpha], 1/2, 1}, {y, 1, 5},
PlotStyle -> Blue];
Show[Quyu31, Axes -> Automatic, Frame -> True]
请问,图1中的蓝色部分后面的尾巴到哪里去了?谢谢!
2017年02月25日 07点02分 1
level 7
你是来找茬的么得?
下限呢
2017年02月27日 07点02分 2
不是……楼主说的是不够清楚,但是他的意思应该是,为什么加了个下限之后图上本应该有的尖尖却不见了。
2017年03月04日 07点03分
吧务
level 15
这个问题其实还满常见的,主要出现在使用RegionPlot绘制带有尖角的区域的时候,解决方法嘛,传统上是增加MaxRecursion或者PlotPoints,此外版本10以后加了一大堆的有限元相关函数,应该可以有效改善这类问题的求解,不过我还在版本9,就不多说了。
2017年03月04日 07点03分 3
谢谢吧主。难道说这个是一个mathematica的bug?还有如下的类似问题(sorry,代码太长通不过,放到了楼下)
2017年03月10日 12点03分
回复
倍赏歼透
:效果欠佳的情况一般不认为是Bug,一个不太恰当的例子,我徒手画草图结果直线画得不直,你总不能说我画错了、画的不是直线吧。
2017年04月01日 10点04分
感谢指导!
2018年10月12日 09点10分
level 1
yanshao124 楼主
f2[\[Alpha]_] = (-2 + \[Alpha]^2)/(-2 \[Alpha] + \[Alpha]^2);
f3[\[Alpha]_] = (-5 - 3 \[Alpha] + \[Alpha]^2 + \[Alpha]^3)/(-1 -
3 \[Alpha] - \[Alpha]^2 + \[Alpha]^3);
Quyu32se =
RegionPlot[(y <= f3[\[Alpha]] && y >= f2[\[Alpha]]), {\[Alpha], 0,
1}, {y, 1, 10}, PlotStyle -> Red];
f2 = Plot[f2[\[Alpha]], {\[Alpha], 0, 1}, PlotStyle -> Black];
f3 = Plot[f3[\[Alpha]], {\[Alpha], 0, 1}, PlotStyle -> Red];
Show[Quyu32se, f2, f3]
这个的结果中红色部分还有白色的,说明没有占满,也就是说画图不对。怎么办呢?是mathematica本身的问题,还是代码不对?我已经是mathematica 10.0了。谢谢!
2017年03月10日 12点03分 4
level 7
这是RegionPlot采样率的问题, 增加采样点数即可
RegionPlot[(y <= f3[\[Alpha]] && y >= f2[\[Alpha]]), {\[Alpha], 0,
1}, {y, 1, 10}, PlotStyle -> Red, PlotPoints -> 50]
不要重复使用变量名
2017年03月11日 04点03分 5
level 7
补原始问题及 @xzcry 的回答
这个其实和RegionPlot本身的采样算法有关
通常的线型图, 采样点基本是沿着一个轴向均匀分布的, 参见PlotPoints
Table[Plot[f[\[Alpha]], {\[Alpha], 1/2, 1}, PlotPoints -> n,
MaxRecursion -> 0], {n, 2, 10}]
g = Table[
Plot[f[\[Alpha]], {\[Alpha], 1/2, 1}, PlotPoints -> n,
MaxRecursion -> 0], {n, 2, 10}];
Cases[g, Line[a___] :> {a}, Infinity] /. {a_, b_} :> a //
MapIndexed[{First@
#2, Differences[#
1]} &, #, {2}] & //
Flatten[#, 1] & // TextGrid
基本是均匀采样
但是RegionPlot就不一样了
它的采样方式比较诡异
Table[RegionPlot[
k[\[Alpha]] >= y >= f[\[Alpha]], {\[Alpha], 1/2, 1}, {y, 1, 5},
PlotStyle -> Blue, PlotPoints -> n, MaxRecursion -> 0], {n, 2, 10}]
目测是遵循左上->右下的发展方向,大体保持一定的步长, 但是不同于Plot, 它不是对全区间均分(Plot可以发现步长在变短), 而是保持了稳定的步长逐渐扩展, 所以就出现了区间遗漏和破裂的情况
2017年03月11日 04点03分 6
谢谢指教!
2018年10月12日 09点10分
1