【问题标题】:Shade area under a function curve with 2 variables具有 2 个变量的函数曲线下的阴影区域
【发布时间】:2014-07-18 09:51:40
【问题描述】:

我有 2 个变量的这个函数:

match = (2.*x-1).*y.^(.1) - 2.*x.*y;

使用ezplot(match, [0 1], [0 1]) 绘制产量:

我想对这条绿色曲线下的区域一直到 2 轴进行着色(填充)。我尝试通过get(h,'XData')get(h,'YData')获取x和y数据,然后使用

area(x,y)

但情节不正确。有什么建议吗?

【问题讨论】:

  • 基本上通过在相似域上使用 EZ 图,您可以为每个变量创建两个相同的范围,基本上只绘制 match = f(x)。这是你想要的吗?为什么在这种情况下使用两个变量?
  • 不确定你的意思。我正在尝试绘制匹配的零点,即匹配 == 0。

标签: matlab plot


【解决方案1】:

另一种选择:

假设你有一个 ma​​tch() 函数:

function z = match(x,y)

z = (2.*x-1).*y.^(.1) - 2.*x.*y;

end

而你使用 ezplot()

fig = ezplot('匹配', [0 1], [0 1]);

以下代码从图中提取数据并绘制区域:

h1 = findall(fig,'Type','hggroup');
matrix = get(h1,'ContourMatrix');
xData = matrix(1,3:end);
yData = matrix(2,3:end);

area(xData,yData)
xlim([0 1])
ylim([0 1])

关键是 ezplot() 使用了轮廓对象,因此获取数据有点棘手。

【讨论】:

  • 还有一件事:除了填充,我怎样才能孵化该区域?
  • 欢迎您! “孵化区域”是什么意思?
  • 我想让条纹穿过该区域,而不是实心填充。
  • EZplot 的缺点是您无法控制精度(即绘制的点数)。
【解决方案2】:

好的,一个相当低效的解决方案是使用符号工具箱:

syms y
match = @(x) (2.*x-1).*y.^(.1) - 2.*x.*y;

n = 100;
xs = linspace(0,1,n);
yval = zeros(n,2);

for ii=1:n
    x=xs(ii);
    temp = solve(match(x),'y', 'Real', true);
    if length(temp)==1
        yval(ii,1) = temp;
    elseif length(temp)==2
        yval(ii,:) = temp;
    end
end

area(xs,yval(2))

请注意,第一个解决方案始终是“0”。我不知道性能是否是一个问题,但这可能对你有用!

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多