Using loops in matrix

조회 수: 15 (최근 30일)
Grace S
Grace S 2020년 11월 16일
댓글: Grace S 2020년 11월 17일
Please help. give any tips or suggestions that you can
I am trying to create a script that is 3x3 matrix of random integers between 1 and 4. But, I need this matrix to produces the output matrix B which is also a 3x3 matrix. Calculates the elements of matrix B such that: the values of B along the diagonal are equal to the respective elements in A and the values in each element of B not along the diagonal are equal to the sum of the values in the respective row and column of A.
I have the following for A, but am confused on how to do the loop to create B.
A= randi (4,3,3);
  댓글 수: 6
James Tursa
James Tursa 2020년 11월 16일
To generalize it for a 2D matrix of any size:
[M,N] = size(A); % get the row and column size of A
for i=1:M % run the row loop up to M
for j=1:N % run the column loop up to N
:
etc.
Grace S
Grace S 2020년 11월 17일
So I tried working on this on my own without using your help just to see if I could try to understand it a little better. I came up with this.
A = [3 2 4;1 4 1;1 2 4];
B = zeros(3);
for i = 1:size(A,1)
for j = 1:size(A,2)
if i ==j % diagonal elements
B(i,j) = A(i,j);
else % off diagonal elements
B(i,j) = sum(A(i,:))+sum(A(:,j)) - A(i,j);
end
end
end
If this is wrong or I should change anything please let me know. Also could you explain the part about making your script generalized again because I still can't quite figure that part out. I copied and pasted from my assignment what is asked of us from that and put it below. Thank you for all your help!!
Problem 1 Stretch Goal (5 points) Make your script generalizable such that the input matrix A can be a square matrix of any size, not just a 3x3, and the script will work as desired without errors. To receive credit for these 5 points, create a new variable N as the first line of code; where N defines the size of matrix A (the default from above being that N = 3). First, change the code so that A is created using N, then change your code that determines B and generalize it to work for any N.

댓글을 달려면 로그인하십시오.

답변 (2개)

James Tursa
James Tursa 2020년 11월 17일
편집: James Tursa 2020년 11월 17일
So your latest post is a really good effort! A couple of things you are missing from the instructions:
"create a new variable N as the first line of code"
So you first line of code should be:
N = 3; % or whatever value you want, or maybe use the input( ) function here
"N defines the size of matrix A"
"A is created using N"
So you need to create A using what you had in your original post but using N instead of 3, namely
A = randi(4,3,3); % change this to use N instead of hard coding 3
"change your code that determines B and generalize it to work for any N"
So change this line to generalize it:
B = zeros(3); % change this to use N instead of hard coding 3
The entire instructions about generalizing the code are basically to use N instead of 3. And also since you are using size(A,1) and size(A,2) that is generalizing also (although because of how you created A you could have used N here instead of size(A,1) and size(A,2) ... either one is correct).
  댓글 수: 1
Grace S
Grace S 2020년 11월 17일
Okay that makes a lot of sense. I'll make those changes. Thank you so much for all your help, I really appreciate it.

댓글을 달려면 로그인하십시오.


David Hill
David Hill 2020년 11월 16일
A=randi(4,3);
[b,c]=meshgrid(sum(A),sum(A,2));
B=(b+c-A).*(~eye(3))+diag(diag(A));
  댓글 수: 1
James Tursa
James Tursa 2020년 11월 16일
편집: James Tursa 2020년 11월 16일
Seriously? This is a beginning programming homework assignment ...

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by