Is it possible to perform array operations on rows of a matrix in Matlab?

Click For Summary

Discussion Overview

The discussion revolves around performing array operations on the rows of a matrix in Matlab, specifically focusing on applying functions like polynomial root finding and square root extraction to each row of a matrix. Participants explore coding techniques and syntax for achieving these operations.

Discussion Character

  • Technical explanation
  • Homework-related
  • Mathematical reasoning

Main Points Raised

  • One participant inquires about applying operations to each row of a matrix, such as finding polynomial roots using the roots command.
  • Another participant suggests using a for loop to iterate through the rows of the matrix for applying functions.
  • There is a discussion on the correct syntax for referencing entire rows versus individual elements in a matrix.
  • Participants provide examples of how to correctly index rows in Matlab, emphasizing the use of the colon operator.
  • Some participants suggest variations in the loop syntax, with differing opinions on the necessity of brackets in the for loop definition.

Areas of Agreement / Disagreement

Participants generally agree on the need to use loops for applying functions to matrix rows, but there are differing views on the syntax and whether to include brackets in the loop definition. The discussion remains unresolved regarding the best practices for coding in this context.

Contextual Notes

Some limitations in the discussion include potential misunderstandings of Matlab syntax and the need for clarity in indexing matrix elements. There are also unresolved questions about the specific errors encountered by participants when attempting to implement their code.

ichbinschneller
Messages
2
Reaction score
0
Array operations in Matlab?

Is it possible to apply operations to the rows of a matrix as an array? Such as I have a matix A which is 30 rows by 1 column and I want to treat each row as a vector such that I can solve for the polynomial roots of each row using the roots comand (treating each row as its own equation and the matrix A a system of equations)?

Also would it be possible to take the square roots of each row of a same size matrix. Meaning say I had the same size matrix and I want to take the square root of each row and have the output be a matrix of the same size just with the values of those square roots?
 
Physics news on Phys.org
Hi, Iamfaster :wink:

Welcome to PF!

If you need to perform a function on each row of a matrix like

function(A), where A is a 30x1 vector, I think you'll have to break it up and write a for loop

Code:
for i=[1:length(A)]
     function(A(i));
end

or if A is 30x2 (or more)
Code:
for i=[1:length(A)]
     function(A(i,:));
end

if you want to take the square root, you can find it using the .^ operator, which raises each element to a power as opposed to the ^ which performs matrix multiplication

Code:
A.^(1/2)
 
Thanks, I am getting closer now but I still can't seem to enter the code in the right form.
Say I have a matrix

g1=
5 9 8
4 7 6
1 2 8

and I want a matrix g2= roots of each row as if each row was a vector consisting of the coeficients of a polynomial. I have tried using code such as

for i=[1:length(g1)]
g2(i)=roots(g1(i));
end

but I keep getting errors. What am I doing wrong? What code would yield the results I desrire?
 
ichbinschneller said:
Code:
for i=[1:length(g1)]
     g2(i)=roots(g1(i));
end

What am I doing wrong? What code would yield the results I desrire?

You're not indexing the entire row.

g1(1) doesn't have any meaning for a m by n matrix when n>1.

If you want to reference a single term, you need to put in the entire address lke so:

g1(1,2)

to reference the first row, second column.

If you want to reference the entire row, you need to put in the : operator like so:

g1(1,:)

Just using : by itself is "shorthand" for explicitly defining the starting and ending conditions.

If your matrix g is 4x4

Code:
g=[1,2,3,4
     6,7,8,9
    10,11,12,13
    14,15,16,17]

typing

a=g(2,2:3) will give the result a=[7,8]
b=g(:,1) will give the result b=[1;6;10;14]
c=g(3,1:4) will give the result c=[10,11,12,13]
and
d=g(3,:) will give the same result as c. d=[10,11,12,13]

Hope that helps,
 
also, lose the [ and the ]
like this:

for i = 1:length(g1)
g2(i, :) = roots(g1(i, :));
end
 
gerben said:
also, lose the [ and the ]
like this:

for i = 1:length(g1)
g2(i, :) = roots(g1(i, :));
end

Works with or without. I usually leave them in.
 
yes it works because [1:5] evaluates to: 1, 2, 3, 4, 5 (you could say: for i = [1,4,18])
but you can tell the loop that you want "it" done for the numbers 1 through 5 instead of telling it that you want "it" done for the numbers 1, 2, 3, 4 and 5.

(I guess you leave them in because of similarity with other programming languages that usually have brackets there, like in C/C++: for(i=1; i<5; i++) )
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
10K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 2 ·
Replies
2
Views
5K
  • · Replies 1 ·
Replies
1
Views
1K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K