An Interesting, and Perhaps New, Matrix
I do not recall having seen this matrix before, but I will not be surprised to learn that somebody else already knows all about it, especially if that person's name is Nick.
Contents
Q
I've been investigating the matrices generated by this elegant one-liner.
Q = @(n) (-n:n).^2 + (-n:n)'.^2;
The Q is for "quadratic".
The middle column contains the squares of the integers from -n to n. So does the middle row. The apostrophe summons singleton expansion. The resulting matrix has order 2*n+1. Here is Q(5).
Q5 = Q(5)
Q5 = 50 41 34 29 26 25 26 29 34 41 50 41 32 25 20 17 16 17 20 25 32 41 34 25 18 13 10 9 10 13 18 25 34 29 20 13 8 5 4 5 8 13 20 29 26 17 10 5 2 1 2 5 10 17 26 25 16 9 4 1 0 1 4 9 16 25 26 17 10 5 2 1 2 5 10 17 26 29 20 13 8 5 4 5 8 13 20 29 34 25 18 13 10 9 10 13 18 25 34 41 32 25 20 17 16 17 20 25 32 41 50 41 34 29 26 25 26 29 34 41 50
I like the contour plot.
contourf(Q(100)) axis square colorbar title('Q(100)')
D
For another blog post under development, I need a logical mask that carves a circular region out of graphic. This disc does the job.
D = @(n) Q(n) <= n^2;
Here is my carver.
spy(D(100))
title('D(100)')
Did you notice the digits in the count of nonzeros in D(100)? It happens whenever n is a power of 10.
fprintf('%15s %12s\n','n','nnz(D(n))') for n = 10.^(0:4) fprintf('%15d %12d\n',n, nnz(D(n))) end
n nnz(D(n)) 1 5 10 317 100 31417 1000 3141549 10000 314159053
O.E.I.S.
A classic problem, described in the Online Encyclopedia of Integer Sequences, asks how many points with integer coordinates lie within a disc of increasing radius. Our nonzero count provides the answer.
fprintf('%15s %8s\n','n','a(n)') for n = [1:15 99:101 499:501 999:1001] if mod(n,100) == 99 fprintf('%15s %8s\n','-','-') end a(n) = nnz(D(n)); fprintf('%15d %8d\n',n,a(n)) end
n a(n) 1 5 2 13 3 29 4 49 5 81 6 113 7 149 8 197 9 253 10 317 11 377 12 441 13 529 14 613 15 709 - - 99 30757 100 31417 101 32017 - - 499 782197 500 785349 501 788509 - - 999 3135157 1000 3141549 1001 3147833
R
Taking the reciprocals of the matrix entries, and reducing the range of the anonymous index, produces a matrix that behaves a bit like the Hilbert matrix, hilb(n).
R = @(n) 1./((1:n).^2 + (1:n)'.^2);
Here are the 5-by-5's.
format rat
R5 = R(5)
H5 = hilb(5)
R5 = 1/2 1/5 1/10 1/17 1/26 1/5 1/8 1/13 1/20 1/29 1/10 1/13 1/18 1/25 1/34 1/17 1/20 1/25 1/32 1/41 1/26 1/29 1/34 1/41 1/50 H5 = 1 1/2 1/3 1/4 1/5 1/2 1/3 1/4 1/5 1/6 1/3 1/4 1/5 1/6 1/7 1/4 1/5 1/6 1/7 1/8 1/5 1/6 1/7 1/8 1/9
Condition
Going away from the diagonal, the elements of R(n) decay more rapidly than those of hilb(n), so R(n) is better conditioned than hilb(n).
format short e fprintf('%15s %12s %12s\n','n','cond R','cond H') for n = 1:12 fprintf('%15d %12.2e %12.2e\n',n,cond(R(n)),cond(hilb(n))) end
n cond R cond H 1 1.00e+00 1.00e+00 2 1.53e+01 1.93e+01 3 2.04e+02 5.24e+02 4 2.59e+03 1.55e+04 5 3.21e+04 4.77e+05 6 3.89e+05 1.50e+07 7 4.67e+06 4.75e+08 8 5.54e+07 1.53e+10 9 6.53e+08 4.93e+11 10 7.65e+09 1.60e+13 11 8.92e+10 5.22e+14 12 1.04e+12 1.62e+16
Extra Credit
What is the rank of Q(n)? Why? See a paper in SIAM Review by Strang and Moler.
Why is the table of values for nnz(D(10^k)) so short? How might you extend this table?
Investigate R(n). Is it positive definite? What are its eigenvalues? What is its inverse? What is the sign pattern of the elements of its inverse? For what values of n can you compute the inverse reliably using floating point arithmetic? How does all this compare with hilb(n) and invhilb(n) ?
Comments in the Comments, or in email to me, are welcome.
Get
the MATLAB code
Published with MATLAB® R2022a