fR3ZNO February 2016

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:

n=[2:13]

I would like to pass this vector through elementwise so that it returns another vector with the calculated values:

condition=cond(hilb(n))

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.

Answers


Stewie Griffin February 2016

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)));
end

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.

Post Status

Asked in February 2016
Viewed 1,094 times
Voted 4
Answered 1 times

Search




Leave an answer