📄 eigtoolgui.m
字号:
function fig = eigtoolgui(fn_called,fig_no)% function fig = eigtoolgui(fn_called,fig_no)%% This file actually creates the GUI. If called with no input arguments,% the GUI will start and wait for the user to enter a matrix. A single% argument (the matrix to use) can be passed, starting the GUI with that% matrix. The more usual method of invoking the GUI is to call the% function psa, which allows the use of additional options.%% fn_called A matrix to default to% fig_no A number for the figure (optional)%% The original version of EigTool was designed and built at Oxford % University during 2000-2002 by Thomas G. Wright in collaboration with % Mark Embree and Lloyd N. Trefethen.% Check for preferences first. If they don't exist, create them.if ~ispref('EigTool'), set_eigtool_prefs('default');else ET_ver = getpref('EigTool','version'); if ET_ver ~= 2.04, set_eigtool_prefs('update'); end;end;% Update the usage countusage_count = getpref('EigTool','usage_count');setpref('EigTool','usage_count',usage_count+1);%% Figureif nargin<2, h0 = figure('visible','off'); fig_no = h0;elseif fig_no>0, h0 = figure(fig_no,'visible','off');% fig_no is negative if the figure already exists% The correct number is then -fig_noelse h0 = -fig_no;end; set(h0,'DoubleBuffer','on');set(h0,'FileName','');set(h0,'KeyPressFcn','dokeypress(gcbf)');set(h0,'Name','EigTool');set(h0,'PaperPosition',[18 180 576 432]);set(h0,'PaperUnits','points');%pos = get(0,'defaultFigurePosition'); pos(2) = pos(2)+pos(4)-478; pos(3) = 526; pos(4) = 478;%set(h0,'Position',pos);% If fig_no is positive, we have a new figure, so it needs to be positionedif fig_no>0, set(h0,'Position',[210 62 526 478]);else% If it's negative, just need to make sure width & height are correct pos = get(h0,'pos'); pos(3:4) = [526 478]; set(h0,'pos',pos);end;%set(h0,'ResizeFcn','doresize(gcbf)');set(h0,'Resize','off');set(h0,'Tag','EigTOOL');set(h0,'ToolBar','none');set(h0,'MenuBar','none');set(h0,'UserData',[]);set(h0,'WindowButtonDownFcn','eigtool_switch_fn(''PsArea'');');set(h0,'DefaultaxesCreateFcn','plotedit(gcbf,''promoteoverlay''); ');%% Set the colourmap tooset_gui_colour_map(h0);%% Menush1 = uimenu('Parent',h0, ... 'Callback','filemenufcn(gcbf,''CreateCode'')', ... 'Label','&File', ... 'Tag','FileMenu');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''Import'')', ... 'Label','&New Matrix...', ... 'Tag','Import');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''FileSave'')', ... 'Label','&Save Current State', ... 'Separator','on', ... 'Tag','FileSave');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''FileSaveAs'')', ... 'Label','Save Current State &As...', ... 'Tag','FileSaveAs');h2 = uimenu('Parent',h1, ... 'Callback','', ... 'Label','&Export...', ... 'Separator','on', ... 'Tag','Export');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''ExportEWS'')', ... 'Label','&Eigenvalues...', ... 'Tag','ExportEws');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''ExportMtx'')', ... 'Label','&Original matrix...', ... 'Tag','ExportMtx');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''ExportSchur'')', ... 'Label','&Schur factor...', ... 'Tag','ExportSchur');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''ExportPSA'')', ... 'Label','&Pseudospectra data...', ..h1 = uimenu('Parent',h0, ... 'Label','&Extras', ... 'Tag','ExtrasMenu');h2 = uimenu('Parent',h1, ... 'ForegroundColor',[.7 .25 .18], ... 'Callback','et_download_mex', ... 'Label','&Speeding up EigTool', ... 'Tag','DownloadMEX');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''CreateCode'')', ... 'Label','&Options Code for Printing', ... 'Separator','on', ... 'Tag','CreateCode');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''PrintOnly'')', ... 'Label','Save for &Quick Print Creation...', ... 'Tag','PrintOnly');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''Safety'');', ... 'Label','Projection &Level...', ... 'Separator','on', ... 'Tag','Safety');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''Colour'');', ... 'Label','&Colour', ... 'Separator','on', ... 'Tag','Colour');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''ThickLines'');', ... 'Label','&Thick Lines', ... 'Tag','ThickLines');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''UnequalLevels'');', ... 'Label','&Arbitrary Levels', ... 'Tag','UnequalLevels');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''FOVnpts'');', ... 'Label','Accuracy of &FoV comp.', ... 'Tag','FOVnpts');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''DisplayEWS'');', ... 'Label','Display &Eigenvalues', ... 'Separator','on', ... 'Tag','DisplayEWS');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''DisplayPSA'');', ... 'Label','Display &Pseudospectra', ... 'Tag','DisplayPSA');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''ShowDimension'');', ... 'Label','Display &Dimension', ... 'Separator','on', ... 'Tag','ShowDimension');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''ShowGrid'');', ... 'Label','Display &Gridpoints', ... 'Tag','ShowGrid');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''DisplayImagA'');', ... 'Label','Display &Imaginary Axis', ... 'Tag','DisplayImagA');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''DisplayUnitC'');', ... 'Label','Display &Unit Circle', ... 'Tag','DisplayUnitC');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''DisplayColourbar'');', ... 'Label','Display Colour&Bar', ... 'Separator','on', ... 'Tag','DisplayColourbar');h1 = uimenu('Parent',h0, ... 'Enable','off', ... 'Label','&ARPACK/eigs', ... 'Tag','ARPACKMenu');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''ChooseP'')', ... 'Label','Maximum &Subspace Size (p)...', ... 'Tag','ChooseP');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''ChooseTol'')', ... 'Label','Convergence &Tolerance (tol)...', ... 'Tag','ChooseTol');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''ChooseMaxit'')', ... 'Label','Maximum Number of &Restarts (maxit)...', ... 'Tag','ChooseMaxit');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''ChooseV0'')', ... 'Label','Starting &Vector (v0)...', ... 'Tag','ChooseV0');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''ARPACK_auto_ax'')', ... 'Checked','on', ... 'Label','&Automatic axes', ... 'Separator','on', ... 'Tag','ARPACK_auto_ax');h2 = uimenu('Parent',h1, ... 'Callback','', ... 'Label','Show &Progress...', ... 'Separator','on', ... 'Tag','ARPACKProg');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''ProgRVals'')', ... 'Checked','on', ... 'Label','&Ritz Values/Shifts', ... 'Tag','ProgRVals');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''ProgAllShifts'')', ... 'Label','&All Shifts', ... 'Tag','ProgAllShifts');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''ProgPSA'')', ... 'Label','&Pseudospectra', ... 'Tag','ProgPSA');h1 = uimenu('Parent',h0, ... 'Enable','on', ... 'Label','&Transients', ... 'Tag','TransientsMenu');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''MatrixPowers'')', ... 'Label','Matrix &Powers', ... 'Tag','MtxPowers');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''MatrixExp'')', ... 'Label','Matrix &Exponentials', ... 'Tag','MtxExp');%h2 = uimenu('Parent',h1, ...% 'Callback','', ...% 'Label','&Lower Bound', ...% 'Separator','on', ...% 'Tag','TransientLB');h3 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''TransientLB'')', ... 'Label','&Compute a Bound', ... 'Separator','on', ... 'Tag','TransientLB');h2 = uimenu('Parent',h1, ... 'Callback','eigtool_switch_fn(''TransientBestLB'')', ... 'Label','&Best Estimate Lower Bound', ... 'Tag','TransientBestLB');h3 = uimenu('Parent',h1, ... 'Callback','type(''trans_lb_et_help''); disp(''Press <RETURN> to continue...'');', ... 'Label','&Information', ... 'Separator','on', ... 'Tag','TransientLBInfo');% Build the 'Numbers' menubuild_numbers_menu(h0);mnu_h = uimenu('Parent',h0, ... 'Label','&Demos', ... 'Tag','DemosMenu');h2 = uimenu('Parent',mnu_h, ... 'Callback','eigtool_switch_fn(''FinerGrid'')', ... 'Label','&Finer grid (slower)', ... 'Tag','FinerGrid');h1 =uimenu('Parent',mnu_h, ... 'Callback','', ... 'Label','&Dense matrices', ... 'Separator','on', ... 'Tag','DenseMatrices');% Free letters in Dense submenu: JPQSYh2 = uimenu('Parent',h1, ... 'Callback','', ... 'Label','&Airy', ... 'Tag','DemoAiry');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoAiryS'')', ... 'Label','&Compute pseudospectra', ... 'Tag','AiryPSA');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoAiryC'')', ... 'Label','&Description and code', ... 'Separator','on', ... 'Tag','AiryCode');h2 = uimenu('Parent',h1, ... 'Callback','', ... 'Label','&Basor-Morrison', ... 'Tag','DemoToeplitzPCS');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoToeplitzPCSS'')', ... 'Label','Compute pseudospectra (&Faster: N=50)', ... 'Tag','ToeplitzPCSPSAs');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoToeplitzPCSL'')', ... 'Label','Compute pseudospectra (&Slower: N=100)', ... 'Tag','ToeplitzPCSPSAl');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoToeplitzPCSC'')', ... 'Label','&Description and code', ... 'Separator','on', ... 'Tag','ToeplitzPCSCode');h2 = uimenu('Parent',h1, ... 'Callback','', ... 'Label','&Boeing &767', ... 'Tag','DemoBoeing');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoBoeingL'')', ... 'Label','Compute pseudospectra (&Unstable)', ... 'Tag','BoeingPSAs');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoBoeingS'')', ... 'Label','Compute pseudospectra (&Stable)', ... 'Tag','BoeingPSAl');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoBoeingC'')', ... 'Label','&Description and code', ... 'Separator','on', ... 'Tag','BoeingCode');h2 = uimenu('Parent',h1, ... 'Callback','', ... 'Label','&Chebspec', ... 'Tag','DemoChebspec');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoChebspecS'')', ... 'Label','&Compute pseudospectra', ... 'Tag','ChebspecPSA');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoChebspecC'')', ... 'Label','&Description and code', ... 'Separator','on', ... 'Tag','ChebspecCode');h2 = uimenu('Parent',h1, ... 'Callback','', ... 'Label','Co&mpanion', ... 'Tag','DemoCompanion');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoCompanionS'')', ... 'Label','&Compute pseudospectra', ... 'Tag','CompanionPSA');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoCompanionC'')', ... 'Label','&Description and code', ... 'Separator','on', ... 'Tag','CompanionCode');h2 = uimenu('Parent',h1, ... 'Callback','', ... 'Label','Co&nvection-Diffusion', ... 'Tag','DemoConvDiff');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoConvDiffS'')', ... 'Label','Compute pseudospectra (&Faster: N=40)', ... 'Tag','ConvDiffPSAs');h3 = uimenu('Parent',h2, ... 'Callback','eigtool_switch_fn(''DemoConvDiffL'')', ... 'Label','Compute pseudospectra (&Slower: N=100)', ... 'Tag','ConvDiffPSAl');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -