matlab解方程+画图

最近在学习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。
方便的话加我也可以,多谢了。~
展开
 我来答
yuxiapollo
推荐于2017-12-15 · TA获得超过323个赞
知道小有建树答主
回答量:143
采纳率:50%
帮助的人:135万
展开全部

问题出在符号量和数值量的的关系上。

建议修改

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。
追答
数学方面的计算你多对对公式,没错就没错
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式