در کد زیر می تونید ببینید چطور matlab و SAP2000  با هم لینک شدن:

Example

  1. Create a folder named “C:\API” if it does not exist.
  2. Create a MATLAB .m file using the built-in or any text editor and paste in the following code:
%% clean-up the workspace & command window
clear;
clc;

%% pass data to Sap2000 as one-dimensional arrays
feature('COM_SafeArraySingleDim', 1);

%% pass non-scalar arrays to Sap2000 API by reference
feature('COM_PassSafeArrayByRef', 1);

%% create Sap2000 object
SapObject = actxserver('Sap2000v15.SapObject');

%% start Sap2000 application
SapObject.ApplicationStart;

%% create SapModel object
SapModel = SapObject.SapModel;

%% initialize model
ret = SapModel.InitializeNewModel;

%% create new blank model
ret = SapModel.File.NewBlank;

%% define material property
MATERIAL_CONCRETE = 2;
ret = SapModel.PropMaterial.SetMaterial('CONC', MATERIAL_CONCRETE);

%% assign isotropic mechanical properties to material
ret = SapModel.PropMaterial.SetMPIsotropic('CONC', 3600, 0.2, 0.0000055);

%% define rectangular frame section property
ret = SapModel.PropFrame.SetRectangle('R1', 'CONC', 12, 12);

%% define frame section property modifiers
ModValue = zeros(8,1,'double');
for i = 1 : 8
ModValue(i,1) = 1;
end
ModValue(1,1) = 1000;
ModValue(2,1) = 0;
ModValue(3,1) = 0;
ret = SapModel.PropFrame.SetModifiers('R1', ModValue);

%% switch to k-ft units
kip_ft_F = 4;
ret = SapModel.SetPresentUnits(kip_ft_F);

%% add frame object by coordinates
FrameName1 = ' ';
FrameName2 = ' ';
FrameName3 = ' ';
[ret, FrameName1] = SapModel.FrameObj.AddByCoord(0, 0, 0, 0, 0, 10, FrameName1, 'R1', '1', 'Global');
[ret, FrameName2] = SapModel.FrameObj.AddByCoord(0, 0, 10, 8, 0, 16, FrameName2, 'R1', '2', 'Global');
[ret, FrameName3] = SapModel.FrameObj.AddByCoord(-4, 0, 10, 0, 0, 10, FrameName3, 'R1', '3', 'Global');

%% assign point object restraint at base
PointName1 = ' ';
PointName2 = ' ';
Restraint = logical(zeros(6,1));
for i = 1 : 4
Restraint(i,1) = true();
end
for i = 5 : 6
Restraint(i,1) = false();
end
[ret, PointName1, PointName2] = SapModel.FrameObj.GetPoints(FrameName1, PointName1, PointName2);
ret = SapModel.PointObj.SetRestraint(PointName1, Restraint);

%% assign point object restraint at top
for i = 1 : 2
Restraint(i,1) = true();
end
for i = 3 : 6
Restraint(i,1) = false();
end
[ret, PointName1, PointName2] = SapModel.FrameObj.GetPoints(FrameName2, PointName1, PointName2);
ret = SapModel.PointObj.SetRestraint(PointName2, Restraint);

%% refresh view, update (initialize) zoom
ret = SapModel.View.RefreshView(0, false());

%% add load patterns
LTYPE_OTHER = 8;
ret = SapModel.LoadPatterns.Add('1', LTYPE_OTHER, 1, true());
ret = SapModel.LoadPatterns.Add('2', LTYPE_OTHER, 0, true());
ret = SapModel.LoadPatterns.Add('3', LTYPE_OTHER, 0, true());
ret = SapModel.LoadPatterns.Add('4', LTYPE_OTHER, 0, true());
ret = SapModel.LoadPatterns.Add('5', LTYPE_OTHER, 0, true());
ret = SapModel.LoadPatterns.Add('6', LTYPE_OTHER, 0, true());
ret = SapModel.LoadPatterns.Add('7', LTYPE_OTHER, 0, true());

%% assign loading for load pattern 2
[ret, PointName1, PointName2] = SapModel.FrameObj.GetPoints(FrameName3, PointName1, PointName2);
PointLoadValue(6,1) = 0;
PointLoadValue(3,1) = -10;
ret = SapModel.PointObj.SetLoadForce(PointName1, '2', PointLoadValue);
ret = SapModel.FrameObj.SetLoadDistributed(FrameName3, '2', 1, 10, 0, 1, 1.8, 1.8);

%% assign loading for load pattern 3
[ret, PointName1, PointName2] = SapModel.FrameObj.GetPoints(FrameName3, PointName1, PointName2);
PointLoadValue(6,1) = 0;
PointLoadValue(3,1) = -17.2;
PointLoadValue(5,1) = -54.4;
ret = SapModel.PointObj.SetLoadForce(PointName2, '3', PointLoadValue);

%% assign loading for load pattern 4
ret = SapModel.FrameObj.SetLoadDistributed(FrameName2, '4', 1, 11, 0, 1, 2, 2);

%% assign loading for load pattern 5
ret = SapModel.FrameObj.SetLoadDistributed(FrameName1, '5', 1, 2, 0, 1, 2, 2, 'Local');
ret = SapModel.FrameObj.SetLoadDistributed(FrameName2, '5', 1, 2, 0, 1, -2, -2, 'Local');

%% assign loading for load pattern 6
ret = SapModel.FrameObj.SetLoadDistributed(FrameName1, '6', 1, 2, 0, 1, 0.9984, 0.3744, 'Local');
ret = SapModel.FrameObj.SetLoadDistributed(FrameName2, '6', 1, 2, 0, 1, -0.3744, 0, 'Local');

%% assign loading for load pattern 7
ret = SapModel.FrameObj.SetLoadPoint(FrameName2, '7', 1, 2, 0.5, -15, 'Local');

%% switch to k-in units
kip_in_F = 3;
ret = SapModel.SetPresentUnits(kip_in_F);

%% save model
ret = SapModel.File.Save('C:\API\API_1-001.sdb');

%% run model (this will create the analysis model)
ret = SapModel.Analyze.RunAnalysis();

%% initialize for Sap2000 results
SapResult= zeros(7,1,'double');
[ret, PointName1, PointName2] = SapModel.FrameObj.GetPoints(FrameName2, PointName1, PointName2);

%% get Sap2000 results for load cases 1 through 7
for i = 1 : 7
NumberResults = 0;
Obj = cellstr(' ');
Elm = cellstr(' ');
ACase = cellstr(' ');
StepType = cellstr(' ');
StepNum = zeros(1,1,'double');
U1 = zeros(1,1,'double');
U2 = zeros(1,1,'double');
U3 = zeros(1,1,'double');
R1 = zeros(1,1,'double');
R2 = zeros(1,1,'double');
R3 = zeros(1,1,'double');
ObjectElm = 0;
ret = SapModel.Results.Setup.DeselectAllCasesAndCombosForOutput;
ret = SapModel.Results.Setup.SetCaseSelectedForOutput(int2str(i));
if i <= 4
[ret, NumberResults, Obj, Elm, ACase, StepType, StepNum, U1, U2, U3, R1, R2, R3] = SapModel.Results.JointDispl(PointName2, ObjectElm, NumberResults, Obj, Elm, ACase, StepType, StepNum, U1, U2, U3, R1, R2, R3);
SapResult(i) = U3(1);
else
[ret, NumberResults, Obj, Elm, ACase, StepType, StepNum, U1, U2, U3, R1, R2, R3] = SapModel.Results.JointDispl(PointName1, ObjectElm, NumberResults, Obj, Elm, ACase, StepType, StepNum, U1, U2, U3, R1, R2, R3);
SapResult(i) = U1(1);
end
end

%% close Sap2000
ret = SapObject.ApplicationExit(false());
SapModel = 0;
SapObject = 0;

%% fill independent results
IndResult= zeros(7,1,'double');
IndResult(1) = -0.02639;
IndResult(2) = 0.06296;
IndResult(3) = 0.06296;
IndResult(4) = -0.2963;
IndResult(5) = 0.3125;
IndResult(6) = 0.11556;
IndResult(7) = 0.00651;

%% fill percent difference
PercentDiff = zeros(7,1,'double');
for i = 1 : 7
PercentDiff(i) = (SapResult(i) / IndResult(i)) - 1;
end

%% display results
SapResult
IndResult
PercentDiff

منبع :  civilmax.blogfa.com