我一直试图在matlab中绘制这个表达式,但我一直收到警告: Rank deficient,rank = 0,tol = NaN 错误消息。
t = 1:1:14;
n1 = 3.43-2.30i;
lamda = 1550*1e-9;
R = abs((1i*((1/n1)-n1)*sin(2*pi*n1*t/lamda))/(2*cos(2*pi*n1*t) + 1i*(1/n1) +n1)*sin(2*pi*n1*t/lamda)))^2;
figure
plot(t,R)
xlabel('Number of graphene layers')
ylabel('Reflectivity')
我正试图得到类似于这个情节的东西。请任何人帮我解决这个问题吗?对不起,我还是MATLAB的新手。
谢谢
答案 0 :(得分:0)
你得到的确切错误是由于两件事
sin(ix)
呈指数增长的事实,因此您传递给sin
的参数将返回Inf
(cos()
也将如此)。当应用于向量时,x / y
运算符被MATLAB解释为尝试求解系统A
中的A * x = y
。
将/
替换为./
以获取向量的元素分割,您在R
的表达式中将需要这些分割。
同样,使用.^
来获取元素指数运算符。
有关于'array'和'matrix'运算符之间差异的文档:
https://au.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html
要计算公式,需要进行一些重新排列,以避免计算最终相互抵消的非常大的项。将分数的顶部和底部乘以sin(2*pi*n1*t/lambda)
,您会发现:
th = 2*pi*n1*t/lambda;
R = abs((n1 - 1/n1) ./ (2*cot(th) + 1i*(n1 + 1/n1))).^2;
根据你的输入做了诀窍。但是,这些数字与您提供的地图不符。
R =
Columns 1 through 13:
0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933
Column 14:
0.44933
我建议你
R_1