Matlab - calculating condition numbers for hilbert matrices
Okay, first off I feel silly for asking this question since it seems like the answer should be simple but I can't figure it out.
I have a vector n:
I would like to pass this vector through elementwise so that it returns another vector with the calculated values:
hilb(n) returns a Hilbert matrix with the dimension n. cond() then calculates the condition number, which is a scalar value. Currently, Matlab is returning condition as a single value using the first value from n, which is 2 instead of a vector that is equal in length to n.
I am aware of using .* , sin.() and other commands to compute things elementwise, but I can't find how to do this with a function such as this.
You can't pass a vector to hilb like that, unfortunately. What you should do is use a loop, or simpler, arrayfun:
condition = arrayfun(@(x) cond(hilb(x)), n)
Note that arrayfun is just a disguised loop, so it offers no performance benefit compared to explicitly writing the loop.
condition = zeros(1,numel(n));
for ii = 1:numel(n)
condition(ii) = cond(hilb(n(ii)));
Keep in mind that hilb is an ill-conditioned matrix, thus your values will get very high (cond(hilb(13))=8.3042e+19. This means your resulting vector will look like: 1.0e+19* 0.0000 0.0000 ... 0.0017 8.3042. If you use format short e, then you'll get to see the values of each individual element: 1.9281e+01 5.2406e+02 ... 8.3042e+19.
Asked in February 2016Viewed 1,094 timesVoted 4Answered 1 times