0

朝ソアーズ!だから私は再び立ち往生しています...私は、さまざまな材料を使用してシリンダーの最適な壁の厚さを決定しようとしています。私は現在のチューブ (Iron) を持っており、これの剛性 ('k') を知っています。私は matlab を使用して、さまざまな 'd' (内径) 値を反復処理し、剛性値 k が鉄管の ki と同じ (または類似) になったときに停止しようとしています (実際に収束する場合) !) while ループと for ループを試しましたが、何かが正しくありません! どんなアドバイスでも大歓迎です、乾杯

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 を使用するには (このような基本的なものに苦労する場合を除きます!)

4

1 に答える 1

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ます。このステートメントは、コードが最初にループに遭遇したときに true になります。あなたに沿った 3 つのステートメントが にStiffness_Al等しく設定されていますStiffness_Fe。ループ内のどこにもこれらの値が変更されていないため、最初の反復の最後に式Stiffness_Fe>Stiffness_Alが再度評価されると false になり、ループの後のステートメントに制御が渡されます。

while(a) 常に 1 回実行され、(b) 決して 2 回実行されないような方法でループを作成するのは、実に奇妙です。ループに関しては、それほどループではありません。

あなたがしようとしているのは、さまざまな内径のさまざまなアルミニウム管の剛性を計算し、鉄管と同じ剛性で内径が最小のものを見つけることだと思います。私は次のようになると思います:

  1. 最小値から外径より 1 mm 小さい値までの内径のベクトルを作成します (例: ) inside_diameters = 12:52
  2. そのベクトルの各要素のチューブの剛性を計算します。stiffnesses = Eal/(pi*(D.^4-inside_diameters.^4)/64)
  3. stiffnesses鉄管の剛性を超える最小値を見つけます。

より幅広いチューブの太さをカバーしたい場合は、12:0.1:52 を試すことができます。より正確な数値が必要な場合を除き、Matlab はリターン キーを押すのに必要な数値を生成します。

はい、厚さを段階的に増やして、探している値が見つかったらループから抜け出す方がエレガントかもしれませんが、コードが機能するかどうか心配することをお勧めします。時間と傾き、磨き上げます。

于 2013-02-18T14:23:07.543 に答える