2017-04-10 27 views
0

代碼爲什麼這個Matlab代碼中出現空洞?

clear;clc 
T=800; 
Pc=48.45; 
Tc=375; 
w=0.153; 
R=82.06; 
a=((0.45724)*(R^2)*(Tc^2))/Pc; 
b=((0.07780)*R*Tc)/Pc; 
B=(0.37464+(1.54226*w)-(0.26992*(w^2))); 
Tr=T/Tc; 
s=(1+(B*(1-sqrt(Tr))))^2; 
for Vm=90:5:1000 
    P=((R*T)/(Vm-b))-((a*s)/((Vm)^2+(2*b*Vm)-b^2)); 
end 
plot(Vm, P) 

問題

我每次運行此代碼,它出來用兩軸,如下圖所示的圖像只是數字完全空的情節。我檢查了幾次代碼,但仍然找不到問題,特別是因爲代碼運行時沒有錯誤。我應該得到這個結果的結果是隨着Vm值增加P的行爲。

The result of the code

有關問題

源信息下面是原來的問題,如果你有興趣(練習1)。

The original question (Exercise 1)

回答

1

嘗試顯示您的變量。你會看到Vm不是一個數組,而是一個單值標量。當你循環使用Vm時,它一次只需要一個值;它不會構建數組。

MATLAB不能同時做多個值計算的,因此,如果您定義Vm是一個數組落我猜它會工作循環...

嘗試是這樣的(更換爲 - 回覆這些行):

Vm = 90:5:1000 
P=((R*T)./(Vm-b))-((a*s)./((Vm).^2+(2*b.*Vm)-b^2)); 

P然後將是一個數組。注意我們使用.*而不是*乘以數組Vm時,因爲我們想要做元素方式乘法,而不是矩陣乘法。類似地,我們使用./而不是/.^而不是^

編輯:如果你需要使用一個for循環,那麼你可以同時定義PVm作爲陣列,然後將每個元件上單獨的循環內工作:

Vm = 90:5:1000; 
P = NaN(size(Vm)); 
for i=1:numel(Vm) 
    P(i)=((R*T)./(Vm(i)-b))-((a*s)./((Vm(i)).^2+(2*b.*Vm(i))-b^2)); 
end 

由於上述是在標量值上工作,使用.** ...

+0

沒關係我試過了,但是我仍然得到相同的空白圖。 – Amsi

+1

嗯,好吧,剛剛登錄到我的MATLAB機器,並試用它,它對我來說工作正常,我得到一個很好的情節,看起來有點像指數衰減?再試一次?爲了清楚起見,你用這兩行代替for循環。你不要做for循環。 – Justin

+0

哦,我很抱歉,我重新讀你的答案,並注意到你說消除for循環。它可以在沒有問題的情況下使用for-loop,但是,在原始問題中,我需要爲此代碼使用for-loop。你認爲有什麼辦法可以通過使用for-loop來解決這個問題嗎? – Amsi

相關問題