2017-05-27 53 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