Trefethen & Bau & MATLAB & Julia, Lecture 4: SVD
The notebooks: matlab and julia.
Today is about some little conveniences/quirks in Julia. Starting here:
= linspace(0,2*pi,300);
t = (cos(t),sin(t)); x1,x2
The second line assigns to two variables simultaneously. It’s totally unnecessary here, but it helps to emphasize how the quantities are related.
Next we have
= svd(A) U,σ,V
I’m unreasonably happy about having Greek letters as variable names. Just type in ‘’ and hit tab, and voila! It’s a reminder of how, in the U.S. at least, we’re so used to living within the limitations of ancient 128-character ASCII—telegraphs, really—that we can be surprised by expanded possibilities.
Later on we have diagm(σ)
. In MATLAB, the diag
function has two roles: convert a vector to a diagonal matrix, and extract the diagonal elements of a matrix. This creates a curious edge case for MATLAB: for example,
diag([1 2 3])
returns a 3-by-3 matrix, not the single element 1. This is almost always what you want, but I’ve run into gotchas wherein a program works perfectly until an input of the ‘wrong’ size silently changes the behavior of a function. In Julia the two functionalities are separated into diag
and diagm
, which avoids the edge case ambiguity. I think it’s worth the clarity here to have the extra command.
The one thing I missed having in the Julia version was MATLAB’s format
command, which lets you set the default display of numbers in all following output. In this notebook I just had numbers as placeholders and really wanted just to show shapes and sizes. Julia’s full-length output obfuscates the sizes quite a bit, and I’d like to tell it to calm down with all those digits for a little while (rather than saying so with each new output). If that capability is there, I overlooked it.