📄 macaa.m
字号:
else % 更改
if ~isempty(BRANCHMAT)
m = 1:5;
switch handles.metricdata.style
case 1 % R
STYLENAME(handles.metricdata.DataViewer,m) = 'R ';
case 2 % G
STYLENAME(handles.metricdata.DataViewer,m) = 'G ';
case 3 % VS
STYLENAME(handles.metricdata.DataViewer,m) = 'VS ';
case 4 % CS
STYLENAME(handles.metricdata.DataViewer,m) = 'CS ';
case 5 % VCCS
STYLENAME(handles.metricdata.DataViewer,m) = 'VCCS ';
case 6 % VCVS
STYLENAME(handles.metricdata.DataViewer,m) = 'VCVS ';
case 7 % CCCS
STYLENAME(handles.metricdata.DataViewer,m) = 'CCCS ';
case 8 % CCVS
STYLENAME(handles.metricdata.DataViewer,m) = 'CCVS ';
case 9 % OPAMP
STYLENAME(handles.metricdata.DataViewer,m) = 'OPAMP';
end
BRANCHMAT(handles.metricdata.DataViewer,1) = handles.metricdata.style;
if all(sum(isnan(BRANCHMAT(:,2)))) % 符号运算
BRANCHVAL(handles.metricdata.DataViewer) = handles.metricdata.value; % 参数值符号处理
else % 数值
if isnan(str2double(handles.metricdata.value)) % 新插入为符号
for i = 1:length(BRANCHMAT(:,2))
BRANCHVAL(i) = sym(BRANCHMAT(i,2));
end
BRANCHVAL(handles.metricdata.DataViewer) = sym(handles.metricdata.value);
BRANCHMAT(handles.metricdata.DataViewer,2) = NaN;
else % 新插入为数值
BRANCHMAT(handles.metricdata.DataViewer,2) = str2double(handles.metricdata.value);
end
end
BRANCHMAT(handles.metricdata.DataViewer,3) = handles.metricdata.nfrom;
BRANCHMAT(handles.metricdata.DataViewer,4) = handles.metricdata.nto;
BRANCHMAT(handles.metricdata.DataViewer,5) = handles.metricdata.ncfrom;
BRANCHMAT(handles.metricdata.DataViewer,6) = handles.metricdata.ncto;
end
handles.metricdata.DataViewer = NN;
guidata(handles.figure1, handles);
set(handles.InputViewer, 'Value', handles.metricdata.DataViewer);
% 更新显示
ResetItems(hObject, handles);
end
% CLEAR --- 2 -
% --- 编辑-清空
function Clear_Callback(hObject, eventdata, handles)
global NN
global BRANCHMAT
global BRANCHVAL
global STYLENAME
set(handles.MNAMatViewer, 'String',[]);
set(handles.ANSViewer, 'String',[]);
set(handles.InfoViewer, 'String',[]);
set(handles.BranchStyle, 'Value', 1);
set(handles.Value, 'String', '0');
set(handles.nfrom, 'String', '0');
set(handles.nto, 'String', '0');
set(handles.ncfrom, 'String', '0');
set(handles.ncto, 'String', '0');
set(handles.Unit, 'String', 'Ohm');
set(handles.ncto, 'Enable', 'off');
set(handles.NctoText, 'Enable', 'off');
set(handles.Value, 'Enable', 'on');
set(handles.ValueText, 'Enable', 'on');
set(handles.NcfromText, 'String', '设置压定义:');
handles.metricdata.style = 1;
handles.metricdata.value = 0;
handles.metricdata.nfrom = 0;
handles.metricdata.nto = 0;
handles.metricdata.ncfrom = 0;
handles.metricdata.ncto = 0;
BRANCHMAT = [];
BRANCHVAL = sym([]);
STYLENAME = [];
NN = 0;
set(handles.BranchNum, 'String', 1);
handles.metricdata.DataViewer = 0;
guidata(handles.figure1, handles);
set(handles.InputViewer, 'Value',1);
% 更新显示
ResetItems(hObject, handles);
% DELETE --- 3 -
% --- 编辑-删除
function Delete_Callback(hObject, eventdata, handles)
global BRANCHMAT
global BRANCHVAL
global STYLENAME
global NN
if ~isempty(BRANCHMAT)
NN = NN - 1;
BRANCHMAT(handles.metricdata.DataViewer,:) = [];
STYLENAME(handles.metricdata.DataViewer,:) = [];
BRANCHVAL(handles.metricdata.DataViewer) = [];
handles.metricdata.DataViewer = NN;
guidata(handles.figure1, handles);
set(handles.InputViewer, 'Value', handles.metricdata.DataViewer);
% 更新显示
ResetItems(hObject, handles);
end
% INSERT --- 4 -
% --- 编辑-插入
function Change_Callback(hObject, eventdata, handles)
global BRANCHMAT
global BRANCHVAL
global STYLENAME
global NN
if ~isempty(BRANCHMAT)
m = 1:5;
switch handles.metricdata.style
case 1 % R
InsertSN(m) = 'R ';
case 2 % G
InsertSN(m) = 'G ';
case 3 % VS
InsertSN(m) = 'VS ';
case 4 % CS
InsertSN(m) = 'CS ';
case 5 % VCCS
InsertSN(m) = 'VCCS ';
case 6 % VCVS
InsertSN(m) = 'VCVS ';
case 7 % CCCS
InsertSN(m) = 'CCCS ';
case 8 % CCVS
InsertSN(m) = 'CCVS ';
case 9 % OPAMP
InsertSN(m) = 'OPAMP';
end
InsertBM(1) = handles.metricdata.style;
InsertValue = sym(handles.metricdata.value);
InsertBM(2) = str2double(handles.metricdata.value);
InsertBM(3) = handles.metricdata.nfrom;
InsertBM(4) = handles.metricdata.nto;
InsertBM(5) = handles.metricdata.ncfrom;
InsertBM(6) = handles.metricdata.ncto;
if all(sum(isnan(BRANCHMAT(:,2)))) % 符号运算
BRANCHVAL = [BRANCHVAL(1:handles.metricdata.DataViewer-1),InsertValue,BRANCHVAL(handles.metricdata.DataViewer:NN)];
BRANCHMAT = [BRANCHMAT(1:handles.metricdata.DataViewer-1,:);InsertBM;BRANCHMAT(handles.metricdata.DataViewer:NN,:)];
else % 数值
handles.metricdata.value
str2double(handles.metricdata.value)
if isnan(str2double(handles.metricdata.value)) % 新插入为符号
for i = 1:length(BRANCHMAT(:,2))
BRANCHVAL(i) = sym(BRANCHMAT(i,2));
end
BRANCHVAL = [BRANCHVAL(1:handles.metricdata.DataViewer-1),InsertValue,BRANCHVAL(handles.metricdata.DataViewer:NN)];
BRANCHMAT = [BRANCHMAT(1:handles.metricdata.DataViewer-1,:);InsertBM;BRANCHMAT(handles.metricdata.DataViewer:NN,:)];
else % 新插入为数值
BRANCHVAL = [BRANCHVAL(1:handles.metricdata.DataViewer-1),InsertValue,BRANCHVAL(handles.metricdata.DataViewer:NN)];
BRANCHMAT = [BRANCHMAT(1:handles.metricdata.DataViewer-1,:);InsertBM;BRANCHMAT(handles.metricdata.DataViewer:NN,:)];
end
end
STYLENAME = [STYLENAME(1:handles.metricdata.DataViewer-1,:);double(InsertSN);STYLENAME(handles.metricdata.DataViewer:NN,:)];
NN =NN + 1;
handles.metricdata.DataViewer = NN;
set(handles.InputViewer, 'Value', handles.metricdata.DataViewer);
guidata(handles.figure1, handles);
end
% 更新显示
ResetItems(hObject, handles);
% ANA --- 5 -
% --- 电路分析
function Ana_Callback(hObject, eventdata, handles)
global BRANCHMAT
global BRANCHVAL
global STYLENAME
global ANS
global NN
% 调用分析函数SMNA()
ANS = SMNA(BRANCHMAT,BRANCHVAL);
% Workspace 输出
assignin('base','MNAStructure',ANS); % 输出 MNASmatrix 到基本工作区
assignin('base','BranchMatrix',BRANCHMAT); % 输出 BranchMatrix 到基本工作区
if all(sum(isnan(BRANCHMAT(:,2)))) % 符号运算
assignin('base','BranchValue',BRANCHVAL); % 输出 BranchValue 到基本工作区
end
% Command Window 输出
display('支路数据矩阵:');
if all(sum(isnan(BRANCHMAT(:,2)))) % 符号运算
dis = num2str(BRANCHMAT);
dis(:,1) = [];
dis(:,1) = [];
disValue = char(cell(BRANCHVAL));
disBlank(1:length(BRANCHVAL),:) = ' ';
BranchNumber = num2str([1:NN]');
dis = [char(STYLENAME),BranchNumber,disBlank,disBlank,disValue,disBlank,dis]
else % 数值运算
BRANCHMAT
end
display('MNA增广矩阵:');
ANS.MNAMatrix
display('分析结果:');
ANS.ANS
% GUI MNA分析数据输出
if all(sum(isnan(BRANCHMAT(:,2)))) % 符号运算
MNAMat = reshape(cellstr(char(cell(ANS.MNAMatrix))),size(ANS.MNAMatrix));
MNASize = size(MNAMat);
disMNAMat = blanks(MNASize(1))';
disBlank = disMNAMat;
for n = 1:MNASize(2)
disMNAMat = [disMNAMat,disBlank,disBlank,disBlank,char(MNAMat(:,n))];
end
set(handles.MNAMatViewer, 'String',disMNAMat);
else % 数值运算
set(handles.MNAMatViewer, 'String',num2str(ANS.MNAMatrix));
end
if ~isempty(ANS.ANS)
VDBranchNumber = length(ANS.VoltageControlBranch); % 电压定义支路数
Bnum2VDBnum( ANS.VoltageControlBranch ) = 1:VDBranchNumber; % 建立查找表并排序
% GUI 结果输出处理
dis_ANS01(1:ANS.NodeNumber,1) = 'U';
dis_ANS31 = [1:ANS.NodeNumber]';
dis_ANS11(1:ANS.NodeNumber,1) = ' ';
dis_ANS11(1:ANS.NodeNumber,2) = '=';
dis_ANS11(1:ANS.NodeNumber,3) = ' ';
dis_ANS21(1:ANS.NodeNumber,1) = ' ';
dis_ANS21(1:ANS.NodeNumber,2) = 'V';
if ~(VDBranchNumber == 0)
dis_ANS02(1:VDBranchNumber,1) = 'I';
dis_ANS32 = ANS.VoltageControlBranch;
dis_ANS12(1:VDBranchNumber,1) = ' ';
dis_ANS12(1:VDBranchNumber,2) = '=';
dis_ANS12(1:VDBranchNumber,3) = ' ';
dis_ANS22(1:VDBranchNumber,1) = ' ';
dis_ANS22(1:VDBranchNumber,2) = 'A';
else
dis_ANS02 = [];
dis_ANS12 = [];
dis_ANS22 = [];
dis_ANS32 = [];
end
dis_ANS0 = [dis_ANS01;dis_ANS02];
dis_ANS1 = [dis_ANS11;dis_ANS12];
dis_ANS2 = [dis_ANS21;dis_ANS22];
dis_ANS3 = num2str([dis_ANS31;dis_ANS32]);
if all(sum(isnan(BRANCHMAT(:,2)))) % 符号运算
dis = [dis_ANS0,dis_ANS3,dis_ANS1,char(cell(ANS.ANS)),dis_ANS2];
else % 数值运算
dis = [dis_ANS0,dis_ANS3,dis_ANS1,num2str(ANS.ANS),dis_ANS2];
end
set(handles.ANSViewer, 'String',dis);
% GUI 电路数据输出处理
dis_INF1 = char('电路节点数:','电路支路数:','压控支路数:');
dis_INF2 = num2str([ANS.NodeNumber;ANS.BranchNumber;VDBranchNumber]);
dis_INF = [dis_INF1,dis_INF2];
set(handles.InfoViewer, 'String',dis_INF);
end
% SAVEANS --- 6 -
% --- 结果保存处理
function SaveAns_Callback(hObject, eventdata, handles)
global ANS
if ~isempty(ANS)
answer = ANS.ANS;
% MAT格式保存结果
save ANSMatrix answer;
end
% SAVEINPUT --- 7 -
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -