Asked by sarngon
on 19 Mar 2015

Hi Guys ,

I want to write a code which includes an array like x=[1 2 3;4 5 6] and

my function is

f=@(y) (y-x).^2

and

Q= integral ( f,0,x);

. I couldn't be successful about it and I need help how can I take an integral over array boundries like this.

Thanks.

Answer by Roger Stafford
on 19 Mar 2015

If you consult the website:

http://www.mathworks.com/help/matlab/ref/integral.html

you will find that 'integral' does not accept arrays for its integration limits. You must use scalar (individual numbers) quantities for these limits. This means of course that you will have to use for-loop constructs to compute Q in a corresponding matrix for each of the separate values in x.

Sign in to comment.

Answer by Mike Hosea
on 19 Mar 2015

Edited by Mike Hosea
on 19 Mar 2015

Two steps to set it up. First make it work with a scalar x:

>> Qscalarx = @(x)integral(@(y)(y - x).^2,0,x);

Now vectorize it with ARRAYFUN:

>> Q = @(x)arrayfun(Qscalarx,x);

Now use it.

>> Q([1 2 3;4 5 6])

ans =

0.33333 2.6667 9

21.333 41.667 72

Mike Hosea
on 20 Mar 2015

Well, you put in(:,3:4) in your function instead of x. It's crucial that x be a scalar in the Qscalarx function. Everything needs to be a scalar except the variable of integration (w), and in(:,3:4) certainly isn't.

Do you really have a function like that is linear in w but has all those other terms in it to define constants that you want to re-evaluate every time a linear integrand is evaluated? Or are some of these constants really functions of w and you just haven't defined or referenced them as such?

sarngon
on 20 Mar 2015

Actually I know all constants except 'p', P is a function WRT w.

p=@(w)w/wr;

other letters are all known constants.

Mike Hosea
on 20 Mar 2015

Then you need to put p(w) in there everywhere you have just p, and each term involving w anywhere must use an element-wise operator rather than a matrix operator when it connects with other terms depending on w.

Qscalarx = @(x)integral(@(w)k1*(x-w)*(k*l*vi/(wr*ccons)).*(((1+p(w)*l)*vi/ccons).^(k-1)).*2.71.^((-((1+p(w)*l)*vi/ccons)).^k),0,x);

I'd probably define a couple of constants here.

c1 = kr*(k*l*vi/(wr*ccons));

c2 = vi/ccons;

Qscalarx = @(x)integral(@(w)c1*(x-w).*(((1+p(w)*l)*c2).^(k-1)).*2.71.^((-((1+p(w)*l)*c2)).^k),0,x);

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.