⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 macaa.m

📁 改程序基于改进节点法(Modified Nodal Approach)与全矩阵技术在Matlab中实现线性电阻电路的符号分析。可以在GUI中描述待分析的电路结构、启动分析并直观的观察分析结果。在实现分
💻 M
📖 第 1 页 / 共 3 页
字号:
% -- Title: 计算机辅助线性电路分析程序 界面模块
% -- Project: MACAA
% -------------------------------------------------------------------------
% -- File: MACAA.m / MACAA.fig
% -- Author/Designer: 董晓舟 (Xiaozhoudong@vip.sina.com)
% -- Organization: 山东大学威海分校 信息工程学院
% -- Last update: 2004/11/14
% -- IDE: Mathworks MATLAB 7 Release 14 
% -- Dependency: 
% -------------------------------------------------------------------------
% -- Discription:   节点/支路输入
%                   保存输入文件名为 运行目录\BranchMatrix(ASCII)
%                                            \BranchValue(MAT) 
%                   保存结果文件名为 运行目录\ANSMatrix(ASCII) 
% -------------------------------------------------------------------------
% -- Revision Number: 1
% -- Date of Change: 2005/3/19
% -- Modifier: 张丹丹 (Sophiadandan@vip.sina.com)
% -- Discription: 根据用户输入选择符号或数值解法
%                 更改界面显示方式以适应符号法求解													
% -------------------------------------------------------------------------
function varargout = MACAA(varargin)

% --- TOP -----------------------------------------------------------------
% Begin initialization code
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @test_OpeningFcn, ...
                       'gui_OutputFcn',  @test_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end

    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
% End initialization code


% --- Executes just before test is made visible.
function test_OpeningFcn(hObject, eventdata, handles, varargin)
    handles.output = hObject;

    % Update handles structure
    guidata(hObject, handles);
    initialize_gui(hObject, handles);
 
% --- Outputs from this function are returned to the command line.
function varargout = test_OutputFcn(hObject, eventdata, handles) 
    varargout{1} = handles.output;
% ------------------------------------------------------------- TOP END ---






% --- TEXTBOX -------------------------------------------------------------
% 文本框输入
%                                                        BRANCH NUM --- 1 -
function BranchNum_Callback(hObject, eventdata, handles)
    
%                                                             VALUE --- 2 -
function Value_Callback(hObject, eventdata, handles)

    handles.metricdata.value = get(hObject, 'String');
    guidata(handles.figure1, handles);

%                                                             NFROM --- 3 -
function nfrom_Callback(hObject, eventdata, handles)

    handles.metricdata.nfrom = str2double(get(hObject, 'String'));
    guidata(handles.figure1, handles);

%                                                              NFTO --- 4 -
function nto_Callback(hObject, eventdata, handles)

    handles.metricdata.nto = str2double(get(hObject, 'String'));
    guidata(handles.figure1, handles);

%                                                            NCFROM --- 5 -
function ncfrom_Callback(hObject, eventdata, handles)

    handles.metricdata.ncfrom = str2double(get(hObject, 'String'));
    guidata(handles.figure1, handles);

%                                                              NCTO --- 6 -
function ncto_Callback(hObject, eventdata, handles)

    handles.metricdata.ncto = str2double(get(hObject, 'String'));
    guidata(handles.figure1, handles);

% --------------------------------------------------------- TEXTBOX END ---





% --- POPMENU -------------------------------------------------------------

% --- 支路类型选择
function BranchStyle_Callback(hObject, eventdata, handles)
    % 获取选择
    handles.metricdata.style = get(handles.BranchStyle, 'Value');
   
    handles.metricdata.value  = 0;
    handles.metricdata.nfrom  = 0;
    handles.metricdata.nto    = 0;
    handles.metricdata.ncfrom = 0;
    handles.metricdata.ncto   = 0;
    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');
    guidata(handles.figure1, handles);
    
    % 根据支路类型设置输入状态
    switch handles.metricdata.style
        case 1  % R
            set(handles.Unit, 'String', 'Ohm');
            set(handles.ncto, 'Enable', 'off');
            set(handles.ncfrom, 'Enable', 'on');
            set(handles.NctoText, 'Enable', 'off');
            set(handles.Value, 'Enable', 'on');
            set(handles.ValueText, 'Enable', 'on');
            set(handles.NcfromText, 'String', '设置压定义:');
            set(handles.NcfromText, 'Enable', 'on');
        case 2  % G
            set(handles.Unit, 'String', 'Simensi');
            set(handles.ncto, 'Enable', 'off');
            set(handles.ncfrom, 'Enable', 'on');
            set(handles.NctoText, 'Enable', 'off');
            set(handles.Value, 'Enable', 'on');
            set(handles.ValueText, 'Enable', 'on');
            set(handles.NcfromText, 'String', '设置压定义:');
            set(handles.NcfromText, 'Enable', 'on');
        case 3  % VS
            set(handles.Unit, 'String', 'Voltage');
            set(handles.ncto, 'Enable', 'off');
            set(handles.ncfrom, 'Enable', 'off');
            set(handles.NctoText, 'Enable', 'off');
            set(handles.Value, 'Enable', 'on');
            set(handles.ValueText, 'Enable', 'on');
            set(handles.NcfromText, 'String', '控制始节点:');
            set(handles.NcfromText, 'Enable', 'off');
        case 4  % CS
            set(handles.Unit, 'String', 'Ampere');
            set(handles.ncto, 'Enable', 'off');
            set(handles.ncfrom, 'Enable', 'off');
            set(handles.NctoText, 'Enable', 'off');
            set(handles.Value, 'Enable', 'on');
            set(handles.ValueText, 'Enable', 'on');
            set(handles.NcfromText, 'String', '控制始节点:');
            set(handles.NcfromText, 'Enable', 'off');
        case 5  % VCCS
            set(handles.Unit, 'String', ' ');
            set(handles.ncto, 'Enable', 'on');
            set(handles.ncfrom, 'Enable', 'on');
            set(handles.NctoText, 'Enable', 'on');
            set(handles.Value, 'Enable', 'on');
            set(handles.ValueText, 'Enable', 'on');
            set(handles.NcfromText, 'String', '控制始节点:');
            set(handles.NcfromText, 'Enable', 'on');
        case 6  % VCVS
            set(handles.Unit, 'String', ' ');
            set(handles.ncto, 'Enable', 'on');
            set(handles.ncfrom, 'Enable', 'on');
            set(handles.NctoText, 'Enable', 'on');
            set(handles.Value, 'Enable', 'on');
            set(handles.ValueText, 'Enable', 'on');
            set(handles.NcfromText, 'String', '控制始节点:');
            set(handles.NcfromText, 'Enable', 'on');
        case 7  % CCCS
            set(handles.Unit, 'String', ' ');
            set(handles.ncto, 'Enable', 'off');
            set(handles.ncfrom, 'Enable', 'on');
            set(handles.NctoText, 'Enable', 'off');
            set(handles.Value, 'Enable', 'on');
            set(handles.ValueText, 'Enable', 'on');
            set(handles.NcfromText, 'String', '控制支路号:');
            set(handles.NcfromText, 'Enable', 'on');
        case 8  % CCVS
            set(handles.Unit, 'String', ' ');
            set(handles.ncto, 'Enable', 'off');
            set(handles.ncfrom, 'Enable', 'on');
            set(handles.NctoText, 'Enable', 'off');
            set(handles.Value, 'Enable', 'on');
            set(handles.ValueText, 'Enable', 'on');
            set(handles.NcfromText, 'String', '控制支路号:');
            set(handles.NcfromText, 'Enable', 'on');
        case 9  % OPAMP
            set(handles.Unit, 'String', ' ');
            set(handles.ncto, 'Enable', 'on');
            set(handles.ncfrom, 'Enable', 'on');
            set(handles.NctoText, 'Enable', 'on');
            set(handles.Value, 'Enable', 'off');
            set(handles.ValueText, 'Enable', 'off');
            set(handles.NcfromText, 'String', '控制始节点:');
            set(handles.NcfromText, 'Enable', 'on');
    end


% --------------------------------------------------------- POPMENU END ---



    
    
    
% --- BUTTON --------------------------------------------------------------
%                                                               ADD --- 1 -
% --- 编辑-添加
function Add_Callback(hObject, eventdata, handles)
    global NN
    global BRANCHVAL
    global BRANCHMAT 
    global STYLENAME
    % --- 输入保护 ---
        if isnan(handles.metricdata.nfrom)
             set(handles.nfrom, 'String', 0);
             errordlg('错误:输入必须为数值!','Error');
             handles.metricdata.nfrom = 0;
             guidata(handles.figure1, handles);
             return
        end % Nfrom

        if isnan(handles.metricdata.nto)
             set(handles.nto, 'String', 0);
             errordlg('错误:输入必须为数值!','Error');
             handles.metricdata.nto = 0;
             guidata(handles.figure1, handles);
             return
        end % Nto

        if isnan(handles.metricdata.ncfrom)
             set(handles.ncfrom, 'String', 0);
             errordlg('错误:输入必须为数值!','Error');
             handles.metricdata.ncfrom = 0;
             guidata(handles.figure1, handles);
             return
        end % Ncfrom
        
        if (( handles.metricdata.style == 1 )||( handles.metricdata.style == 2 ))
             if ~(handles.metricdata.ncfrom == 0 || handles.metricdata.ncfrom == 1)
                set(handles.ncfrom, 'String', 0);
                errordlg('错误:输入必须为0或1!','Error');
                handles.metricdata.ncfrom = 0;
                guidata(handles.figure1, handles);
                return
             end
        end % Ncfrom be a Voltage define flag

        if isnan(handles.metricdata.ncto)
             set(handles.ncto, 'String', 0);
             errordlg('错误:输入必须为数值!','Error');
             handles.metricdata.ncfrom = 0;
             guidata(handles.figure1, handles);
             return
        end % Ncto
        
        
        
    %  --- Add/CHANGE item  添加/更改 记录 ---
    if (NN == handles.metricdata.DataViewer)    % 添加
        NN = NN + 1;
      
        if isempty(BRANCHMAT)   % 初次输入
            BRANCHVAL(NN) = sym(handles.metricdata.value);
            BRANCHMAT(NN,2) = str2double(handles.metricdata.value);
        else
            if all(sum(isnan(BRANCHMAT(:,2))))                  % 符号运算
                
                BRANCHVAL(NN) = sym(handles.metricdata.value);
                BRANCHMAT(NN,2) = str2double(handles.metricdata.value);
                
            else                                                % 数值运算

                if isnan(str2double(handles.metricdata.value))  % 新插入为符号
                    for i = 1:length(BRANCHMAT(:,2))
                        BRANCHVAL(i) = sym(BRANCHMAT(i,2));
                    end
                    BRANCHVAL(NN) = sym(handles.metricdata.value);
                    BRANCHMAT(NN,2) = str2double(handles.metricdata.value);
                end
                
            end      
        end
        
        BRANCHMAT(NN,1) = handles.metricdata.style;
        BRANCHMAT(NN,3) = handles.metricdata.nfrom;
        BRANCHMAT(NN,4) = handles.metricdata.nto;
        BRANCHMAT(NN,5) = handles.metricdata.ncfrom;
        BRANCHMAT(NN,6) = handles.metricdata.ncto;
        
        m = 1:5;
        switch handles.metricdata.style
            case 1  % R
                STYLENAME(NN,m) = 'R    '; 
            case 2  % G
                STYLENAME(NN,m) = 'G    '; 
            case 3  % VS
                STYLENAME(NN,m) = 'VS   '; 
            case 4  % CS
                STYLENAME(NN,m) = 'CS   '; 
            case 5  % VCCS
                STYLENAME(NN,m) = 'VCCS '; 
            case 6  % VCVS
                STYLENAME(NN,m) = 'VCVS '; 
            case 7  % CCCS
                STYLENAME(NN,m) = 'CCCS '; 
            case 8  % CCVS
                STYLENAME(NN,m) = 'CCVS '; 
            case 9  % OPAMP
                STYLENAME(NN,m) = 'OPAMP'; 
        end

        handles.metricdata.DataViewer = NN;
        guidata(handles.figure1, handles);
        set(handles.InputViewer, 'Value', handles.metricdata.DataViewer);
        
        % 更新显示
        ResetItems(hObject, handles);

        set(handles.BranchNum, 'String', NN+1);
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -