[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Apply function to vector

From: Mike Miller
Subject: Re: Apply function to vector
Date: Tue, 21 Jun 2011 02:15:53 -0500 (CDT)
User-agent: Alpine 2.00 (DEB 1167 2008-08-23)

On Mon, 20 Jun 2011, Jordi GutiƩrrez Hermoso wrote:

On 20 June 2011 04:59, Fritz Fischer <address@hidden> wrote:
For convenient reasons to plot functions I would like to apply a function to
a vector:


x = 0:1:2*pi
y = sin(x)

So far, everything works fine.
But if I want to apply one of my functions the same way,

x = 0:1:40
y = rayleigh_optical_density(x) %contains just some simple calculations

I get the following message:

error: for A^b, A must be square

I read about element-wise operations, but I guess this is of no use here,
isn't it?

It depends how you wrote rayleigh_optical_density. Did you vectorise
it? What functions does it call? You need to either rewrite it to use
elementwise calculations or to call arrayfun on it:

    arrayfun(@rayleigh_optical_density, x)

For example, if you have scalars w, x, y and z,  You could do this:


And if all four variables became vectors of, say, length four, you might want to do something like this:

output=zeros(4,1); # initialize output vector
for i=1:4, output(i) = (w(i)*x(i)/y(i))^z(i) ; end

But that is slow and awkward and unnecessary. This does the same thing (assuming these are column vectors):

output = (w.*x./y).^z ;

If they were column vectors, the output would be a column vector. The "for" loop above will produce a column vector as output no matter which kinds of vectors were used as input.

Another plus: When all four vectors are scalars, (w*x/y)^z and (w.*x./y).^z provide the same output. Therefore, when writing code, consider the possibility that you might use vectors or matrices instead of scalars and write the code accordingly.


Michael B. Miller, Ph.D.
Minnesota Center for Twin and Family Research
Department of Psychology
University of Minnesota

reply via email to

[Prev in Thread] Current Thread [Next in Thread]