我有一个优化问题,我想通过符号化的方式来优化厚度t1, t2, t3
。解决方案应大致为:
t1 = 1.72053;
t2 = 1.91395;
t3 = 0.781725;
%Given
M_y = 2000000; %[Nmm]
b = 100; %[mm]
E = 70000; %[N/mm^2]
k_Druck = 3.62;
k_Biegung = 21.7;
sigma_zul = 100; %[N/mm^2]
syms t1 t2 t3 positive
% center of gravity
zGes =(b^2*t1+b^2*t3)/(t1*b+t2*b+2*t3*b);
zSeite = zGes - b/2;
zUnten = b - zGes;
zOben= -zGes;
%area moment of inertia
I_y = 2*((t3*b^3/12)+zSeite^2*t3*b)+ ((b*t1^3/12)+zUnten^2*t1*b) + ((b*t2^3/12)+zOben^2*t2*b);
sigma_Oben = -M_y / I_y * zOben; %Stabilitätsversagen (druckbelastete Oberseite)
sigma_Unten = M_y / I_y * zUnten; %Festigkeitsversagen (zugbelasteten Unterseite)
sigma_krit_Oben =k_Druck * E * (t2/b)^2; %kritische Spannung Oberseite
sigma_krit_Seiten =k_Biegung * E * (t3/b)^2; %kritische Spannung Seitenwand
%% condition
Beulen_Oben = sigma_Oben == sigma_krit_Oben;
Beulen_Seiten= sigma_Oben == sigma_krit_Seiten;
Festig_Unten = sigma_Unten==sigma_zul;
%Solver
eqns = [Beulen_Oben,Beulen_Seiten,Festig_Unten];
vars = [t1, t2, t3];
[t1, t2, t3]=vpasolve(eqns,vars)
我试图使用Matlab中的vpasolve
函数来解决这个问题,但是在positive
条件下,函数总是输出Empty sym: 0-by-1
。当我输入给定的厚度解时,给定的条件几乎满足。我假设他们是一个有点小康由于小数位数,我输入。
1条答案
按热度按时间qnzebej01#
在数学意义上,这个系统可能有也可能没有实际的解(根)。
vpasolve
在找不到解决方案时可以返回空的解决方案,如文档中所述。有时,可以通过提供初始猜测的界限作为可选的第三个参数来解决这个问题。这并不总是有效,就像在这种情况下一样。vpasolve
也会有麻烦的情况下,方程有一个最小值,刚刚接触零,但不交叉或几乎交叉零,但不完全。在您的情况下,这可能只是由于您选择的特定组合或参数值。我建议通过
fsolve
来解决这个问题。您可以使用现有的符号数学代码,并使用matlabFunction
将方程转换为数值函数。第一步是使用lhs
和rhs
函数将等式的右侧移动到左侧:然后你可以将其转换为一个带有矢量输入的匿名数字函数,正如
fsolve
所期望的:然后选择一个初始猜测并调用
fsolve
:在我的R2023a系统上,它返回:
对于这个方程组,解似乎对初始猜测不太敏感,但可能存在不止一个解。有关如何调整收敛条件以使残差
fval
更接近于零的信息,请参阅文档。