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

📄 lufactgui.m

📁 数值分析程序中的一个例子
💻 M
字号:
function LuFactGUI(keyword,varargin)
global A B X
if nargin == 0
   
H = findobj(0,'Tag','LuFact_figp');
if ~isempty(H)
   warning('Another PROGRAM is running.  Only 1 PROGRAM can be run at a time.');
   figure(H);
   return
end

LuFactGUI_figp = figure('units','normalized','pos',[0.30 0.30 0.40 .30],'menu','none', ...
              'tag','LuFactGUI_figp',...
              'Color',get(0,'DefaultUIControlBackgroundColor'), ...
              'DefaultUIControlUnit','norm');
         
figure(LuFactGUI_figp); 
str='列主元分解法的通用程序';
set(gcf,'name',str,'numbertitle','off');
set(gca,'Visible','off');
set(gcf,'defaultuicontrolfontsize',11);
uicontrol('pos',[0.40 0.72 0.25 .12],'string','读入系数矩阵', ...
   'CallBack','LuFactGUI(''ReadA'')');

uicontrol('pos',[0.40 0.52 0.25 .12],'string','读入右端向量', ...
   'CallBack','LuFactGUI(''ReadB'')');

uicontrol('pos',[0.10 .72 0.25 .12],'string','编辑系数矩阵', ...
   'CallBack','LuFactGUI(''EditA'')');

uicontrol('pos',[0.10 0.52 0.25 .12],'string','编辑右端向量', ...
   'CallBack','LuFactGUI(''EditB'')');

uicontrol('pos',[0.10 0.32 0.25 .12],'string','计算', ...
   'CallBack','LuFactGUI(''cal'')');

uicontrol('pos',[0.40 0.32 0.25 .12],'string','查看结果', ...
   'CallBack','LuFactGUI(''result'')'); 

uicontrol('pos',[0.10 0.12 0.25 .12],'string','Help', ...
   'CallBack','LuFactGUI(''Help'')');

uicontrol('pos',[0.40 0.12 0.25 .12],'string','作者信息', ...
   'CallBack','LuFactGUI(''Info'')');

uicontrol('pos',[0.70 0.12 0.25 .12],'string','关闭', ...
   'CallBack','LuFactGUI(''close'')');
else
    
switch keyword

case 'EditA'
   fid=fopen('CoeMatrix.txt','a+');
   open('CoeMatrix.txt');
 %%%%%%%%%%%%%%%%%%%%%%%%%%
case 'EditB'
    fid=fopen('MatrixB.txt','a+');
    open('MatrixB.txt');
   
 %%%%%%%%%%%%%%%%%%%%%%%%%% 
 
 case 'ReadA'
[filename,pathname]=uigetfile('.txt','打开系数矩阵数据文件');
filepath=strcat(pathname,filename);
if ~isempty(filepath)
A=load(filepath);
else 
    msgbox('打开文件失败','对话框','warn');
end
 %%%%%%%%%%%%%%%%%%%%%%%%%%
 
 case 'ReadB'
[filename,pathname]=uigetfile('.txt','打开右端向量数据文件');
filepath=strcat(pathname,filename);
if ~isempty(filepath)
B=load(filepath);
else 
    msgbox('打开文件失败','对话框','warn');
end

 %%%%%%%%%%%%%%%%%%%%%%%%%% 
 case 'cal'
if ~isempty(A)&&~isempty(B)
 X=LuFact(A,B);
 msgbox({'计算完毕','点击【查看结果】按钮查看结果'},'对话框','help');
else 
    msgbox('请先读入系数矩阵和右端向量数据','对话框','warn');
end

%%%%%%%%%%%%%%%%%%%%%%%%%% 
 case 'result'
    msgbox({'X=',['(',num2str(X'),')']},'解向量X','help');
    
%%%%%%%%%%%%%%%%%%%%%%%%%%
case 'Help'
   msgbox({['  解n阶线性方程组Ax=B的列主元三角分解法通用程序  '],...
          ['* 编辑数据文件时,请严格按矩阵行和列顺序输入数值,'], ...
          ['  同一行元素用空格符号隔开'], ...
          ['* 请勿输入其余多余的字符'], ...
          ['* 确保A是 n×n 阶矩阵'], ...
          ['* 确保B是 n×1 阶矩阵'],...
          },'帮助','help');

%%%%%%%%%%%%%%%%%%%%%%%%%%
case 'Info'
   msgbox({['作者:罗云标'],...
          ['单位:土木工程学院'], ...
          ['学号:050593'], ...
          ['Email:lyb-039@163.com'], ...
          ['水平有限,程序简陋'], ...
          ['不足之处,敬请原谅']
          },'作者信息','help');   
      
 %%%%%%%%%%%%%%%%%%%%%%%%%%     
case 'close'
    close;
end % switch statement for callbacks
end     % end of NewtonMethod

% % 子函数
function X=LuFact(A,B);
[N,N]=size(A);
X=zeros(N,1);
Y=zeros(N,1);
C=zeros(1,N);
R=1:N;
for P=1:N-1
    [max1,j]=max(abs(A(P:N,P)));
    C=A(P,:);
    A(P,:)=A(j+P-1,:);
    A(j+P-1,:)=C;
    d=R(P);
    R(P)=R(j+P-1);
    R(j+P-1)=d;
    if A(P,P)==0
        disp('系数矩阵 A 奇异 ,没有独立解');
        break
    end
    for k=P+1:N
        mult=A(k,P)/A(P,P);
        A(k,P)=mult;
        A(k,P+1:N)=A(k,P+1:N)-mult*A(P,P+1:N);
    end
end
    Y(1)=B(R(1));
    for k=2:N
        Y(k)=B(R(k))-A(k,1:k-1)*Y(1:k-1);
    end
    X(N)=Y(N)/A(N,N);
    for k=N-1:-1:1
        X(k)=(Y(k)-A(k,k+1:N)*X(k+1:N))/A(k,k);
    end
    

⌨️ 快捷键说明

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