📄 testdongli.m
字号:
function testdongli
clc
close all
global hKComputeContent
hFigTest=figure;
set(gcf,'menubar','none','tag','hFigTest');
set(gcf,'numbertitle','off','name','动力计算测试程序','resize','off');
set(gcf,'units','normalized','position',[.1,.1,.7,.7]);
set(gcf,'defaultuicontrolfontname','隶书');
set(gcf,'defaultuicontrolfontsize',12);
set(gcf,'defaultuicontrolunits','normalized');
% 界面的布置——界面底部按钮布置
hPushComputeKFloor=uicontrol(gcf,...
'style','push',...
'tag','hPushComputeKFloor',...
'position',[.05,.01,.19,.05],...
'string','计算楼层刚度');
hPushComputePlot=uicontrol(gcf,...
'style','push',...
'tag','hPushComputePlot',...
'position',[.26,.01,.18,.05],...
'string','振型图绘制',...
'enable','off');
hPushComputeK=uicontrol(gcf,...
'style','push',...
'tag','hPushComputeK',...
'position',[.48,.01,.14,.05],...
'string','动力计算',...
'enable','off');
hPushComputeKExit=uicontrol(gcf,...
'style','push',...
'position',[.66,.01,.14,.05],...
'string','退出',...
'callback','close all');
hFrameEquDataSetup=uicontrol(gcf,...
'style','frame',...
'position',[.01,.43,.45,.56]);
hTextTotal=uicontrol(gcf,...
'style','text',...
'position',[.011,.925,.448,.05],...
'horizontal','center',...
'string','基本数据输入',...
'fontsize',14);
hTextDelta=uicontrol(gcf,...
'style','text',...
'position',[.02,.87,.1,.05],...
'horizontal','right',...
'string','柔度矩阵:',...
'fontsize',12);
hEditDelta=uicontrol(gcf,...
'style','edit',...
'tag','hEditDelta',...
'position',[.02,.78,.43,.1],...
'fontsize',9,...
'string','1e-6*[32.8,36.2,36.3;36.2,69.1,72.1;36.3,72.1,106]',...
'max',2);
delta=str2num(get(hEditDelta,'string'));
set(hEditDelta,'string',sprintf(FormatOutput(delta),delta));
hTextKFloor=uicontrol(gcf,...
'style','text',...
'position',[.02,.72,.1,.05],...
'horizontal','right',...
'string','楼层刚度:',...
'fontsize',12);
hEditKFloor=uicontrol(gcf,...
'style','edit',...
'tag','hEditKFloor',...
'position',[.02,.62,.43,.1],...
'fontsize',9,...
'max',2);
hTextM=uicontrol(gcf,...
'style','text',...
'position',[.02,.56,.1,.05],...
'horizontal','right',...
'string','质量矩阵:',...
'fontsize',12);
hEditM=uicontrol(gcf,...
'style','edit',...
'tag','hEditM',...
'position',[.02,.46,.43,.1],...
'fontsize',9,...
'string','[119 0 0;0 113 0;0 0 60]',...
'max',2);
M=str2num(get(hEditM,'string'));
set(hEditM,'string',sprintf(FormatOutput(M),M));
hFrameEquDataSetup=uicontrol(gcf,...
'style','frame',...
'position',[.01,.07,.94,.35]);
hTextW=uicontrol(gcf,...
'style','text',...
'position',[.02,.34,.1,.05],...
'horizontal','right',...
'string','自振频率:',...
'fontsize',12);
hEditW=uicontrol(gcf,...
'style','edit',...
'tag','hEditW',...
'position',[.02,.1,.2,.24],...
'fontsize',9,...
'max',2);
hTextT=uicontrol(gcf,...
'style','text',...
'position',[.24,.34,.1,.05],...
'horizontal','right',...
'string','自振周期:',...
'fontsize',12);
hEditT=uicontrol(gcf,...
'style','edit',...
'tag','hEditT',...
'position',[.24,.1,.2,.24],...
'fontsize',9,...
'max',2);
hTextX=uicontrol(gcf,...
'style','text',...
'position',[.48,.34,.1,.05],...
'horizontal','right',...
'string','结构振型:',...
'fontsize',12);
hEditX=uicontrol(gcf,...
'style','edit',...
'tag','hEditX',...
'position',[.48,.1,.44,.24],...
'fontsize',9,...
'max',2);
% 搜集界面句柄
hKComputeContent=guihandles(hFigTest);
guidata(hFigTest,hKComputeContent);
% 编写回调函数
set(hPushComputeKFloor,'callback',[...
'global hKComputeContent,',...
'delta=str2num(get(hKComputeContent.hEditDelta,''string''));',...
'K=inv(delta);',...
'str=[];',...
'for i=1:size(K,2)-1,',...
'str=[str,''%3.4e'','' ''];',...
'end;',...
'str=[str,'' '',''%3.4e'','' \n''];',...
'set(hKComputeContent.hEditKFloor,''string'',sprintf(str,K));',...
'set(hKComputeContent.hPushComputeK,''enable'',''on'');',...
]);
set(hPushComputeK,'callback',[...
'global hKComputeContent,',...
'K=str2num(get(hKComputeContent.hEditKFloor,''string''));',...
'M=str2num(get(hKComputeContent.hEditM,''string''));',...
'[C,W]=eig(inv(M)*K);',...
'X=[];',...
'for i=1:length(M),',...
'Ct=C(:,i);',...
'X=[X,Ct/Ct(1)];',...
'end;',...
'W=sqrt(diag(W));',...
'T=2*pi./W;',...
'str=[];',...
'for i=1:size(W,1)-1,',...
'str=[str,''%3.4e'','' ''];',...
'end;',...
'str=[str,'' '',''%3.4e'','' \n''];',...
'set(hKComputeContent.hEditW,''string'',sprintf(str,W));',...
'str=[];',...
'for i=1:size(T,1)-1,',...
'str=[str,''%3.4e'','' ''];',...
'end;',...
'str=[str,'' '',''%3.4e'','' \n''];',...
'set(hKComputeContent.hEditT,''string'',sprintf(str,T));',...
'str=[];',...
'for i=1:size(X,2)-1,',...
'str=[str,''%3.4e'','' ''];',...
'end;',...
'str=[str,'' '',''%3.4e'','' \n''];',...
'set(hKComputeContent.hEditX,''string'',sprintf(str,X));',...
'set(hKComputeContent.hFigTest,''userdata'',X);',...
'set(hKComputeContent.hPushComputePlot,''enable'',''on'');',...
]);
set(hPushComputePlot,'callback',[...
'global hKComputeContent,',...
'X=get(hKComputeContent.hFigTest,''userdata'');',...
'subplot(''position'',[.49,.75,.22,.2]);',...
'plot(X(:,1),[3:-1:1],''ko'');',...
'set(gca,''nextplot'',''add'');',...
'plot(zeros(1,100),linspace(1,3),''linewidth'',2.5);',...
'plot(linspace(0,X(1,1)),3,''c-.'');',...
'plot(linspace(0,X(2,1)),2,''c-.'');',...
'plot(X(:,1),[3:-1:1],''r:'');',...
'subplot(''position'',[.73,.75,.22,.2]);',...
'plot(X(:,2),[3:-1:1],''ko'');',...
'set(gca,''nextplot'',''add'');',...
'plot(zeros(1,100),linspace(1,3),''linewidth'',2.5);',...
'plot(linspace(0,X(1,2)),3,''c-.'');',...
'plot(linspace(0,X(2,2)),2,''c-.'');',...
'plot(X(:,2),[3:-1:1],''r:'');',...
'subplot(''position'',[.62,.5,.22,.2]);',...
'plot(X(:,3),[3:-1:1],''ko'');',...
'set(gca,''nextplot'',''add'');',...
'plot(zeros(1,100),linspace(1,3),''linewidth'',2.5);',...
'plot(linspace(0,X(1,3)),3,''c-.'');',...
'plot(linspace(0,X(2,3)),2,''c-.'');',...
'plot(X(:,3),[3:-1:1],''r:'');',...
]);
% 计算结构频率、周期和振型的子程序
function WTCResults=WTXCompute(K,M)
[C,W]=eig(inv(M)*K);
X=[];
for i=1:length(M)
Ct=C(:,i);
X=[X,Ct/Ct(1)];
end
W=sqrt(diag(W));
T=2*pi./W;
WTCResults=struct(...
'W',W,...
'X',X,...
'T',T,...
'C',C);
% 矩阵输出显示格式函数
function str=FormatOutput(InputMatrix)
str=[];
for i=1:size(InputMatrix,2)-1
str=[str,'%3.4e',' '];
end
str=[str,' ','%3.4e',' \n'];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -