load ('e1.mat')
syms y
d=1.8;%input('请输入芯层厚度:');
for i=0:N
q=i;
n=teneff1{i+1,1}
r1=sqrt(n^2-n1^2)*k0;
r2=sqrt(n2^2-n^2)*k0;
r3=sqrt(n^2-n3^2)*k0;
a=-atan(r3/r2)+q*pi;
if y>d
EY1=cos(r2*d+a)*exp(-r1*(y-d))
else if 0<y<d
EY1=cos(r2*y+a);
else y<0
EY1=cos(a)*exp(r3*y)
end
end
end
这个程序是分段函数,运行时d有问题:
无法从 sym 转换为 logical。
出错 EYy (line 12)
if y>d
问下改如何改正,d是要输入的不确定值。顺便问下这个是正负无穷的函数,分段函数写的对吗?
input前面加%是因为本来每次都要输入数值的,但现在程序不正确,要不停运行,一次次输入太费事,就先输入个确定的值。程序的错误好像是在运行时判断y>d时,不能识别d是个确定的数值,当成个字母了。错误信息如下
无法从 sym 转换为 logical。
出错 EYy1 (line 11)
if y > d
其中EYy1是我保存的文件的名字。
那是y的问题,不是d的问题,你把y设成字符变量了,你应该给它个值吧
追问y是方程的自变量,d是要输入的常数
追答你不给y赋值,这就是拿字符和数字比较,肯定会出错啊
追问那我该怎么改,方程是在正负无穷成立的
追答我不清楚你这个程序的目的是什么,y代表的是什么意思
追问脊型光波导y方向的电场分布,y代表距离,离自己确定的坐标零点的距离。
追答你是想输出表达式么?这样就不用判断
追问是想输出表达式,但最终要输入确定的d值,计算出具体的表达式。而它三段上的表达式不同,