请问如何在下面的Matlab程序中做插值处理,得到图中红线和蓝线交点位置的坐标呢 请熟悉的Matlab高手指点

clear all; clc;
n1=1.50; % core refractive index
n2=1.48; % clading refractive index
a1=4.15; % core radius=4.15microm
a2=62.5; % cladding radius=62.5microm
nama=1.55; % imput wavelength=1.55microm
pfcri=sqrt(n1^2-n2^2);
V1=2*pi/nama;
V=V1*a1*pfcri;
ncoeff=(n2:0.001:n1)';
b=(ncoeff.^2-n2^2)./(pfcri^2);
x=V.*sqrt(1-b);
x1=V.*sqrt(b);
y_0=besselj(0,x); %零阶
y_1=besselj(1,x); %一阶
y_01=besselk(0,x1); %零阶
y_11=besselk(1,x1); %一阶
yl=x.*y_0./y_1;
yr=x1.*y_01./y_11;
axis([n2,n1,-50,50]);
plot(ncoeff,yl,'r',ncoeff,yr,'b');grid on;
xlabel('core effective refractive index');
% 寻找数值上的交点
data0=abs(yl-yr);
[~,ind]=min(data0)
x=ind
y=yl(x)

这个可以调用我的函数[x,y]=crosspt(x1,y1,x2,y2)

这里x1,y1,x2,y2分别是两条曲线的横纵坐标值。得到的x,y分别是交点坐标。

你的例子:

clear; clc;
n1=1.50; % core refractive index
n2=1.48; % clading refractive index
a1=4.15; % core radius=4.15microm
a2=62.5; % cladding radius=62.5microm
nama=1.55; % imput wavelength=1.55microm
pfcri=sqrt(n1^2-n2^2); 
V1=2*pi/nama;
V=V1*a1*pfcri;
ncoeff=(n2:0.001:n1)';
b=(ncoeff.^2-n2^2)./(pfcri^2);
x=V.*sqrt(1-b);
x1=V.*sqrt(b);
y_0=besselj(0,x); %零阶
y_1=besselj(1,x); %一阶 
y_01=besselk(0,x1); %零阶
y_11=besselk(1,x1); %一阶 
yl=x.*y_0./y_1;
yr=x1.*y_01./y_11;
axis([n2,n1,-50,50]);
plot(ncoeff,yl,'r',ncoeff,yr,'b');grid on;
xlabel('core effective refractive index');
% å¯»æ‰¾æ•°å€¼ä¸Šçš„交点
[x,y]=crosspt(ncoeff,yl,ncoeff,yr);
text(x,y,'o','HorizontalAlignment','center','color','k')
text(x,y,[' ','(',num2str(x),',',num2str(y),')'],'color','k')

最后得到的结果:



当然也可以求出多个交点,下面给出我的例子:

clc
clear
x=0:0.01:5*pi;
y1=8*sin(x);
y2=6*cos(x);
plot(x,y1,'r--',x,y2,'b-.')
[xx,yy]=crosspt(x,y1,x,y2);
for i=1:length(xx)
    text(xx(i),yy(i),'o','HorizontalAlignment','center','color','k')
    text(xx(i),yy(i),[' ','(',num2str(xx(i)),',',num2str(yy(i)),')'],'color','k')
end

五个点都求出来了。

记住把我的crosspt.p文件放在你的当前文件夹里面

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-09-02
红线存在无穷间断点,画图的时候显示向下的斜线,把两段曲线连起来,而兰线通过这个区间,看起来是相交,实际上无交点。
第2个回答  2016-09-02
两条线没有交叉啊,红色最高点最低点相邻的
相似回答