2013-02-18 12 views
0

早上So'ers! 所以我又被卡住了...... 我正在嘗試使用不同的材料來確定一個圓柱體的最佳壁厚。我有一個電流管(鐵),我知道剛度('k')。 我試圖用matlab通過不同的「d」進行迭代(內部直徑)的值和停止時的剛度值,K,是相同的(或類似)的き具有用於鐵管(如果它確實收斂!) 我試過while循環,但有些東西是不正確的!任何建議表示讚賞, 歡呼改變缸壁厚度以找到其他材料的匹配剛度?

clc 
Efe = 211e9;  % Youngs modulus for iron [GPa] 
Eal = 69e9;  % Youngs modulus for Aluminium [GPa] 
Esteel = 200e9; % Youngs modulus for steel [GPa] 

D = 53   % Outer diameter [mm] 
dFe = 36   % Inner diameter [mm] 
dguess = 36 
disp('Second moment of area for Iron cylinder: ') 
IFe = pi*(D.^4-dFe.^4)/64 
    I = pi*(D.^4-dguess.^4)/64 
disp('Stiffness for Iron: ') 
Stiffness_Fe = Efe/IFe 
disp('Stiffness for Aluminium: ') 
Stiffness_Al = Eal/I 

d=D; 
while Stiffness_Fe>Stiffness_Al 
    d=d-1 
    I = pi*(D.^4-d.^4)/64; 
    Stiffness_Al=Stiffness_Fe 
     if d<0; 
      disp('Gone negative, step out') 
     break; 
    end 
end 

d 

我是希望在for循環的版本會工作,但似乎我不能在這個循環中正確使用Stiffness_Al變量....我大概可以得到這個在電子表格完成和篩選符合「K」的值,但它的使用MATLAB通常更有趣

+1

你提到「東西是不正確」。請詳細說明一下,因爲這不會繼續下去。 – 2013-02-18 14:17:26

+0

@Dennis Jaheruddin'不對的東西'似乎是我的大腦!我甚至不需要循環。無論如何感謝您的興趣! – richyo1000 2013-02-18 15:05:09

回答

3

你的循環邏輯是靠不住的(除非我有基本的東西奮鬥像這樣的!);

while Stiffness_Fe>Stiffness_Al 
    d=d-1 
    I = pi*(D.^4-d.^4)/64; 
    Stiffness_Al=Stiffness_Fe 
     if d<0; 
      disp('Gone negative, step out') 
     break; 
    end 
end 

循環意願,寫,一直持續到Stiffness_Fe超過Stiffness_Al。當您的代碼第一次遇到循環時,此聲明爲真。沿着你的三條語句設置Stiffness_Al等於Stiffness_Fe。在你的循環中沒有其他地方的任何一個值被修改,所以在第一次迭代結束時,當再次評估表達式Stiffness_Fe>Stiffness_Al時,它將爲假,並且控制將傳遞給循環後的語句。

編寫一個while循環的方式非常奇怪,(a)它總是運行一次,(b)它永遠不會運行兩次。就循環而言,它不是一個循環。

我猜測你要做的是計算一系列不同內徑的鋁管的剛度,並找出內徑最小,剛度與鐵管相同的剛性管。我認爲,我將:

  1. 創建內徑的向量,從某個最小值可達1mm小於外徑,例如inside_diameters = 12:52
  2. 計算管的剛度對於向量中的每個元素,像stiffnesses = Eal/(pi*(D.^4-inside_diameters.^4)/64)
  3. 查找stiffnesses超過了鐵管的剛度的最小值。

如果你想覆蓋更廣泛的管厚度,你可以試試12:0.1:52。除非你想要或需要更精確的圖形,否則Matlab會在你點擊返回鍵時產生你想要的數字。

是的,它可能是更優雅,以增加厚度一步一步,當你發現你要尋找的值從迴路斷線,但我建議你擔心買你的代碼的工作,如果你有時間和傾向,打磨它。

+0

高性能標記,歡呼聲!你已經正確地解釋了我的問題 - 我想根據一系列內徑計算剛度。我想你已經幫助我設定了一個內徑範圍 - 我傾向於使用循環(不知道爲什麼!),實際上我只需要去除一個範圍!感謝您的幫助,我想根據您的建議,我會盡快開展工作。 – richyo1000 2013-02-18 15:00:49