Matlab lugui
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的更多相关文章
- Matlab 绘制三维立体图(以地质异常体为例)
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- Matlab slice方法和包络法绘制三维立体图
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- Matlab 高斯_拉普拉斯滤波器处理医学图像
前言:本程序是我去年实现论文算法时所做.主要功能为标记切割肝脏区域.时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述. NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像 ...
- MATLAB中绘制质点轨迹动图并保存成GIF
工作需要在MATLAB中绘制质点轨迹并保存成GIF以便展示. 绘制质点轨迹动图可用comet和comet3命令,使用例子如下: t = 0:.01:2*pi;x = cos(2*t).*(cos(t) ...
- linux下配置matlab运行环境(MCR)
在安装好的matlab下有MCR(MatlabCompilerRuntime)在matlab2011/toolbox/compiler/deploy/glnxa64下找到MCRInstaller.zi ...
- EMD分析 Matlab 精华总结 附开源工具箱(全)
前言: 本贴写于2016年12与15日,UK.最近在学习EMD(Empirical Mode Decomposition)和HHT(Hilbert-Huang Transform)多分辨信号处理,FQ ...
- Atitit MATLAB 图像处理 经典书籍attilax总结
Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...
- Atitit MATLAB 图像处理attilax总结
Atitit MATLAB 图像处理attilax总结 1.1. 下载 Matlab7.0官方下载_Matlab2012 v7.0 官方简体中文版-办公软件-系统大全.html1 1.2. Matla ...
- Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结 1.1. 边缘检测的基本方法Canny最常用了1 1.2. 编写matlab边缘检测代码, ...
随机推荐
- poj 3301 Texas Trip(几何+三分)
Description After a day trip with his friend Dick, Harry noticed a strange pattern of tiny holes in ...
- poj 2377 Bad Cowtractors(最大生成树!)
Description Bessie has been hired to build a cheap internet network among Farmer John's N (2 <= N ...
- iOS https认证 && SSL/TLS证书申请
1.下面列出截止2016年底市面上常见的免费CA证书: 腾讯云SSL证书管理(赛门铁克TrustAsia DV SSL证书)阿里云云盾证书服务(赛门铁克DV SSL证书)百度云SSL证书服务Let's ...
- 棋盘覆盖(大数阶乘,大数相除 + java)
棋盘覆盖 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的 ...
- Longest Palindromic Substring-----最长回文子串
首先讲讲什么是回文, 看看Wiki是怎么说的:回文,亦称回环,是正读反读都能读通的句子.亦有将文字排列成圆圈者,是一种修辞方式和文字游戏.回环运用得当.能够表现两种事物或现象相互依靠或排斥的关系, 比 ...
- CF(441D Valera and Swaps)置换群
题意:1-n的一个排列, p2, ..., pn,f(p)的定义是此排列要交换最少的数对能够回到原排列1,2,3,4...n.给一个排列p.要将其变换成f值为m的排列,问至少要交换几个数对,并输出字典 ...
- 使用java连接hive,并执行hive语句详解
安装hadoop 和 hive我就不多说了,网上太多文章 自己看去 首先,在机器上打开hiveservice hive --service hiveserver -p 50000 & 打开50 ...
- [jQuery] 自做 jQuery Plugin - Part 1
有時候寫 jQuery 時,常會發現一些簡單的效果可以重複利用.只是每次用 Copy & Paste 大法似乎不是件好事,有沒有什麼方法可以讓我們把這些效果用到其他地方呢? 沒錯,就是用 jQ ...
- 【快速选择算法与nth_element函数】【续UVA11300 】
在白书中提到了一种O(n)级别的寻找中位数算法 就是我们今天要介绍的主角 快速选择算法 类似快排 选择一个比较元素 进行递归处理寻找第k大元素 假设最后比较元素到了i 以下描述是我写快排的常用字符 所 ...
- C#中打日志导出日志到txt文本
/// <summary> /// 打日志 /// </summary> /// <param name="log"></param> ...