matlab的用字母赋值分段函数

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是要输入的不确定值。顺便问下这个是正负无穷的函数,分段函数写的对吗?

是提示EYy么?但这段程序里没有EYy。
向从键盘输入的话,你的input前面加%做什么?这句直接写成d=input('请输入芯层厚度:\n');就行了,\n是为了换行,看着好看,无其他作用。

你要写分段函数的话,这样就写得太麻烦了,不像编程的人写的。三个判断应该写成
if y>d
...
else if y>0
...
else ...追问

input前面加%是因为本来每次都要输入数值的,但现在程序不正确,要不停运行,一次次输入太费事,就先输入个确定的值。程序的错误好像是在运行时判断y>d时,不能识别d是个确定的数值,当成个字母了。错误信息如下
无法从 sym 转换为 logical。

出错 EYy1 (line 11)
if y > d
其中EYy1是我保存的文件的名字。

追答

那是y的问题,不是d的问题,你把y设成字符变量了,你应该给它个值吧

追问

y是方程的自变量,d是要输入的常数

追答

你不给y赋值,这就是拿字符和数字比较,肯定会出错啊

追问

那我该怎么改,方程是在正负无穷成立的

追答

我不清楚你这个程序的目的是什么,y代表的是什么意思

追问

脊型光波导y方向的电场分布,y代表距离,离自己确定的坐标零点的距离。

追答

你是想输出表达式么?这样就不用判断

追问

是想输出表达式,但最终要输入确定的d值,计算出具体的表达式。而它三段上的表达式不同,

温馨提示:答案为网友推荐,仅供参考
相似回答