0 views

Skip to first unread message

Apr 25, 2003, 4:16:20 PM4/25/03

to

Hi,

on using 'simplify' on an integral with upper limit = infinity

i have problems with the symbolic calculation:

int( (y-K) *q(y),y=K..infinity); simplify(%) assuming real;

gives me 0 for 1/2*exp(-1/2*(ln(1/y)-1/2)^2)*2^(1/2)/Pi^(1/2)/y

taken as q(y) (this is a lognormal pdf).

But numerical it works correct, the example gives 0.3829249225:

Int( (y-K) *q(y),y=K..infinity); eval(%, [K=1.0]): evalf(%);

Did i make a handling error or is there a work around?

Axel

Apr 26, 2003, 4:07:55 PM4/26/03

to

Axel Vogt <ma...@axelvogt.de> wrote:

> on using 'simplify' on an integral with upper limit = infinity

> i have problems with the symbolic calculation:

>

> int( (y-K) *q(y),y=K..infinity); simplify(%) assuming real;

> gives me 0 for 1/2*exp(-1/2*(ln(1/y)-1/2)^2)*2^(1/2)/Pi^(1/2)/y

> taken as q(y) (this is a lognormal pdf).

>

> But numerical it works correct, the example gives 0.3829249225:

> Int( (y-K) *q(y),y=K..infinity); eval(%, [K=1.0]): evalf(%);

> on using 'simplify' on an integral with upper limit = infinity

> i have problems with the symbolic calculation:

>

> int( (y-K) *q(y),y=K..infinity); simplify(%) assuming real;

> gives me 0 for 1/2*exp(-1/2*(ln(1/y)-1/2)^2)*2^(1/2)/Pi^(1/2)/y

> taken as q(y) (this is a lognormal pdf).

>

> But numerical it works correct, the example gives 0.3829249225:

> Int( (y-K) *q(y),y=K..infinity); eval(%, [K=1.0]): evalf(%);

Surely the 0 answer is a bug. But I did not track it down. Rather,

here is some advice about assuming and assume:

1. Try to avoid global assumptions like "real", which the apply to all

functions and variables. Rather make assumptions about specific

variables.

2. It is sometimes useful to make the assumption that a variable of

integration or summation is between its limits. Also, for summation,

it is sometimes useful to assume the summation variable is integer.

Of course, Maple should make these assumptions automatically, but it

does not.

Putting these ideas together, the assumptions that work the best for

me in this case are

assume(K>0); additionally(y>K);

With this, Maple can do the original integral symbolically:

> restart;

> assume(K>0); additionally(y>K);

> q:= y-> 1/2*exp(-1/2*(ln(1/y)-1/2)^2)*2^(1/2)/Pi^(1/2)/y:

> int((y-K)*q(y), y=K..infinity):

> simplify(%):

> combine(%);

K~ 1/2

1/2 - ---- - 1/2 erf((1/2 ln(K~) - 1/4) 2 )

2

1/2

+ 1/2 K~ erf((1/2 ln(K~) + 1/4) 2 )

Apr 26, 2003, 5:32:32 PM4/26/03

to

Thank you for working out a work around! And sorry, i forgot

to include solutions.

One additional question on 'additionally(y>K)': without it is

does not work. Does that mean one has to be aware, that Maple

may use y as a bounded variable (in the sense: it is not local

in a formula int(f(y),y=...), i dont know how to express it

more exactly) ?

Apr 26, 2003, 8:03:58 PM4/26/03

to Axel Vogt

On Sat, 26 Apr 2003, Axel Vogt wrote:

> Does that mean one has to be aware, that Maple may use y as a bounded

> variable (in the sense: it is not local in a formula int(f(y),y=...),

> i dont know how to express it more exactly) ?

The phrase is "bound variable"; "bounded variable" means something else.

But I understand what you mean, and the answer is unfortunately yes, to

the consternation of the mathematical logic and theoretical computer

science purists: An assumption made outside the binding scope (1) can

affect the results of the command that uses the variable as bound, and (2)

this is often useful. Both of these are IMO design flaws of Maple and

both are I think pretty easy to fix.

Apr 27, 2003, 8:57:21 AM4/27/03

to

Thank you very much!

An interesting feature to know and (hopefully) i will care for it.

Reply all

Reply to author

Forward

0 new messages

Search

Clear search

Close search

Google apps

Main menu