界面如下
公式都来源于以下的图片
代码如下
methods (Access = private)
function [EI,len] = get_EI_l(app)
EI=app.EIEditField.Value;
len=app.lEditField.Value;
end
function set_w_theta(app,w,theta)
set(app.wEditField,'Value',w)
set(app.thetaEditField,'Value',theta)
end
function set_w_theta_2(app,w,thetaA,thetaB)
set(app.wEditField_2,'Value',w)
set(app.thetaEditField_A,'Value',thetaA)
set(app.thetaEditField_B,'Value',thetaB)
end
end
% Callbacks that handle component events
methods (Access = private)
% 计算只有一侧约束的,只受一个力
function compute_FButtonPushed(app, event)
[EI,len] = get_EI_l(app);
a=app.aEditField.Value;
F=app.FEditField.Value;
w=-F*a^2*(3*len-a)/(6*EI);
theta=-F*a^2/(2*EI);
set_w_theta(app,w,theta)
end
% 在杆长值改变时,自动为a,b赋值
function lEditFieldValueChanged(app, event)
value = app.lEditField.Value;
app.aEditField.Value=value;
app.aEditField_2.Value=value;
app.aEditField_3.Value=value/2;
app.aEditField_4.Value=value/2;
app.bEditField.Value=value/2;
app.bEditField_2.Value=value/2;
end
% Button pushed function: compute_junbu
function compute_junbuButtonPushed(app, event)
[EI,len] = get_EI_l(app);
q=app.qEditField.Value;
w=-q*len^4/(8*EI);
theta=-q*len^3/(6*EI);
set_w_theta(app,w,theta)
end
% Button pushed function: compute_liou
function compute_liouButtonPushed(app, event)
[EI,len] = get_EI_l(app);
M_e=app.M_eEditField.Value;
a=app.aEditField_2.Value;
w=-M_e*a*(len-a/2)/EI;
theta=-M_e*a/EI;
set_w_theta(app,w,theta)
end
% Button pushed function: compute_F2
function compute_F2ButtonPushed(app, event)
[EI,len] = get_EI_l(app);
F=app.FEditField_2.Value;
a=app.aEditField_4.Value;
b=app.bEditField_2.Value;
w=-F*b*(len^2-a^2)^1.5/(9*sqrt(3)*len*EI);
thetaA=-F*b*(len^2-b^2)/(6*len*EI);
thetaB=F*a*(len^2-a^2)/(6*len*EI);
set_w_theta_2(app,w,thetaA,thetaB)
end
% Button pushed function: compute_junbu2
function compute_junbu2ButtonPushed(app, event)
[EI,len] = get_EI_l(app);
q=app.qEditField.Value;
w=-5*q*len^4/(384*EI);
thetaA=-q*len^3/(24*EI);
thetaB=-thetaA;
set_w_theta_2(app,w,thetaA,thetaB)
end
% Button pushed function: compute_liou2
function compute_liou2ButtonPushed(app, event)
M_e=app.M_eEditField_2.Value;
[EI,len] = get_EI_l(app);
a=app.aEditField_3.Value;
b=app.bEditField.Value;
if a+b~=len
uialert(app.UIFigure,"a和b的和必须是l","error")
pause
end
w1=M_e*(len^2-3*b^2)^1.5/(9*sqrt(3)*len*EI);
x1=sqrt(len^2-3*b^2)/sqrt(3);
w2=-M_e*(len^2-3*a^2)^1.5/(9*sqrt(3)*len*EI);
x2=sqrt(len^2-3*a^2)/sqrt(3);
thetaA=M_e*(len^2-3*b^2)/(6*len*EI);
thetaB=M_e*(len^2-3*a^2)/(6*len*EI);
thetaC=M_e*(len^2-3*a^2-3*b^2)/(6*len*EI);
set(app.w1EditField,'Value',w1)
set(app.w2EditField,'Value',w2)
set(app.thetaEditField_A,'Value',thetaA)
set(app.thetaEditField_B,'Value',thetaB)
set(app.thetaEditField_C,'Value',thetaC)
set(app.x1EditField,'Value',x1)
set(app.x2EditField,'Value',x2)
end
% 为了保证a+b=杆长,但是存在一些bug
function bEditFieldValueChanged(app, event)
value = app.bEditField.Value;
len=app.lEditField.Value;
set(app.aEditField_3,'Value',len-value);
end
% Value changed function: aEditField_3
function aEditField_3ValueChanged(app, event)
value = app.aEditField_3.Value;
len=app.lEditField.Value;
set(app.bEditField,'Value',len-value);
end
end