Clear Filters
Clear Filters

How do I fill a column and/or row vector with the j-th/i-th sums of a magic matrix' vectors?

4 views (last 30 days)
Hello :)
I'm trying to work through a simple for loop where I call a magic(4) matrix ("mag"), one "empty" column matrix of length "mag" and one "empty" row matrix of row length ("mag").
Objective: fill the i(th) and j(th) positions in the vectors with the sum of each i(row) and j(column). Below is the code that almost works:
mag = magic(4)
rows = zeros(length(mag),1)
columns = zeros(1,length(mag))
for i = mag(1:4,:)
rows(?) = sum(i);
for j = mag(:,1:4)
columns(?) = sum(j);
I have attempted several versions of, for example, "columns(:,j)", etc, but I can't seem to find the right combination to simply have rows(i)/columns(j) filled in sequence. When debugging the loop, I'd want to see this, for example: 1. [34 0 0 0] 2. [34 34 0 0] 3. [34 34 34 0] 4. [34 34 34 34] EXIT
It's probably something simple, so thanks.

Answers (1)

KL on 2 Mar 2018
Edited: KL on 2 Mar 2018
If I understand you correctly, you want to make the sum of rows and columns,
mag = rand(4);
r = sum(mag,1);
c = sum(mag,2);
or do you mean totally something else?
  1 Comment
M W on 2 Mar 2018
Edited: M W on 2 Mar 2018
I want to fill the positions in the declared column and row vectors sequentially, not all at once. The purpose is to check the stepped outcomes of a larger simulation, iteration by iteration, for debugging purposes.
I seem to have sorted part of it out:
mag = magic(4)
rows = zeros(length(mag),1)
columns = zeros(1,length(mag))
for i = 1:length(mag(:,1))
for j = 1:length(mag(1,:))
rows(i) = sum(mag(i,:));
columns(j) = sum(mag(:,j));
I am unsure if this could scale to a n.steps = 1000, N.simulations = 100 without becoming very slow.

Sign in to comment.



Community Treasure Hunt

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

Start Hunting!