>
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);
>
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);
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);
D 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);
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
:=
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
>