background image

restart:

Całkowanie symboliczne

Ogólna postać komendy int
 int (funkcja, zmienna lub przedział całkowania)
 np.: int (sin(x), x);  # całka nieoznaczona
 np.: int (sin(x), x=0..1);  # całka oznaczona

Int(x^2,x); # bierna wersja komendy

d


x

2

x

value(%); # uwaga: brak stałej całkowania!

x

3

3

int(x^2,x)+C; # aktywna wersja komendy



x

3

3

C

Int(x^2,x)=int(x^2,x);



d


x

2

x

x

3

3

int(exp(-x^2),x);

1
2

( )

erf x

diff(%,x);

e

(

)

x2

c1:=expand(int((1+x)^2,x));

 := 

c1

  

1
3

x

x

2

1
3

x

3

c2:=int(1+2*x+x^2,x);

 := 

c2

 

x

x

2

1
3

x

3

Uwaga: c1 różni się od c2 o stałą!

diff(c1,x);

 

1 2 x x

2

diff(c2,x);

 

1 2 x x

2

Całki oznaczone

int(sin(cos(x)),x);

d


 (

)

sin

( )

cos x

x

int(sin(cos(x)),x=0..Pi/2); #  StruveH, StruveL - Struve functions

1
2

(

)

StruveH ,

0 1

evalf(%);

0.8932437410

plot(sin(cos(x)),x=0..Pi/2);

background image

int(1/(1+ln(1/x)),x);

d

1



1







ln

1

x

x

int(1/(1+ln(1/x)),x=0..1); # Ei - the Exponential Integral

(

)

Ei ,

1 1 e

evalf(%);

0.5963473622

plot(1/(1+ln(1/x)),x=0..1);

int(x^x,x);

d


x

x

x

int(x^x,x=0..1);

d


0

1

x

x

x

evalf(%);

0.7834305107

evalf(Int(x^x,x=0..1));

0.7834305107

plot(x^x,x=0..1,0..1);

background image

Całki wielokrotne (int(int(...)), int(...,[x=a..b,y=c..d,...]), Doubleint, Tripleint, MultiInt)

Int(Int(x*y,y=0..x),x=0..2); # bierna wersja komendy

d


0

2

d


0

x

x y y x

value(%);

2

int(int(x*y,y=0..x),x=0..2); # aktywna wersja komendy

2

int(x*y,[y=0..x,x=0..2]); # nowa wersja komendy int

2

with (student);

Diff Doubleint Int Limit Lineint Product Sum Tripleint changevar completesquare distance equate integrand

,

,

,

,

,

,

,

,

,

,

,

,

,

,

[

intercept intparts leftbox leftsum makeproc middlebox middlesum midpoint powsubs rightbox rightsum showtangent

,

,

,

,

,

,

,

,

,

,

,

,

simpson slope summand trapezoid

,

,

,

]

Doubleint(x*y,y=0..x,x=0..2);

d


0

2

d


0

x

x y y x

value(%);

2

with(Student[MultivariateCalculus]);

ApproximateInt ApproximateIntTutor CenterOfMass ChangeOfVariables CrossSection CrossSectionTutor Del

,

,

,

,

,

,

,

[

DirectionalDerivative DirectionalDerivativeTutor FunctionAverage Gradient GradientTutor Jacobian

,

,

,

,

,

,

LagrangeMultipliers MultiInt Nabla Revert SecondDerivativeTest SurfaceArea TaylorApproximation

,

,

,

,

,

,

,

TaylorApproximationTutor ]

MultiInt(x*y,y=0..x,x=0..2);

2

Int(Int(Int(x*y*z,z=0..x*y),y=0..x),x=0..2); # bierna wersja komendy

d


0

2

d


0

x

d


0

x y

x y z z y x

value(%);

4

int(int(int(x*y*z,z=0..x*y),y=0..x),x=0..2); # aktywna wersja komendy

4

int(x*y*z,[z=0..x*y,y=0..x,x=0..2]); # nowa wersja komendy

4

Tripleint(x*y*z,z=0..x*y,y=0..x,x=0..2);

background image

d


0

2

d


0

x

d


0

x y

x y z z y x

value(%);

4

MultiInt(x*y*z,z=0..x*y,y=0..x,x=0..2);

4

Całkowanie numeryczne

 Proste kwadratury Newtna-Cotesa

f:=x->1/(1+ln(1/x));

 := 

f



x

1



1







ln

1

x

int(f(x),x);

d

1



1







ln

1

x

x

0

( )

(

)

b

m

i

i

i

a

f x dx

b

a

C y

Wielomian 1 stopnia (m =1)

a:=1.;b:=2.;

 := 

a

1.

 := 

b

2.

m:=1;h:=(b-a)/m;

 := 

m

1

 := 

h

1.

x:=array(0..m,[seq(a+i*h,i=0..m)]):

C[0]:=1/2;C[1]:=1/2;

 := 

C

0

1
2

 := 

C

1

1
2

Ip1:=(b-a)*add(C[i]*f(x[i]),i=0..m);

 := 

Ip1

2.129445677

Wielomian 2 stopnia

m:=2;h:=(b-a)/m;

 := 

m

2

 := 

h

0.5000000000

x:=array(0..m,[seq(a+i*h,i=0..m)]):

C[0]:=1/6;C[1]:=4/6;C[2]:=1/6;

 := 

C

0

1
6

 := 

C

1

2
3

 := 

C

2

1
6

Ip2:=(b-a)*add(C[i]*f(x[i]),i=0..m);

 := 

Ip2

1.831139939

Porównanie

for i to 2 do Ip||i end do;

2.129445677
1.831139939

Wartość dokładna

wd:=int(f(x),x=1..2); # Ei - the exponential integral

background image

 := 

wd



(

)

Ei ,

1 1 e

(

)

Ei ,

1



1

( )

ln 2

e

Wartość przybliżona z dokładnością do 20 cyfr znaczących

Idok:=evalf[20](wd);

 := 

Idok

1.8202098226544037274


Współczynniki Cotesa

0

0

(

)

( 1)

,

0..

!(

)!

(

)

m

m

m i

j

i

t

j

C

d t

i

m

i m i m

t

i

m:=10;

 := 

m

10

#m:=40;Digits:=40;

h:=(b-a)/m;

 := 

h

0.1000000000

for i from 0 to m do 
   C[i]:=(-1)^(m-i)/(i!*(m-i)!*m)*int(mul(t-j,j=0..m)/(t-i),t=0..m): 
end do;

 := 

C

0

16067

598752

 := 

C

1

26575

149688

 := 

C

2

-16175

199584

 := 

C

3

5675

12474

 := 

C

4

-4825

11088

 := 

C

5

17807
24948

 := 

C

6

-4825

11088

 := 

C

7

5675

12474

 := 

C

8

-16175

199584

 := 

C

9

26575

149688

 := 

C

10

16067

598752

x:=array(0..m,[seq(a+i*h,i=0..m)]):

Ip||m:=(b-a)*add(C[i]*f(x[i]),i=0..m);

 := 

Ip10

1.820209895

'Idok'=Idok;



Idok

1.8202098226544037274

add(C[i],i=0..m);

1