作业帮 > 综合 > 作业

matlab解方程+画图

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/05/15 06:35:32
matlab解方程+画图

最近在学习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.
方便的话加我也可以,多谢了.~
matlab解方程+画图
问题出在符号量和数值量的的关系上.建议修改syms  kx ky k3x k5x k2y k4yS=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))');  Skx=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。
再答: 数学方面的计算你多对对公式,没错就没错