MATLAB分别用不同线型和颜色绘制曲线 和 ,标记两曲线交叉点,给出每条曲线的图注。怎么标注两条曲线交点

如题所述

第1个回答  2013-11-10
% 绘制两离散曲线的交点

% 注意:

% 1. 这里的“交点”指的是离散点连线绘出的图形的交点,而非函数或者方程理论分析上的交点,

% 因此,这个程序不能作为求根来用。

% 2. 要求两曲线的离散点的个数一样。

% 3. 两个曲线出现参数方程的话,大多数情况正常。但是经测试发现,对于某些非常特殊的情况会出现bug,

% 除非调用ezplot的数据(xdata,ydata)。

%

% by kastin @Mar 21, 2012

clear;

debug=false; %关闭显示求交点过程

% 曲线1

x=0:pi/18:2*pi;

y=cos(2*x).*exp(sin(x));

% 曲线2

[x1 N]=sort(x); %此处对于C1参数方程,C2为显式函数;或者均为参数方程时候有用

% 下面几句代码在本个案下没有什么特殊作用,但是当出现参数方程的时候,下面的方法改动一下就会有用。

y1=sin(x1).^2+cos(x1); %用于作图

x2=x;

y2=sin(x).^2+cos(x); %用于寻点

h=plot(x1,y1,'b',x,y,'c');

y(abs(y)<=eps)=0; y2(abs(y2)<=eps)=0;%对于三角函数关于零点的部分处理,但是发现sin(k*pi)不一定全在eps范围内

cy=y2-y; %作差

%符号记录

pos=cy>0;

neg=cy<=0;

%确定变号位置

fro=diff(pos)~=0; %变号的前导位置

rel=diff(neg)~=0; %变号的尾巴位置

zpf=find(fro==1); %记录索引

zpr=find(rel==1)+1; %记录索引

zpfr=[zpf; zpr];

hold on

% 观看求交点过程

if debug, hp=plot(x(zpfr),y(zpfr),'r.-',x2(zpfr),y2(zpfr),'g.-'); end

%线性求交

x0=(x(zpr).*(y2(zpf)-y(zpf))-x(zpf).*(y2(zpr)-y(zpr)))./(y(zpr)+y2(zpf)-y(zpf)-y2(zpr));

y0=y(zpf)+(x0-x(zpf)).*(y(zpr)-y(zpf))./(x(zpr)-x(zpf));

if any(isnan(y0)), y0=y2(zpf); end

%加入已经判断为零的位置

x0=[x(abs(cy)<=eps) x0].';

y0=[y(abs(cy)<=eps) y0].';

hc=plot(x0,y0,'k.'); %绘制交点

if debug, legend([h;hc;hp(1);hp(end)],'C1','C2','交点','微线段1','微线段2',0); end

legend([h;hc],'C1','C2','交点',0)

xlabel('x'), ylabel('y'), zlabel('z');

title('平面曲线交点')

axis equal

hold off

disp('交点坐标[x,y]为:')

disp(unique([x0,y0],'rows')) %排除重复的点
复制代码
相似回答