Appending a column to a matrix in a for loop.

35 Ansichten (letzte 30 Tage)
Andrew You
Andrew You am 10 Sep. 2014
Bearbeitet: Julia am 10 Sep. 2014
So the task that I am trying to complete is as follows: write a script that starts with a random m vector, and apply the HilbertMatrix (HilbertMatrix(m)) to it N times, saving the result of the n-th multiplication as the n-th column of a matrix V. This is what I have so far:
r = randi([1 100],1,1); %Choose a random number "r" between 1 and 100.
m = randi([1 100],r,1); %Create a vector "m" with dimensions rx1 i.e. a random vector.
H = HilbertMatrix(r); %Create a Hilbert matrix of size rxr.
for i=1:N %For every i, you multiply the vector by the Hilbert matrix.
v = H^(i).*m; %Your result goes to the the 1st column of a new matrix.
V = [V v]; %You continue so that the n-th multiplication of the Hilbert with the vector goes to the nth column.
end
disp(V) %Show the matrix.
I seem to be getting a few errors. I feel though that my logic is there. I am new to MATLAB but have had exeprience with Python. Hopefully, they are syntax errors. Here is my HilbertMatrix function code:
function h = HilbertMatrix(m)
H = zeros(m,m) %Create an empty mxm matrix.
for k=1:m
for j=1:m
H(j,k)=1/(j+k-1) %Definition of the Hilbert Matrix.
H(k,j)=H(j,k) %Entries of a Hilbert Matrix are symmetric along the diagonal.
end
end
end
Any and all help will be greatly appreciated. Thank you!
  1 Kommentar
Andrew You
Andrew You am 10 Sep. 2014
My Hilbert function is correct. I ran the function for different n-values and the entries were correct. I believe my script is in need of work.

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Pierre Benoit
Pierre Benoit am 10 Sep. 2014
First, about your function, there is a problem with the output because Matlab is case sensitive. Replace h with H.
Then for your script, ".*" is element-wise multiplication, not matix multiplication. It's simply * Also, you didn't define V before using it, you try to concatenate an undefined vector with v. You could do
V = zeros(r,N);
for i=1:N %For every i, you multiply the vector by the Hilbert matrix.
V(:,i) = H^(i)*m; %Your result goes to the the ist column of a new matrix.
end
Now, this should work. Let me know if I misunderstood something or if there is something wrong.
  1 Kommentar
Julia
Julia am 10 Sep. 2014
Bearbeitet: Julia am 10 Sep. 2014
Sorry, I only saw your answer after submitting my own!

Melden Sie sich an, um zu kommentieren.


Julia
Julia am 10 Sep. 2014
Bearbeitet: Julia am 10 Sep. 2014
Hi,
(I am writing this while trying to debug your code ;) )
- Your function HilbertMatrix() returns only a zero-matrix. Your output is "h" but you compute "H".
- You never define "N" (upper limit of the loop).
- Then you get an error for
v = H^(i).*m;
--> delete the point:
v = H^(i)*m;
- And finally you have to initialize V before using it. You write
V = [V v];
But in the first iteration there is no V.
My solution was:
v = H*m;
V = v;
and start the loop with i=2
I hope this yields the right result.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by