Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Array operations in Matlab?

  1. Dec 5, 2004 #1
    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 eqautions)?

    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?
  2. jcsd
  3. Dec 6, 2004 #2


    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    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 (Text):

    for i=[1:length(A)]
    or if A is 30x2 (or more)
    Code (Text):

    for i=[1:length(A)]
    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 (Text):

  4. Dec 6, 2004 #3
    Thanks, I am getting closer now but I still cant seem to enter the code in the right form.
    Say I have a matrix

    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)]

    but I keep getting errors. What am I doing wrong? What code would yield the results I desrire?
  5. Dec 6, 2004 #4


    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    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:


    to reference the first row, second column.

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


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

    If your matrix g is 4x4

    Code (Text):


    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]
    d=g(3,:) will give the same result as c. d=[10,11,12,13]

    Hope that helps,
  6. Dec 7, 2004 #5
    also, lose the [ and the ]
    like this:

    for i = 1:length(g1)
    g2(i, :) = roots(g1(i, :));
  7. Dec 7, 2004 #6


    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    Works with or without. I usually leave them in.
  8. Dec 9, 2004 #7
    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++) )
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook