1. function [L,U,pv,qv] = lugui(A,pivotstrat)
  2. %LUGUI Gaussian elimination demonstration.
  3. %
  4. % LUGUI(A) shows the steps in LU decomposition by Gaussian elimination.
  5. % At each step of the elimination, the pivot that would be chosen by
  6. % MATLAB's partial pivoting algorithm is shown in magenta. You can use
  7. % the mouse to pick any pivot. The pivot is shown in red, the emerging
  8. % columns of L in green, and the emerging rows of U in blue.
  9. %
  10. % LUGUI with no arguments uses a random integer test matrix.
  11. % Type 'help golub' for a description of the test matrices.
  12. %
  13. % A popup menu allows the pivot strategy to be changed dynamically.
  14. % lugui(A,'pick'), choose pivots with the mouse.
  15. % lugui(A,'diagonal'), use diagonal elements as pivots.
  16. % lugui(A,'partial'), use the largest element in the current column.
  17. % lugui(A,'complete'), use the largest element in the unreduced matrix.
  18. %
  19. % [L,U,p,q] = lugui(A,...) returns a lower triangular L, an upper
  20. % triangular U and permutation vectors p and q so that L*U = A(p,q).
  21. %
  22. % See also PIVOTGOLF.
  23.  
  24. % Initialize
  25.  
  26. if nargin < 2
  27. pivotstrat = 'pick';
  28. end
  29. if nargin < 1
  30. n = 2 + ceil(6*rand);
  31. A = golub(n);
  32. end
  33. Asave = A;
  34.  
  35. [m,n] = size(A);
  36. shg
  37. clf
  38. dx = 100;
  39. dy = 30;
  40. warns = warning('off','MATLAB:divideByZero');
  41. set(gcf,'double','on','name','LU Gui', ...
  42. 'menu','none','numbertitle','off','color','white', ...
  43. 'pos',[480-(dx/2)*min(9,n) 320 (n+1)*dx (m+3)*dy], ...
  44. 'windowbuttonupfcn','set(gcf,''tag'',''pivot'')')
  45. stop = uicontrol('style','toggle','string','X','fontweight','bold', ...
  46. 'back','w','pos',[(n+1)*dx-25 (m+3)*dy-25 25 25]);
  47. axes('pos',[0 0 1 1])
  48. axis off
  49. Lcolor = [0 .65 0];
  50. Ucolor = [0 0 .90];
  51. Acolor = [0 0 0];
  52. PartialPivotColor = [1 0 1];
  53. PivotColor = [1 0 0];
  54. TempColor = [1 1 1];
  55. paws = 0.1;
  56.  
  57. % Each element has its own handle
  58.  
  59. for j = 1:n
  60. for i = 1:m
  61. t(i,j) = text('units','pixels','string',spf(A(i,j)), ...
  62. 'fontname','courier','fontweight','bold','fontsize',14, ...
  63. 'horiz','right','color',Acolor, ...
  64. 'pos',[20+j*dx 20+(m+2-i)*dy],'userdata',[i j], ...
  65. 'buttondownfcn','set(gcf,''userdata'',get(gco,''userdata''))');
  66. end
  67. end
  68.  
  69. % Menus
  70.  
  71. switch lower(pivotstrat)
  72. case 'pick', val = 1;
  73. case 'diagonal', val = 2;
  74. case 'partial', val = 3;
  75. case 'complete', val = 4;
  76. otherwise, val = 1;
  77. end
  78. pivotstrat = uicontrol('pos',[60+(dx/2)*(n-2) 20 180 20],'style','pop', ...
  79. 'val',val,'fontsize',12,'back','white','string',{'Pick a pivot', ...
  80. 'Diagonal pivoting','Partial pivoting','Complete pivoting'});
  81.  
  82. % Elimination
  83.  
  84. pv = 1:m;
  85. qv = 1:n;
  86. for k = 1:min(m,n)
  87.  
  88. % If possible, quit early
  89.  
  90. if all(all(A(k:m,k:n)==0)) | all(all(~isfinite(A(k:m,k:n))))
  91. for l = k:min(m,n)
  92. for i = l+1:m
  93. set(t(i,l),'string',spf(A(i,l)),'color',Lcolor)
  94. drawnow
  95. end
  96. for j = l:n
  97. set(t(l,j),'string',spf(A(l,j)),'color',Ucolor)
  98. drawnow
  99. end
  100. end
  101. break
  102. end
  103.  
  104. if (m == n) & (k == n)
  105. p = n;
  106. q = n;
  107. else
  108. pp = min(find(abs(A(k:m,k)) == max(abs(A(k:m,k)))))+k-1;
  109. set(t(pp,k),'color',PartialPivotColor)
  110. p = 0;
  111. q = 0;
  112. while p < k | q < k | p > m | q > n
  113. switch get(pivotstrat,'val')
  114.  
  115. case 1 % Pick a pivot with mouse
  116. pq = get(gcf,'userdata');
  117. if isequal(get(gcf,'tag'),'pivot') & ~isempty(pq)
  118. p = pq(1);
  119. q = pq(2);
  120. set(gcf,'tag','','userdata',[])
  121. else
  122. drawnow
  123. end
  124.  
  125. case 2 % Diagonal pivoting
  126. p = k;
  127. q = k;
  128.  
  129. case 3 % Partial pivoting
  130. p = pp;
  131. q = k;
  132.  
  133. case 4 % Complete pivoting
  134. [p,q] = find(abs(A(k:m,k:n)) == max(max(abs(A(k:m,k:n)))));
  135. p = p(1)+k-1;
  136. q = q(1)+k-1;
  137. end
  138. if get(stop,'value') == 1, break, end
  139. end
  140. if get(stop,'value') == 1, break, end
  141. set(t(pp,k),'color',Acolor)
  142. set(t(p,q),'color',PivotColor)
  143. end
  144. if get(stop,'value') == 1, break, end
  145. pause(10*paws)
  146.  
  147. % Swap columns
  148.  
  149. A(:,[q,k]) = A(:,[k,q]);
  150. qv([q,k]) = qv([k,q]);
  151. for s = .05:.05:1
  152. for i = 1:m
  153. set(t(i,k),'pos',[20+(k+s*(q-k))*dx 20+(m+2-i)*dy])
  154. set(t(i,q),'pos',[20+(q+s*(k-q))*dx 20+(m+2-i)*dy])
  155. end
  156. drawnow
  157. end
  158. t(:,[q,k]) = t(:,[k,q]);
  159. for i = 1:m
  160. set(t(i,k),'string',spf(A(i,k)),'userdata',[i k])
  161. set(t(i,q),'string',spf(A(i,q)),'userdata',[i q])
  162. end
  163. pause(10*paws)
  164.  
  165. % Swap rows
  166.  
  167. A([p,k],:) = A([k,p],:);
  168. pv([p,k]) = pv([k,p]);
  169. for s = .05:.05:1
  170. for j = 1:n
  171. set(t(k,j),'pos',[20+j*dx 20+(m+2-(k+s*(p-k)))*dy])
  172. set(t(p,j),'pos',[20+j*dx 20+(m+2-(p+s*(k-p)))*dy])
  173. end
  174. drawnow
  175. end
  176. t([p,k],:) = t([k,p],:);
  177. pause(10*paws)
  178.  
  179. for j = k:n
  180. set(t(k,j),'string',spf(A(k,j)),'userdata',[k j])
  181. set(t(p,j),'string',spf(A(p,j)),'userdata',[p j])
  182. end
  183. pause(10*paws)
  184.  
  185. % Skip step if column is all zero
  186.  
  187. if all(A(k:m,k) == 0)
  188. for i = k+1:m
  189. set(t(i,k),'string',spf(A(i,k)),'color',Lcolor)
  190. drawnow
  191. end
  192. for j = k:n
  193. set(t(k,j),'string',spf(A(k,j)),'color',Ucolor)
  194. drawnow
  195. end
  196. else
  197.  
  198. % Compute multipliers in L
  199.  
  200. for i = k+1:m
  201. A(i,k) = A(i,k)/A(k,k);
  202. set(t(i,k),'string',spf(A(i,k)),'color',Lcolor)
  203. pause(paws)
  204. drawnow
  205. end
  206.  
  207. % Elimination
  208.  
  209. for j = k+1:n
  210. for i = k+1:m
  211. set(t(i,j),'color',TempColor)
  212. drawnow
  213. pause(paws)
  214. A(i,j) = A(i,j) - A(i,k)*A(k,j);
  215. set(t(i,j),'string',spf(A(i,j)),'color',Acolor)
  216. drawnow
  217. pause(paws)
  218. end
  219. end
  220.  
  221. for j = k:n
  222. set(t(k,j),'string',spf(A(k,j)),'color',Ucolor)
  223. drawnow
  224. end
  225. pause(paws)
  226. end
  227. if k < min(m,n), pause(10*paws), end
  228. end
  229.  
  230. % Seperate L and U into two matrices
  231.  
  232. delete(pivotstrat)
  233.  
  234. for s = .1:.1:1.5
  235. for j = 1:n
  236. for i = 1:m
  237. if i <= j
  238. set(t(i,j),'pos',[20+(j+.10*s)*dx 20+(m+2-i)*dy])
  239. else
  240. set(t(i,j),'pos',[20+(j-.10*s)*dx 20+(m+2-s-i)*dy])
  241. end
  242. end
  243. end
  244. drawnow
  245. end
  246.  
  247. % Insert ones on diagonal of L
  248.  
  249. r = min(m,n);
  250. for j = 1:r
  251. text('units','pixels','string',spf(1.0), ...
  252. 'fontname','courier','fontweight','bold','fontsize',14, ...
  253. 'horiz','right','color',Lcolor, ...
  254. 'pos',[20+(j-0.15)*dx 20+(m+.5-j)*dy]);
  255. end
  256. drawnow
  257. warning(warns)
  258.  
  259. if nargout > 0
  260. L = tril(A(:,1:r),-1) + eye(m,r);
  261. U = triu(A(1:r,:));
  262. else
  263. set(gcf,'userdata',Asave)
  264. set(stop,'value',0,'callback','close(gcf)')
  265. uicontrol('pos',[(n+1)*dx-70 10 60 20],'string','repeat', ...
  266. 'back','w','fontsize',12,'callback','lugui(get(gcf,''userdata''))')
  267. end
  268.  
  269. %------------------------------------------------------------
  270.  
  271. function s = spf(aij)
  272. % Subfunction to format text strings
  273. if aij == 0
  274. f = '%10.0f';
  275. elseif (abs(aij) < 1.e-4) | (abs(aij) >= 1.e4)
  276. f = '%10.1e';
  277. else
  278. f = '%10.4f';
  279. end
  280. 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. formidable上传图片

    function uploadfiles(res, req){ var form = new formidable.IncomingForm(); form.parse(req,function(er ...

  2. 模块工具类--utils

    File: js\utils.js/** * 模块工具类,用来初始化各模块视图.自定绑定事件以及其他辅助功能等 * @class Utils */Utils = (function() { var i ...

  3. vim中对文本的选择

    本文主要解说vim中对文本的选择,vim中选择文本分为: (1)选择字符  ----  命令行模式下输入小写v (2)选择行     ----  命令行模式下输入大写V (3)选择块     ---- ...

  4. Git(一):Git与版本号控制简单介绍

    Intro 版本号控制系统是什么      版本号控制系统(Version Control System,VCS)能够帮助我们记录和跟踪项目中各文件内容的改动变化.它能够帮我们保存项目的各个版本号.以 ...

  5. 【计算几何初步:多边形中心】【HDU1115】Lifting the Stone

    一.质点系重心公式 x=(x1*m1+x2*m2+x3*m3.....xn*mn)/M  (M=m1+m2+m3+m4...+mn) 二.三角形重心 可直接求得,但在多边形剖分中 各三角形的质点的质量 ...

  6. 查看Linux操作系统版本

      1.查看内核版本命令: [root@server1 Desktop]# cat /proc/version Linux version 2.6.32-358.el6.x86_64 (mockbui ...

  7. linux进程间通信之共享内存篇

    本文是对http://www.cnblogs.com/andtt/articles/2136279.html中共享内存(上)的进一步阐释说说明 1 共享内存的实现原理 共享内存是linux进程间通讯的 ...

  8. 关于继承扩展ASP.NET控件(以Textbox为例)

    以下是一个相对简陋的扩展, 主要是针对金额显示的Textbox扩展. using System; using System.Collections.Generic; using System.Linq ...

  9. 使用API查询天气

    服务端代码 [HttpPost] public ActionResult GetWeather() { HttpWebRequest request = (HttpWebRequest)HttpWeb ...

  10. 工具使用 eclipse the user operation is waiting for Building Working to be completed。

    问题定位: 在使用 IDE开发时,学习一个新事物如语言,框架,出现错误时暂时无法判断是新写的代码错还是IDE使用错: 则编写简单的未使用该技术的test.java ,运行后还有异常出现,则不是代码问题 ...