2017-05-27 56 views
0

你能告诉我下面的代码有什么问题吗?
为什么我在计算n时在行中得到矩阵尺寸误差?

function [n]=calculate_n(p,delta) 
    e = 1.6*power(10,-19); 
    k = 1.38*power(10,-23); 
    T = 298; 

    co = 3.25*power(10,13)*e*power(10,4); 

    er=12.5; 
    eo=1.0; 
    Nv=3*power(10,13); 

    us = log((p*e)/sqrt(2*k*T*er*eo*Nv))*2*k*T; 
    tmp = delta+(e*e*p)/co+us; 
    n = 1/(exp((tmp))+1); 
end 


我得到矩阵尺寸误差在计算ñ。请帮帮我。

来电:

e = 1.6*power(10,-19); 
x = logspace(13,18); 
y=calculate_n(x,0.2*e); 
semilogx(x,y,'-s'); 
grid on; 
+0

p或delta向量?对于p = 0.5和delta = 2,它对我来说运行得很好...... –

+0

我添加了调用者代码。 –

+0

只是用'n = 1 ./(exp(tmp)+1)替换'n = 1 /(exp((tmp))+ 1);' - 但要注意,'tmp'对于这些值很小'exp(tmp)'将始终为1.另外,在tmp周围有一个多余的支架,你可能想检查一下,如果你把它们正确地放在那里。 –

回答

1

只是n = 1./(exp(tmp)+1);取代n = 1/(exp((tmp))+1);。但请注意,tmp对于这些值非常小,以至于exp(tmp)将始终为1.此外,在tmp附近还有一个过多的支架,您可能需要检查是否将它们正确放入。

编辑: 的原因是A/B试图求解线性方程组A*x = B的系统x这是不是你想要的。它抛出一个错误,因为它要求两个变量具有相同的列数。 A./B执行元素明智的矩阵分裂,这是你想要的。但是,如果AB是单数A/B = A./B。有关更多信息,请参阅documentation

+1

目前你提供了一个解决方案,但没有解释。恕我直言,好的答案应该教某事。短暂解释'/'和'。/'之间的区别以及为什么'/'会导致矩阵维度错误? (免责声明:我几乎不知道MATLAB。) – honk

+0

@honk你是对的,不是我最好的工作。要编辑它 - 或正在编辑被接受的答案,非常皱眉? –

+0

如果你不会完全改变解决方案,那么我没有看到任何问题。改善你的帖子总是值得欢迎的! – honk