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

AI Thread Summary
Array operations on rows of a matrix in Matlab can be performed using loops and specific indexing techniques. To apply functions like polynomial root calculations to each row, the correct syntax involves using the colon operator to reference entire rows, such as g1(i, :). For square root operations, the element-wise power operator (.^) can be used to compute the square roots of each element in the matrix. The suggested code for extracting roots from each row is: for i = 1:length(g1), g2(i, :) = roots(g1(i, :)); end. Proper indexing and syntax are crucial for avoiding errors in Matlab.
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

Back
Top