function [L,U,pv,qv] = lugui(A,pivotstrat)
%LUGUI Gaussian elimination demonstration.
%
% LUGUI(A) shows the steps in LU decomposition by Gaussian elimination.
% At each step of the elimination, the pivot that would be chosen by
% MATLAB's partial pivoting algorithm is shown in magenta. You can use
% the mouse to pick any pivot. The pivot is shown in red, the emerging
% columns of L in green, and the emerging rows of U in blue.
%
% LUGUI with no arguments uses a random integer test matrix.
% Type 'help golub' for a description of the test matrices.
%
% A popup menu allows the pivot strategy to be changed dynamically.
% lugui(A,'pick'), choose pivots with the mouse.
% lugui(A,'diagonal'), use diagonal elements as pivots.
% lugui(A,'partial'), use the largest element in the current column.
% lugui(A,'complete'), use the largest element in the unreduced matrix.
%
% [L,U,p,q] = lugui(A,...) returns a lower triangular L, an upper
% triangular U and permutation vectors p and q so that L*U = A(p,q).
%
% See also PIVOTGOLF. % Initialize if nargin < 2
pivotstrat = 'pick';
end
if nargin < 1
n = 2 + ceil(6*rand);
A = golub(n);
end
Asave = A; [m,n] = size(A);
shg
clf
dx = 100;
dy = 30;
warns = warning('off','MATLAB:divideByZero');
set(gcf,'double','on','name','LU Gui', ...
'menu','none','numbertitle','off','color','white', ...
'pos',[480-(dx/2)*min(9,n) 320 (n+1)*dx (m+3)*dy], ...
'windowbuttonupfcn','set(gcf,''tag'',''pivot'')')
stop = uicontrol('style','toggle','string','X','fontweight','bold', ...
'back','w','pos',[(n+1)*dx-25 (m+3)*dy-25 25 25]);
axes('pos',[0 0 1 1])
axis off
Lcolor = [0 .65 0];
Ucolor = [0 0 .90];
Acolor = [0 0 0];
PartialPivotColor = [1 0 1];
PivotColor = [1 0 0];
TempColor = [1 1 1];
paws = 0.1; % Each element has its own handle for j = 1:n
for i = 1:m
t(i,j) = text('units','pixels','string',spf(A(i,j)), ...
'fontname','courier','fontweight','bold','fontsize',14, ...
'horiz','right','color',Acolor, ...
'pos',[20+j*dx 20+(m+2-i)*dy],'userdata',[i j], ...
'buttondownfcn','set(gcf,''userdata'',get(gco,''userdata''))');
end
end % Menus switch lower(pivotstrat)
case 'pick', val = 1;
case 'diagonal', val = 2;
case 'partial', val = 3;
case 'complete', val = 4;
otherwise, val = 1;
end
pivotstrat = uicontrol('pos',[60+(dx/2)*(n-2) 20 180 20],'style','pop', ...
'val',val,'fontsize',12,'back','white','string',{'Pick a pivot', ...
'Diagonal pivoting','Partial pivoting','Complete pivoting'}); % Elimination pv = 1:m;
qv = 1:n;
for k = 1:min(m,n) % If possible, quit early if all(all(A(k:m,k:n)==0)) | all(all(~isfinite(A(k:m,k:n))))
for l = k:min(m,n)
for i = l+1:m
set(t(i,l),'string',spf(A(i,l)),'color',Lcolor)
drawnow
end
for j = l:n
set(t(l,j),'string',spf(A(l,j)),'color',Ucolor)
drawnow
end
end
break
end if (m == n) & (k == n)
p = n;
q = n;
else
pp = min(find(abs(A(k:m,k)) == max(abs(A(k:m,k)))))+k-1;
set(t(pp,k),'color',PartialPivotColor)
p = 0;
q = 0;
while p < k | q < k | p > m | q > n
switch get(pivotstrat,'val') case 1 % Pick a pivot with mouse
pq = get(gcf,'userdata');
if isequal(get(gcf,'tag'),'pivot') & ~isempty(pq)
p = pq(1);
q = pq(2);
set(gcf,'tag','','userdata',[])
else
drawnow
end case 2 % Diagonal pivoting
p = k;
q = k; case 3 % Partial pivoting
p = pp;
q = k; case 4 % Complete pivoting
[p,q] = find(abs(A(k:m,k:n)) == max(max(abs(A(k:m,k:n)))));
p = p(1)+k-1;
q = q(1)+k-1;
end
if get(stop,'value') == 1, break, end
end
if get(stop,'value') == 1, break, end
set(t(pp,k),'color',Acolor)
set(t(p,q),'color',PivotColor)
end
if get(stop,'value') == 1, break, end
pause(10*paws) % Swap columns A(:,[q,k]) = A(:,[k,q]);
qv([q,k]) = qv([k,q]);
for s = .05:.05:1
for i = 1:m
set(t(i,k),'pos',[20+(k+s*(q-k))*dx 20+(m+2-i)*dy])
set(t(i,q),'pos',[20+(q+s*(k-q))*dx 20+(m+2-i)*dy])
end
drawnow
end
t(:,[q,k]) = t(:,[k,q]);
for i = 1:m
set(t(i,k),'string',spf(A(i,k)),'userdata',[i k])
set(t(i,q),'string',spf(A(i,q)),'userdata',[i q])
end
pause(10*paws) % Swap rows A([p,k],:) = A([k,p],:);
pv([p,k]) = pv([k,p]);
for s = .05:.05:1
for j = 1:n
set(t(k,j),'pos',[20+j*dx 20+(m+2-(k+s*(p-k)))*dy])
set(t(p,j),'pos',[20+j*dx 20+(m+2-(p+s*(k-p)))*dy])
end
drawnow
end
t([p,k],:) = t([k,p],:);
pause(10*paws) for j = k:n
set(t(k,j),'string',spf(A(k,j)),'userdata',[k j])
set(t(p,j),'string',spf(A(p,j)),'userdata',[p j])
end
pause(10*paws) % Skip step if column is all zero if all(A(k:m,k) == 0)
for i = k+1:m
set(t(i,k),'string',spf(A(i,k)),'color',Lcolor)
drawnow
end
for j = k:n
set(t(k,j),'string',spf(A(k,j)),'color',Ucolor)
drawnow
end
else % Compute multipliers in L for i = k+1:m
A(i,k) = A(i,k)/A(k,k);
set(t(i,k),'string',spf(A(i,k)),'color',Lcolor)
pause(paws)
drawnow
end % Elimination for j = k+1:n
for i = k+1:m
set(t(i,j),'color',TempColor)
drawnow
pause(paws)
A(i,j) = A(i,j) - A(i,k)*A(k,j);
set(t(i,j),'string',spf(A(i,j)),'color',Acolor)
drawnow
pause(paws)
end
end for j = k:n
set(t(k,j),'string',spf(A(k,j)),'color',Ucolor)
drawnow
end
pause(paws)
end
if k < min(m,n), pause(10*paws), end
end % Seperate L and U into two matrices delete(pivotstrat) for s = .1:.1:1.5
for j = 1:n
for i = 1:m
if i <= j
set(t(i,j),'pos',[20+(j+.10*s)*dx 20+(m+2-i)*dy])
else
set(t(i,j),'pos',[20+(j-.10*s)*dx 20+(m+2-s-i)*dy])
end
end
end
drawnow
end % Insert ones on diagonal of L r = min(m,n);
for j = 1:r
text('units','pixels','string',spf(1.0), ...
'fontname','courier','fontweight','bold','fontsize',14, ...
'horiz','right','color',Lcolor, ...
'pos',[20+(j-0.15)*dx 20+(m+.5-j)*dy]);
end
drawnow
warning(warns) if nargout > 0
L = tril(A(:,1:r),-1) + eye(m,r);
U = triu(A(1:r,:));
else
set(gcf,'userdata',Asave)
set(stop,'value',0,'callback','close(gcf)')
uicontrol('pos',[(n+1)*dx-70 10 60 20],'string','repeat', ...
'back','w','fontsize',12,'callback','lugui(get(gcf,''userdata''))')
end %------------------------------------------------------------ function s = spf(aij)
% Subfunction to format text strings
if aij == 0
f = '%10.0f';
elseif (abs(aij) < 1.e-4) | (abs(aij) >= 1.e4)
f = '%10.1e';
else
f = '%10.4f';
end
s = sprintf(f,aij);

Matlab lugui的更多相关文章

  1. Matlab 绘制三维立体图(以地质异常体为例)

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

  2. Matlab slice方法和包络法绘制三维立体图

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

  3. Matlab 高斯_拉普拉斯滤波器处理医学图像

    前言:本程序是我去年实现论文算法时所做.主要功能为标记切割肝脏区域.时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述. NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像 ...

  4. MATLAB中绘制质点轨迹动图并保存成GIF

    工作需要在MATLAB中绘制质点轨迹并保存成GIF以便展示. 绘制质点轨迹动图可用comet和comet3命令,使用例子如下: t = 0:.01:2*pi;x = cos(2*t).*(cos(t) ...

  5. linux下配置matlab运行环境(MCR)

    在安装好的matlab下有MCR(MatlabCompilerRuntime)在matlab2011/toolbox/compiler/deploy/glnxa64下找到MCRInstaller.zi ...

  6. EMD分析 Matlab 精华总结 附开源工具箱(全)

    前言: 本贴写于2016年12与15日,UK.最近在学习EMD(Empirical Mode Decomposition)和HHT(Hilbert-Huang Transform)多分辨信号处理,FQ ...

  7. Atitit MATLAB 图像处理 经典书籍attilax总结

    Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...

  8. Atitit MATLAB 图像处理attilax总结

    Atitit MATLAB 图像处理attilax总结 1.1. 下载 Matlab7.0官方下载_Matlab2012 v7.0 官方简体中文版-办公软件-系统大全.html1 1.2. Matla ...

  9. Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结

    Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结 1.1. 边缘检测的基本方法Canny最常用了1 1.2. 编写matlab边缘检测代码, ...

随机推荐

  1. PHP MySQL Where 子句 之Where

    WHERE 子句 如需选取匹配指定条件的数据,请向 SELECT 语句添加 WHERE 子句. 语法 SELECT column FROM table WHERE column operator va ...

  2. Nginx日志文件配置与切割

    Nginx日志的指令主要有两条: log_format,设置日志的格式 access_log,指定日志文件的存放路径.格式和缓存大小 两条指令在Nginx配置文件中的位置可以在http{……..}之间 ...

  3. struts2 action重定向

    struts2的结果类型: <action name="loginAction" class="com.itheima.action.LoginAction&quo ...

  4. Babel6.x 转换ES6

    本文介绍Babel6.x的安装过程~ 首先呢,可以使用Babel在线转换 https://babeljs.io/repl/ 然后进入主题:安装Babel(命令行环境,针对Babel6.x版本) 1.首 ...

  5. 让浏览器非阻塞加载javascript的几种方式

    通常大多数浏览器是并行下载资源的,但由于外部脚本的特殊性例如通过脚本改变文档的DOM结构.脚本之间的存在依赖关系.使用document.write 向页面输出HTML等.浏览器为了确保正确执行脚本和呈 ...

  6. oracle 如何搜索当前用户下所有表里含某个值的字段?(转)

    oracle 如何搜索当前用户下所有表里含某个值的字段? create or replace procedure MY_Pro_SearchKeyWord is  v_sql VARCHAR2(400 ...

  7. E - 归并排序 求逆序数

    Description One measure of ``unsortedness'' in a sequence is the number of pairs of entries that are ...

  8. Js中JSON.stringify()与JSON.parse()与eval()详解及使用案例

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使使JSON称为理想的数据交换语 ...

  9. go JSON

    package utils import ( "encoding/json" "errors" ) func JsonToMap(text []byte) (m ...

  10. 微信OPENID授权方法

    今天搞了下微信授权, 总结了下微信的授权规则与步骤 先来几个关键字 Openid  微信ip(属于唯一指向公众号的id) redirect_uri  授权回调地址 State 回调地址带参数 Appi ...