记录
Matlab绘图
使用fimplict绘制,y轴对数坐标,fill填充颜色
例如,绘制三条曲线
f1:
y
=
18
−
x
.
y=18-x.
y=18−x.
f2:
y
=
2
1
/
2
x
2
π
−
arcsin
2
(
0.8
)
.
y= \frac{2^{1/2} x^{2}}{\pi - \arcsin^{2}(0.8)}.
y=π−arcsin2(0.8)21/2x2.
f3:
y
=
15
(
x
−
18
)
x
−
1
/
2
.
y=15(x-18)x^{-1/2}.
y=15(x−18)x−1/2.
clc;
clear;
close all;
syms x y
% fimplicit绘制隐函数
% f1,红线
f1 = (18-x)-y;
h1 = fimplicit(f1,[-100 100 0.01 10^5],'r');
hold on;
% f2,黑线
f2 = 2^(1/2)*x^(2)/(pi-asin(0.8)^(2))-y;
% 寻找f1,f2交点,绘制f2
s = solve(f1,f2,x,y);
xk=double(s.x(1));
yk=double(s.y(1));
h2=fimplicit(f2,[xk 100 0.01 10^5],'k');
% f3,蓝线
f3 = 15*(x-18)*x^(-1/2)-y;
h3 = fimplicit(f3,[18 100 0.01 10^5],'b');
% 虚线标记f1,f2交点
h4 = fimplicit(x-xk,[-100,100,0.01,yk],'k--');
% 设置格式
set(gca,'yscale','log');
set(gca,'yLim',[0.01 10^5]);
set(gca,'yTicklabel',{'0.01','0.1','1','10','10^2','10^3','10^4','10^5'});
set(gca,'xTick',[-100,-50,0,18,50,100]);
xlabel('x');
ylabel('y');
x1 = h1.XData;
y1 = h1.YData;
x2 = h2.XData;
y2 = h2.YData;
x3 = h3.XData;
y3 = h3.YData;
% 将x1,x2,x3都从小到大排列好,y值也对应
x1 = fliplr(x1);
x2 = fliplr(x2);
x3 = fliplr(x3);
y1 = fliplr(y1);
y2 = fliplr(y2);
y3 = fliplr(y3);
% 根据填充区域关键点确定范围
idx1 = find(x1 >= -100 & x1 < xk);
idx2 = find(x1 >= xk & x1 < 18);
idx3 = find(x2 >= xk & x2 < 100);
idx4 = find(x3 >= 18 & x3 < 100);
s1 = x1(idx1);
s2 = x1(idx2);
s3 = x2(idx3);
s4 = x3(idx4);
t1 = y1(idx1);
t2 = y1(idx2);
t3 = y2(idx3);
t4 = y3(idx4);
% 填充颜色需要是一个闭环
% R1:填充绿色
xFill_1 = [s1, s3, 100, -100];
yFill_1 = [t1, t3, 1e5, 1e5];
F1=fill(xFill_1, yFill_1, 'g');
% R2:填充蓝色
xFill_2 = [s2, s4, fliplr(s3)];
yFill_2 = [t2, t4, fliplr(t3)];
F2=fill(xFill_2, yFill_2, 'b');
% 设置透明度
set(F1,'edgealpha',0,'facealpha',0.3);
set(F2,'edgealpha',0,'facealpha',0.3);
% 图例
legend({'f1','f2','f3'},'Location','southwest');
text(-10,5000,'R1');
text(50,500,'R2');
hold off;