?? lufactgui.m
字號(hào):
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','讀入系數(shù)矩陣', ...
'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','編輯系數(shù)矩陣', ...
'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','計(jì)算', ...
'CallBack','LuFactGUI(''cal'')');
uicontrol('pos',[0.40 0.32 0.25 .12],'string','查看結(jié)果', ...
'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','關(guān)閉', ...
'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','打開系數(shù)矩陣數(shù)據(jù)文件');
filepath=strcat(pathname,filename);
if ~isempty(filepath)
A=load(filepath);
else
msgbox('打開文件失敗','對(duì)話框','warn');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%
case 'ReadB'
[filename,pathname]=uigetfile('.txt','打開右端向量數(shù)據(jù)文件');
filepath=strcat(pathname,filename);
if ~isempty(filepath)
B=load(filepath);
else
msgbox('打開文件失敗','對(duì)話框','warn');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%
case 'cal'
if ~isempty(A)&&~isempty(B)
X=LuFact(A,B);
msgbox({'計(jì)算完畢','點(diǎn)擊【查看結(jié)果】按鈕查看結(jié)果'},'對(duì)話框','help');
else
msgbox('請(qǐng)先讀入系數(shù)矩陣和右端向量數(shù)據(jù)','對(duì)話框','warn');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%
case 'result'
msgbox({'X=',['(',num2str(X'),')']},'解向量X','help');
%%%%%%%%%%%%%%%%%%%%%%%%%%
case 'Help'
msgbox({[' 解n階線性方程組Ax=B的列主元三角分解法通用程序 '],...
['* 編輯數(shù)據(jù)文件時(shí),請(qǐng)嚴(yán)格按矩陣行和列順序輸入數(shù)值,'], ...
[' 同一行元素用空格符號(hào)隔開'], ...
['* 請(qǐng)勿輸入其余多余的字符'], ...
['* 確保A是 n×n 階矩陣'], ...
['* 確保B是 n×1 階矩陣'],...
},'幫助','help');
%%%%%%%%%%%%%%%%%%%%%%%%%%
case 'Info'
msgbox({['作者:羅云標(biāo)'],...
['單位:土木工程學(xué)院'], ...
['學(xué)號(hào):050593'], ...
['Email:lyb-039@163.com'], ...
['水平有限,程序簡(jiǎn)陋'], ...
['不足之處,敬請(qǐng)?jiān)?#039;]
},'作者信息','help');
%%%%%%%%%%%%%%%%%%%%%%%%%%
case 'close'
close;
end % switch statement for callbacks
end % end of NewtonMethod
% % 子函數(shù)
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('系數(shù)矩陣 A 奇異 ,沒有獨(dú)立解');
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -