改变气缸壁厚以找到其他材料的匹配刚度?

时间:2013-02-18 11:57:17

标签: matlab

早上好吧! 所以我又被卡住了...... 我正在尝试使用不同的材料确定圆柱体的最佳壁厚。我有一个电流管(铁),我知道刚度('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更有趣(除非我在讨论这个基本的东西时!)

1 个答案:

答案 0 :(得分: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。您将三个语句设为Stiffness_Al等于Stiffness_Fe。你的循环中的任何其他地方都没有修改这些值,所以在第一次迭代结束时,当再次计算表达式Stiffness_Fe>Stiffness_Al时,它将为false,并且控制将传递给循环之后的语句。

以这样的方式编写while循环确实非常奇怪:(a)它总是运行一次而(b)它从不运行两次。就循环而言,它并不是一个循环。

我猜测你要做的是计算一系列不同内径的铝管的刚度,并找到内径最小且刚度与铁管相同的铝管。我想我会:

  1. 创建一个内径矢量,从最小值到外径小于1mm,例如inside_diameters = 12:52
  2. 计算该向量的每个元素的管的刚度,如stiffnesses = Eal/(pi*(D.^4-inside_diameters.^4)/64)
  3. 找出stiffnesses中超过铁管刚度的最小值。
  4. 如果您想覆盖更广泛的管厚度,可以尝试12:0.1:52。除非你想要或需要更精确的数字,否则Matlab会在你点击返回键的时候产生你想要的数字。

    是的,当您找到所需的值时,逐步增加厚度并从循环中断开可能会更优雅,但我建议您担心如何使代码正常工作,如果你有时间和倾向,把它弄清楚。