How can I efficiently invert an nxn matrix in MATLAB and visualize the results?

  • Thread starter Thread starter Nusc
  • Start date Start date
  • Tags Tags
    Matlab Matrix
Join the discussion
Registration is free. Start your own thread to ask a follow-up.
10 replies · 3K views
Nusc
Messages
752
Reaction score
2

Homework Statement



I need to find out how fast it takes MATLAB to invert an nxn matrix and:
plot t(n) vs n
plot log(time) vs. log(n)

Homework Equations





The Attempt at a Solution



for n = 1:10
A=rand(n);
tic
b=inv(A);
t(n)=toc;
end
plot(t(n),n);

Nothing shows up, what am I missing or doing incorrectly?
 
Physics news on Phys.org
I think the semicolon after the plot command might prevent it from being displayed.

Also, when plotting y vs. x, you should use plot(x, y) and not plot(y, x)
 
function time(n)
for i=1:n
N(i)=i;
A=rand(n,n);
tic
inv(A);
t(i)=toc;
end
plot(log(N), log(t))

I should get a straight line but I do not, do you know what's wrong?
 
Nusc said:
function time(n)
for i=1:n
N(i)=i;
A=rand(n,n);
tic
inv(A);
t(i)=toc;
end
plot(log(N), log(t))

I should get a straight line but I do not, do you know what's wrong?

The small problem with the above code is that you're always finding the time required to invert an array of size n x n (you should probably have A=rand(i, i) instead). The big problem with your methodology is that it executes too fast! See the following MATLAB online documentation page regarding analysis of program performance:

http://www.mathworks.com/access/hel...pdesk/help/techdoc/matlab_prog/f8-790895.html
 
If the code is executing too fast to get an accurate time, I suggest an additional loop and finding the time it takes to invert an nxn matrix 100 or 1000 times, and then just divide the total time by 100 or 1000.

I don't know the MATLAB language, but the idea is:

Code:
{code to create an nxn matix goes here}

for j=1:1000
   {code to invert the nxn matrix goes here}
end

Of course, as n gets larger you would want to reduce the number of times you invert it.
 
function time(n)
for i=1:n
N(i)=i;
A=rand(i,i);
tic
for n=1:1000
inv(A);
end
t(i)=toc;
end

plot(N, t) - Gives me some random fluxuation increasing exponentially
plot(log(N), log(t)) - Gives me almost a straight line, how can I improve this?
 
Nusc said:
plot(N, t) - Gives me some random fluxuation increasing exponentially
plot(log(N), log(t)) - Gives me almost a straight line, how can I improve this?

Why is this a problem? Perhaps it is supposed to be a straight line.
 
Perhaps, but we need more information than "it's not a perfect straight line" in order to make any helpful suggestions.

Can you describe the graph in more detail, or better yet post an image of it?
 
Nusc said:
But can we improve it?

Perhaps. As a pedagogical question, what would happen if you were to take the inverse of a random matrix every time? HINT: are all matrices of equal size equally easy to row-reduce? Now, how much does it cost you to generate that random matrix? Actually, I guess it's just as easy to determine that number.
 
how to do convolution in matlab?
X(z)=1+(z)^-1
Y(z)=2+z^-2