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
AI Thread Summary
To efficiently invert an nxn matrix in MATLAB and visualize the results, the user needs to ensure that the matrix size changes with each iteration by using A=rand(i,i) instead of A=rand(n,n). Timing the inversion process should involve multiple iterations, such as inverting the matrix 100 or 1000 times, to obtain accurate timing results. When plotting, using plot(log(N), log(t)) can yield a nearly straight line, indicating a logarithmic relationship, while plot(N, t) may show fluctuations due to varying matrix complexities. Additional details about the graph's behavior and potential improvements are necessary for further analysis. Accurate timing and matrix generation are crucial for meaningful visualizations in MATLAB.
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.
 
But can we improve it?
 
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?
 
  • #10
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.
 
  • #11
how to do convolution in matlab?
X(z)=1+(z)^-1
Y(z)=2+z^-2
 
Back
Top