在MATLAB中具有秩缺陷矩阵警告:秩不足,秩= 0,tol = NaN

时间:2016-10-27 15:09:39

标签: matlab octave matlab-figure

我一直试图在matlab中绘制这个表达式,但我一直收到警告: Rank deficient,rank = 0,tol = NaN 错误消息。

Mathematical model I'm working on

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的新手。

谢谢

Plot I'm trying to achieve

1 个答案:

答案 0 :(得分:0)

你得到的确切错误是由于两件事

  1. 错误使用矩阵运算而非元素'数组'运算
  2. sin(ix)呈指数增长的事实,因此您传递给sin的参数将返回Infcos()也将如此)。
  3. 元素操作

    当应用于向量时,x / y运算符被MATLAB解释为尝试求解系统A中的A * x = y

    /替换为./以获取向量的元素分割,您在R的表达式中将需要这些分割。

    同样,使用.^来获取元素指数运算符。

    有关于'array'和'matrix'运算符之间差异的文档:

    https://au.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html

    sin(ix)

    的指数增长

    要计算公式,需要进行一些重新排列,以避免计算最终相互抵消的非常大的项。将分数的顶部和底部乘以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
    • 指定的公式