发布网友 发布时间:2022-05-09 14:05
共3个回答
热心网友 时间:2024-02-01 10:30
可以了,关键是求交点,对于你这个问题,交点就两个,比较好求,下面是我自己找的三个函数的例子
clc;clear;
t=linspace(-600,600,600);
T=400;omega=2*pi/T;
y1=sin(omega*t-0*pi/3);
y2=sin(omega*t-2*pi/3);
y3=sin(omega*t-4*pi/3);
%
temp=y1(find(y1>=y2));
cross(1)=temp(1);
temp=y2(find(y2<=y3));
cross(2)=temp(1);%
sort(cross);%排序
figure,hold on
%%%%%%%%%%%%第一条
y11n=find(y1<cross(1) );
temp=find(diff(y11n)>1);
plot(t(y11n(1):y11n(temp(1))),y1(y11n(1):y11n(temp(1))),'k--')
for i=1:length(temp)-1
plot(t( y11n(temp(i)+1):y11n(temp(i+1)) ),y1(y11n(temp(i)+1):y11n(temp(i+1)) ),'k--')
end
plot(t( y11n(temp(end)+1):y11n(end) ),y1(y11n(temp(end)+1):y11n(end )),'k--')
%%%%%
y11n=find(y1>cross(2) );
temp=find(diff(y11n)>1);
plot(t(y11n(1):y11n(temp(1))),y1(y11n(1):y11n(temp(1))),'k:');
for i=1:length(temp)-1
plot(t( y11n(temp(i)+1):y11n(temp(i+1)) ),y1(y11n(temp(i)+1):y11n(temp(i+1)) ),'k:')
end
plot(t( y11n(temp(end)+1):y11n(end) ),y1(y11n(temp(end)+1):y11n(end )),'k:')
%%%%%%%
y11n=find(y1<=cross(2)&y1>=cross(1) );
temp=find(diff(y11n)>1);
plot(t(y11n(1):y11n(temp(1))),y1(y11n(1):y11n(temp(1))),'k-');
for i=1:length(temp)-1
plot(t( y11n(temp(i)+1):y11n(temp(i+1)) ),y1(y11n(temp(i)+1):y11n(temp(i+1)) ),'k-')
end
plot(t( y11n(temp(end)+1):y11n(end) ),y1(y11n(temp(end)+1):y11n(end )),'k-')
%%%%%%%%%%%%%%%%%%%第二条
y11n=find(y2<cross(1) );
temp=find(diff(y11n)>1);
plot(t(y11n(1):y11n(temp(1))),y2(y11n(1):y11n(temp(1))),'r--')
for i=1:length(temp)-1
plot(t( y11n(temp(i)+1):y11n(temp(i+1)) ),y2(y11n(temp(i)+1):y11n(temp(i+1)) ),'r--')
end
plot(t( y11n(temp(end)+1):y11n(end) ),y2(y11n(temp(end)+1):y11n(end )),'r--')
%%%%%
y11n=find(y2>cross(2) );
temp=find(diff(y11n)>1);
plot(t(y11n(1):y11n(temp(1))),y2(y11n(1):y11n(temp(1))),'r:');
for i=1:length(temp)-1
plot(t( y11n(temp(i)+1):y11n(temp(i+1)) ),y2(y11n(temp(i)+1):y11n(temp(i+1)) ),'r:')
end
plot(t( y11n(temp(end)+1):y11n(end) ),y2(y11n(temp(end)+1):y11n(end )),'r:')
%%%%%%%
y11n=find(y2<=cross(2)&y2>=cross(1) );
temp=find(diff(y11n)>1);
plot(t(y11n(1):y11n(temp(1))),y2(y11n(1):y11n(temp(1))),'r-');
for i=1:length(temp)-1
plot(t( y11n(temp(i)+1):y11n(temp(i+1)) ),y2(y11n(temp(i)+1):y11n(temp(i+1)) ),'r-')
end
plot(t( y11n(temp(end)+1):y11n(end) ),y2(y11n(temp(end)+1):y11n(end )),'r-')
%%%%%%%%%%%%%%%%%%%第三条
y11n=find(y3<cross(1) );
temp=find(diff(y11n)>1);
plot(t(y11n(1):y11n(temp(1))),y3(y11n(1):y11n(temp(1))),'b--')
for i=1:length(temp)-1
plot(t( y11n(temp(i)+1):y11n(temp(i+1)) ),y3(y11n(temp(i)+1):y11n(temp(i+1)) ),'b--')
end
plot(t( y11n(temp(end)+1):y11n(end) ),y3(y11n(temp(end)+1):y11n(end )),'b--')
%%%%%
y11n=find(y3>cross(2) );
temp=find(diff(y11n)>1);
plot(t(y11n(1):y11n(temp(1))),y3(y11n(1):y11n(temp(1))),'b:');
for i=1:length(temp)-1
plot(t( y11n(temp(i)+1):y11n(temp(i+1)) ),y3(y11n(temp(i)+1):y11n(temp(i+1)) ),'b:')
end
plot(t( y11n(temp(end)+1):y11n(end) ),y3(y11n(temp(end)+1):y11n(end )),'b:')
%%%%%%%
y11n=find(y3<=cross(2)&y3>=cross(1) );
temp=find(diff(y11n)>1);
plot(t(y11n(1):y11n(temp(1))),y3(y11n(1):y11n(temp(1))),'b-');
for i=1:length(temp)-1
plot(t( y11n(temp(i)+1):y11n(temp(i+1)) ),y3(y11n(temp(i)+1):y11n(temp(i+1)) ),'b-')
end
plot(t( y11n(temp(end)+1):y11n(end) ),y3(y11n(temp(end)+1):y11n(end )),'b-')
%%%%%%%%%%%%%%%%%%%%
plot([-600,600],[cross(1),cross(1)],'k',[-600,600],[cross(2),cross(2)],'k')
axis([-600,600,-1,1])
追问牛!小弟我是个初学者。追答你看我这个三个图,三条曲线图的起始位置是需要有个大小判断的,我这里没有,所以你这个要判断一下。跟我的一致。。
具体细节不跟你说了,一时半会说不清楚,你要想用我的程序,你就这样改:
首先th2=-4*pi:pi/18:4*pi;这一句中间的步长要弄的非常小,不然曲线出现缺口了,改成:
th2=-4*pi:pi/360:4*pi;
根据你给我发的结果,
y1=w2;y2=w3;y3=w1;
然后下面接着我的程序,从temp开始复制到你的程序后面就行了
后面要把轴范围改一下
具体内容看我发给你的邮件
热心网友 时间:2024-02-01 10:30
(matlab)plot画图的颜色线型参考资料:http://blog.sina.com.cn/s/blog_4d8716e401000apg.html
热心网友 时间:2024-02-01 10:30
matlab里面用plot画的图每条曲线的线型,颜色都可以变,例如plot(x,y,'r','*');代表红色和*线型。