%%%%%%% %%%%%% % %%%%%% %%%%%% %%%%%%% Wooster MAA/SIAM Presentation, October , 1999 %%%%%% % %%%%%% %%%%%% %%%%%%% %%%%%% % \Header{MPI} \begin{slide*} \centerline{\psframebox[fillstyle=solid,fillcolor=red,framearc=.3, framesep=2mm]{\Large\bfseries\color{yellow}% Message Passing Interface}} \vspace{2cm} \centerline{\psframebox[fillstyle=solid,fillcolor=Beige, framearc=.3]{\bfseries% \begin{tabular}{c} Jalel \textsc{Chergui}\\ Isabelle \textsc{Dupays}\\ Denis \textsc{Girou}\\ Stephane \textsc{Requena}\\[0.8mm] {\small\texttt{}} \end{tabular}}} \end{slide*} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % slide number: 1 % \SlideColours[red]{black}{Pink} \begin{slide*}{} \heading{Simple Skins for Matrices} \heading{and Other Meshes:} \heading{Surface Fitting via Matrix SVD} \large \bigskip {\centerline{{\blue{Andy Long and Cliff Long}}}} \bigskip {\centerline{October 22, 1999}} \bigskip {\centerline{Ohio Section of the MAA}} \bigskip {\centerline{College of Wooster}} \end{slide*}{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \SlideColours{white}{red} \begin{slide*}{} \heading{The Idea:} \begin{itemize} \item Decompose Matrix $A_{m \times n}$ by SVD: $A=U \Lambda V^T$ \item Associate $A$ with spatial coordinates by mapping to a grid in the plane (usually simply associate indices with space coordinates): $a_{ij}=a(i,j)$. \item Column vectors of $U$ and $V$ form natural bases of the column and row spaces of $A$, respectively. \item Interpolate these vectors, and recombine to get (you'll see!) \[ A(x,y) = \u{U}(x)^T \Lambda \u{V}(y) \] \end{itemize} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \end{slide*}{} % % slide number: 2 \definecolor{Gold}{rgb}{1.,0.84,0.} \slideframe[\psset{fillstyle=gradient,gradmidpoint=0.5, gradbegin=Gold,gradend=yellow}]{scplain} \begin{slide*}{} \heading{An Example of SVD} \small {\bf Let's keep it simple:} \[ A = \left [ \begin{array}{cc} {-0.4}&{2}\cr {2.2}&{-1} \end{array} \right ] = \] \[ \left [ \begin{array}{cc} {-.6}&{.8}\cr {.8}&{.6} \end{array} \right ] \left [ \begin{array}{cc} {2\sqrt{2}}&{0}\cr {0}&{\sqrt{2}} \end{array} \right ] \left [ \begin{array}{cc} {\frac{1}{\sqrt{2}}}&{-\frac{1}{\sqrt{2}}}\cr {\frac{1}{\sqrt{2}}}&{\frac{1}{\sqrt{2}}} \end{array} \right ] = \] \[ \left [ \begin{array}{c} {-.6}\cr {.8} \end{array} \right ] 2\sqrt{2} \left [ \begin{array}{cc} {\frac{1}{\sqrt{2}}}&{-\frac{1}{\sqrt{2}}} \end{array} \right ] + \left [ \begin{array}{cc} {.8}\cr {.6} \end{array} \right ] \sqrt{2} \left [ \begin{array}{cc} {\frac{1}{\sqrt{2}}}&{\frac{1}{\sqrt{2}}} \end{array} \right ] \] {\bf{Insight:}} we can think of the SVD as \[ A = \sum_{k=1}^{m} \u{u}^k \lambda^k (\u{v}^k)^T, \] where $\u{u}^k$ is the $k^{th}$ column vector of $U$, etc. Matrices can be represented using {\bf{one-dimensional objects}}. \end{slide*}{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{slide*}{} \heading{How does the fitting process work?} \small Thus, in the matrix sense, \[ a_{ij} = \sum_{k=1}^{n} \u{u}^k_{i} \lambda^k \u{v}^k_{j}. \] Using our spatial indexing we have \[ a(i,j) = \sum_{k=1}^{n} \u{u}^k(i) \lambda^k \u{v}^k(j), \] or \huge \[ A(x,y) = \sum_{k=1}^{n} u^k(x) \lambda^k v^k(y) \] \small If $u^k(x)$ and $v^k(y)$ are interpolators of their respective vectors, then it is clear that we have interpolated the matrix by this scheme; if they smooth (rather than interpolate), then we have a smoothed fit. \end{slide*}{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %\figger{/afs/sph.umich.edu/user/a/aelon/dad/CMJ/nnfig1.eps}{3.5}{The %``skeleton'' of an example data matrix $A$.}{67 212 562 583} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %\figger{/afs/sph.umich.edu/user/a/aelon/dad/CMJ/nnfig2.eps}{3.5}{Top row: The %singular vectors corresponding to the largest singular value and both their %linear-spline and Hermite interpolants. Bottom row: at left the outer product %skeleton of the singular vectors, and at right the product of the Hermite %interpolating functions - a skin of the first rank-one matrix.}{66 211 549 608} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %\figger{/afs/sph.umich.edu/user/a/aelon/dad/CMJ/nnfig3.eps}{3.5}{Top row: at %left the outer product skeleton of the singular vectors corresponding to the %second singular value, and at right its Hermite skin. At bottom we show the %data matrix $A$ and the result of adding together the %rank-one interpolants to form a $C^1$-continuous interpolant to $A$.}{67 211 %545 583} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %\figger{/afs/sph.umich.edu/user/a/aelon/dad/CMJ/fig-abe.ps}{4}{At left is the %scanned image of Abe; at right the improved Abe, using roughly 25 times as many %points obtained via Hermite interpolation.}{-93 196 707 596} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %\figger{/afs/sph.umich.edu/user/a/aelon/dad/CMJ/abescanner.ps}{4}{This crude %scanner was used to read points off a bust of Abraham Lincoln, and a ``mere'' %1728 points required a good deal of labor!}{0 0 435 262} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %% \figgertoo{/afs/sph.umich.edu/user/a/aelon/dad/CMJ/out/faroukih.rle.ps} %% {/afs/sph.umich.edu/user/a/aelon/dad/CMJ/out/farouki.rle.ps} %% {/afs/sph.umich.edu/user/a/aelon/dad/CMJ/out/faroukis.rle.ps} %% {Top: Farouki's $6 \times 3$ matrix of points. The original triplets are %% points in three-space which fall roughly on a pinched grid. At top and bottom %% are two different skins generated for Farouki's mesh: at top, a Hermite %% interpolant, and, at bottom, a cubic spline interpolant.}{106 256 506 536} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %\figger{SVDfarouki.eps}{3.5}{Farouki mesh: interpolated coordinate by %coordinate.}{74 420 543 583} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %\figger{/afs/sph.umich.edu/user/a/aelon/dad/cagd/fig3nn.eps}{3.5}{Using this %method we derived a method for matching arbitrary curve meshes.}{81 414 552 %583} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %\figger{recycle2.eps}{3.5}{Twisted %recycling symbol, constructed from data.}{67 208 567 604} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \definecolor{RedA}{hsb}{0.9,0.3,0.7} \definecolor{RedB}{hsb}{0.9,0.3,1} \slideframe[\psset{fillstyle=gradient,gradientHSB=true,gradmidpoint=0, gradbegin=RedA,gradend=RedB}]{scplain} \begin{slide*}{} % % slide number: % \heading{Conclusion} \begin{itemize} \item \small In a nice, concise form, \[ A(x,y) = \u{U}(x)^T \Lambda \u{V}(y) \] where $u^k(x) = \u{U}(x)_k$, etc. \item Our method provides a simple, intuitive, and easily implemented way to create skins for mesh objects (particularly matrices). An example of one type of odd mesh is Abe, in cylindrical coordinates; odder examples include the Farouki data and recycling symbol. \item Although we haven't gone into the details, this method allows for the matching of boundary curves. \item Differentiability of the resulting surface is a direct consequence of the differentiability of the interpolating functions. \end{itemize} \end{slide*}{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%