我有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)
但情节不正确。有什么建议吗?
答案 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]);
以下代码从图中提取数据并绘制区域:
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()使用轮廓对象,因此获取数据会更棘手。
答案 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”。我不知道性能是否是一个问题,但这可能对您有用!