matlab解方程+画图
基本思路就是求特征方程,然后利用方程的解来画图,现在只是做最简单的,有些问题想问下。
代码如下,有点凌乱。
特征方程有六个,含有六个参数。其中先令m=1,n=0。k0=2*pi/lamda=2*pi/1.55;n1=1.4949;n2=n4=n3=n5=1.465;a=b=6;
问题如下:
1,看特征方程,kx和ky的方程很接近,基本就是相同的,理论上两个的解应该也差不多,但是matlab解出来的结果差距很大,不知道为什么。
2,利用前面求解的结果做图,matlab老是提示说surface使用错误,矩阵维数不对,但是我又不知道是什么问题,如果我把结果单独另外赋值给那几个参数就不会报错。
syms kx ky k3x k5x k2y k4y
S=solve('k3x^2=(2*pi/1.55)^2*(1.4949^2-1.465^2)-kx^2',...
'k5x^2=(2*pi/1.55)^2*(1.4949^2-1.465^2)-kx^2',...
'kx*6=pi+atan(k3x/kx)+atan(k5x/kx)',...
'k2y^2=(2*pi/1.55)^2*(1.4949^2-1.465^2)-ky^2',...
'k4y^2=(2*pi/1.55)^2*(1.4949^2-1.465^2)-ky^2',...
'ky*6=pi+atan((1.4949^2*k2y)/(1.465^2*ky))+atan((1.4949^2*k4y)/(1.465^2*ky))');
S
kx=vpa(S.kx(1),2)
ky=vpa(S.ky(1),2)
k3x=vpa(S.k3x(1),2)
k5x=vpa(S.k5x(1),2)
k2y=vpa(S.k2y(1),2)
k4y=vpa(S.k4y(1),2)
syms a b x y z1 z2 Z
a=6;
b=6;
%因为连起来老是报错,所以就尝试用这句话来试验你后面的有么有问题。kx=0.8;ky=0.8;k3x=1.2;k5x=1.2;k2y=0.89;k4y=0.89;
x=linspace(-9,9,300);
y=linspace(-10,10,300);
[xx,yy]=meshgrid(x,y);
z1=cos(kx*a/2+pi/2)*exp(k3x*(xx+a/2)).*(xx<=-a/2)+cos(kx*xx-pi/2).*(xx>=-a/2&xx<=a/2)+cos(kx*a/2-pi/2)*exp(-k5x*(xx-a/2)).*(xx>=a/2);
z2=cos(ky*b/2+pi/2)*exp(k2y*(yy+b/2)).*(yy<=-b/2)+cos(ky*yy-pi/2).*(yy>=-b/2&yy<=b/2)+cos(ky*b/2-pi/2)*exp(-k4y*(yy-b/2)).*(yy>=b/2);
Z=z1.*z2;
figure;
surface(xx,yy,Z);
我的马化腾:461770984。
方便的话加我也可以,多谢了。~ 展开
问题出在符号量和数值量的的关系上。
建议修改
syms kx ky k3x k5x k2y k4y
S=solve('k3x^2=(2*pi/1.55)^2*(1.4949^2-1.465^2)-kx^2',...
'k5x^2=(2*pi/1.55)^2*(1.4949^2-1.465^2)-kx^2',...
'kx*6=pi+atan(k3x/kx)+atan(k5x/kx)',...
'k2y^2=(2*pi/1.55)^2*(1.4949^2-1.465^2)-ky^2',...
'k4y^2=(2*pi/1.55)^2*(1.4949^2-1.465^2)-ky^2',...
'ky*6=pi+atan((1.4949^2*k2y)/(1.465^2*ky))+atan((1.4949^2*k4y)/(1.465^2*ky))');
S
kx=double(vpa(S.kx(1),2))
ky=double(vpa(S.ky(1),2))
k3x=double(vpa(S.k3x(1),2))
k5x=double(vpa(S.k5x(1),2))
k2y=double(vpa(S.k2y(1),2))
k4y=double(vpa(S.k4y(1),2))
a=6;
b=6;
x=linspace(-9,9,300);
y=linspace(-10,10,300);
[xx,yy]=meshgrid(x,y);
z1=cos(kx*a/2+pi/2)*exp(k3x*(xx+a/2)).*(xx<=-a/2)+cos(kx*xx-pi/2).*(xx>=-a/2&xx<=a/2)+cos(kx*a/2-pi/2)*exp(-k5x*(xx-a/2)).*(xx>=a/2);
z2=cos(ky*b/2+pi/2)*exp(k2y*(yy+b/2)).*(yy<=-b/2)+cos(ky*yy-pi/2).*(yy>=-b/2&yy<=b/2)+cos(ky*b/2-pi/2)*exp(-k4y*(yy-b/2)).*(yy>=b/2);
Z=z1.*z2;
figure;
surface(xx,yy,Z);
嗯嗯,第二个问题搞定了,多谢了。
不知道第一个问题你能帮忙看下不,是不是matlab求解方程组会出现问题呢,还是我方程编写的有问题捏。
因为方程都差不多,解出来的结果却差别很大。我是说kx和ky。
数学方面的计算你多对对公式,没错就没错