#matlab
#matlab
Вопрос:
Если у меня есть координаты всех точек красных линий на рисунке ниже, то как я могу написать код в matlab, чтобы нарисовать такие линии, как на графике ниже, используя эти координаты?
Я имею в виду, поскольку одна строка начинается с верхней оси, возможно ли, например, поместить координаты в матрицу, а затем отобразить ее? В случае, когда все линии идут от левой оси, я могу построить их с помощью матрицы.
посмотрите на это
clc; clear;
format long e
s=0;
lmin=0.8; lmax=2.5;
bmin=1.0; bmax=1.5;
lam=linspace(lmin,lmax,100);
for n=1:length(lam)
increm*emphasized text*ent=0.0001; tolerence=1e-14; xstart=bmax-increment;
x=xstart;
dx=increment;
m=0;
while x > bmin
while dx/x >= tolerence
if sign(fTE(lam(n),x,s))*sign(fTE(lam(n),x-dx,s))<0
dx=dx/2;
else
x=x-dx;
end
end
if abs(fTE(lam(n),x,s)) < 1e-2
m=m 1;
if n>1 amp;amp; m==1 amp;amp; (x-max(r(1,:))) > 1e-4
b=zeros(1,n-1);
r=[b;r];
end
r(m,n)=x;
end
dx=increment;
x=0.999*x;
end
end
switch s
case 0
figure
hold on,plot(lam,r(1,:),'b')
text(1.6,1.98,'TE(0)','FontSize',10),
hold on,plot(lam,r(2,:),'c')
text(1.8,1.89,'TE(2)','FontSize',10),
xlim([lmin,lmax]);ylim([bmin,bmax]),
xlabel('lambda(mum)'),ylabel('beta-bar')
case 1
figure
hold on,plot(lam,r(1,:),'m')
%text(1.4,1.9,'TE(1)','FontSize',10),
hold on,plot(lam,r(2,:),'r')
%text(1.37,1.54,'TE(3)','FontSize',10),
xlim([lmin,lmax]);ylim([bmin,bmax]),
xlabel('lambda(mum)'),ylabel('beta-bar')
end
и fTE — это:
function y=fTE(lambda,betab,s)
n1=2; n2=1.5; n3=1;
z0=120*pi;
d1=1; d2=1; d3=1; a=1;
k0=2*pi/lambda;
ub= sqrt(n1^2-betab^2);
vb= sqrt(n2^2-betab^2);
w= sqrt(betab^2-n3^2);
Ub=k0*ub*d1;
Vb=k0*vb*d2;
W=k0*w*d3;
z1=z0/ub; z1b=z1/z0;
a0b=tan(Vb)/(w*ub) tan(Ub)/(vb*w)-tanh(W)/(vb*ub)-tan(Vb)*tanh(W)*tan(Ub)/w^2;
b0b=tan(Vb)*tan(Ub)/(vb^2*w)-tan(Vb)*tanh(W)/(vb^2*ub) tanh(W)*tan(Ub)/(vb*w^2)- tan(Vb)*tan(Ub)/(w*ub^2)-tan(Vb)*tanh(W)/(w^2*ub) tanh(W)*tan(Ub)/(vb*ub^2);
c0b=tan(Ub)/(vb*w*ub^2) tanh(W)/(vb*w^2*ub) tan(Vb)*tanh(W)*tan(Ub)/(vb^2*ub^2) tan(Vb)/(vb^2*w*ub);
U0= k0*ub*a; m=s;
y=(a0b*z1b^2 c0b) (a0b*z1b^2-c0b)...
*cos(2*U0 m*pi)-b0b*z1b*sin(2*U0 m*pi);
end
Ответ №1:
Возможно, я неправильно понимаю, но вы можете построить несколько строк на подобном графике:
>> x = 1:0.2:3;
>> y = sin(x);
>> y2 = cos(x);
>> [x; y; y2]
ans =
Columns 1 through 9
1.0000 1.2000 1.4000 1.6000 1.8000 2.0000 2.2000 2.4000 2.6000
0.8415 0.9320 0.9854 0.9996 0.9738 0.9093 0.8085 0.6755 0.5155
0.5403 0.3624 0.1700 -0.0292 -0.2272 -0.4161 -0.5885 -0.7374 -0.8569
Columns 10 through 11
2.8000 3.0000
0.3350 0.1411
-0.9422 -0.9900
>> plot(x,y)
>> hold on
>> plot(x,y2)
Комментарии:
1. у меня нет никакой функции, только точки. вы видите, что для каждого x у меня есть два или более y .
2. @Alireza: это тоже просто точки. Мне просто нужно было иметь некоторые образцы данных.
3. @Alireza: Я добавил значения, которые используются моим графиком. график также называется 2D-линейным графиком , он по умолчанию соединяет точки линиями.
4. только одно уравнение содержит более одной строки, и это не функция. как получить (построить отдельно) каждую строку?
5. другими словами, как построить график «fTE» без использования команды «ezplot»?