具有2个变量的函数曲线下的阴影区域

时间:2014-07-18 09:51:40

标签: matlab plot

我有2个变量的函数:

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

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

enter image description here

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

area(x,y)

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

2 个答案:

答案 0 :(得分:3)

另一种选择:

假设您有匹配()功能:

function z = match(x,y)

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

end

您使用 ezplot()

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

enter image description here

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

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])

enter image description here

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

答案 1 :(得分:1)

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

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”。我不知道性能是否是一个问题,但这可能对您有用!