Na tym wykładzie chciałbym przekonać Państwa, że Mathematica®  może być pomocna w studiowaniu analizy matematycznej.

Liczby i działania na liczbach

Zmierzamy w stronę badania przebiegu zmienności funkcji rzeczywistej jednej zmiennej, ale po drodze powinniśmy poznać kilka zagadnień takich jak liczenie granic funkcji, znajdowanie dziedziny i przeciwdziedziny, liczenie pochodnych, znajdowanie miejsc zerowych pierwszej i drugiej pochodnej. Przydatne będą też instrukcje pozwalające na narysowanie kompletnego wykresu funkcji (łącznie z asymptotami).
 Do podstawowych umiejętności należy jednak określanie typów liczb. Jest to niezbędne w szczególności przy upraszczaniu wyrażeń, więc od tego zaczniemy.

(* Zacznijmy od zadania pytania, na które znamy odpowiedź *)

2+2==4

(* Dokładnie w ten sam sposób możemy sprawdzać przynależność do określonego typu liczb *)

(* liczby całkowite *)

Element[-1,Integers]

(* inaczej, używając pomocy Writing Assistant  *)

-1∈(Integers)

(* Dlaczego takie sprawdzenie jest ważne ? *)

Simplify[Sin[n*Pi]]

(* Tego wyrażenia w ogólnym przypadku nie da się uprościć, ale dla n całkowitego ... *)

Simplify[Sin[n*Pi],Element[n,Integers]]

(* ... przyjmuje ono prostą wartość. *)

(* liczby pierwsze *)

Element[5,Primes]

Element[15,Primes]

(* dzielniki liczby calkowitej *)

Divisors[17]

Divisors[36]

(* największy wspólny podzielnik (greatest common divisor) *)

GCD[30,15,100]

(* najmniejsza wspólna wielokrotność (least common multiple) *)

LCM[12,50,8]

(* liczby wymierne *)

Element[3/5,Integers]

Element[3/5,Rationals]

Element[Pi,Rationals]

Element[E,Rationals]

(* liczby rzeczywiste *)

Element[E,Reals]

Element[Pi,Reals]

(* Liczby zespolone *)

(* słynna liczba I: podniesiona do kwadratu daje liczbę -1 *)

I

I*I

Element[I,Reals]

Element[I,Complexes]

z=I;z^2+1==0

z=.;  (* z staje się z powrotem nieokreślone *)

Element[3-4*I,Complexes]

(* Upraszczanie wyrażeń *)

(* W tym przypadku Mathematica zrobi wszystko "bez popychania", ... *)

((2/5)/(2+1/2))*((4+1/5)-(1+3/40))+(135/100)/(27/10)

(* ... ale w wielu przypadkach trzeba pomóc, dostarczając dodatkowe informacje *)

Simplify[Abs[x]+Abs[x+1]+Sqrt[x^2+4*x+4],Element[x,Reals]]

(* Uproszczamy wyrażenia z logarytmami *)

?Log

Log[E]

Log[Sqrt[E]]

(* bo ... *)

E^(1/2)==Sqrt[E]

(* Dwa kompletnie równoważne zapisy logarytmu dziesiętnego; stąd aż TRZY znaki równości *)

Log10[z]===Log[10,z]

Log10[1000]

(* bo ... *)

10^3==1000

Log[64,1/4]

(* bo ... *)

64^(-1/3)==1/4

Log[32,1/2]

Log[4,Sqrt[2]/2]

(* Powyższy wynik nie wygląda zbyt prosto, więc próbujemy Simplify, ... *)

Simplify[-((Log[2])/(2 Log[4]))]

(* ... ale otrzymany wynik też jest skomplikowany. Dopiero FullSimplify załatwia sprawę ! *)

FullSimplify[-((Log[2])/(Log[16]))]

(* Podobnie jest dla wyrażenia 36^Log[6,5] *)

36^Log[6,5]

Simplify[36^Log[6,5]]

FullSimplify[36^Log[6,5]]

(* Niestety, często próba użycia FullSimplify prowadzi do bardzo długich, wręcz niekończących się obliczeń. Dlatego tej instrukcji należy używać rozważnie ! *)

(* Rozkład na ułamki proste *)

Apart[((a+2 a b+(b^2))/((a^2)-(b^2)))]

(* Rozłożyć na czynniki *)

Factor[x^6+6*x^5-x^4-6*x^3]

(* reszta z dzielenia wielomianów *)

PolynomialRemainder[x^5+3*x^4+2*x^3-5*x^2+3*x+7,x^2+2,x]

(* Dla jakiej wartosci k wielomian W(x)=x^5+3*x^4+2*x^3-5*x^2+3*x+k jest podzielny przez (x-2) ?
Inaczej mówiąc, dla jakiej wartości k reszta z dzielenia wielomianu W(x) przez (x-2) jest równa zero ? *)

PolynomialRemainder[x^5+3*x^4+2*x^3-5*x^2+3*x+k,x-2,x]

(* Aby ta reszta była równa zero, k musi być równe -82 ! *)

(* sprawdzenie *)

Simplify[(x^5+3*x^4+2*x^3-5*x^2+3*x-82)/(x-2)]

(* Niekiedy mamy informację o pewnej zmiennej i mamy ją wykorzystać do policzenia innego wyrażenia, w którym ta zmienna występuje. Przykład: wiemy, że x^2 +2/x^2 = 5, a mamy policzyć x^4 + 4/x^4 oraz  Sqrt[2]/x-x. Jest to typowy problem, w którym wykorzystujemy wzory skróconego mnożenia, ale mając do dyspozycji program Mathematica, możemy wykorzystać funkcję Eliminate *)

Eliminate[{x^2+2/x^2==5,g1==x^4+4/x^4},x]

Eliminate[{x^2+2/x^2==5,g2==Sqrt[2]/x-x},x]

(* Podobne zadanie, w którym występują dwa warunki: Uzasadnij, że jeżeli a+b=1 i a^2+b^2=7, to a^4+b^4==31 *)

Eliminate[{a+b==1,a^2+b^2==7,g3==a^4+b^4},{a,b}]

Równania i nierówności

(* BARDZO WAŻNE: podstawienie ! *)

y/.{y-> 450}

(y^2+1)/.{y-> 450}

y

x/.{x-> 450}

x

(* Samo podstawienie nie zmienia wartości x *)

(* Uwaga: Solve nie nadaje bezpośrednioo wartości pierwiastkom równania, ... *)

Solve[x^3-x^2 +2x+4==0,x]

(* ... ale można te wartości uzyskać w następujący sposób: *)

S1=Solve[x^3-x^2 +2x+4==0,x]

S1[[1]]

(* S1[[1]] jest już gotowym elementem instrukcji podstawienia; podobnie S1[[2]] i S1[[3]] *)

x1=x/.S1[[1]]

x2=x/.S1[[2]]

x3=x/.S1[[3]]

ClearAll[S1]; (* w ten sposób S1 staje się nieokreślone *)

(* Powtarzam: po wykonaniu Solve sama wielkość x nie przyjmuje żadnej konkretnej wartości ! *)

(* Warto też poznać instrukcję Reduce, która ma za zadanie sprowadzić skomplikowane warunki matematyczne do prostej, "zredukowanej" postaci *)

(* Szukamy wszystkich możliwości (a więc zespolonych) rozwiązań tego samego równania *)

Reduce[x^3-x^2 +2x+4==0,x]

(* Uwaga: || to logiczne "lub" *)

(* Szukamy tylko rzeczywistych rozwiązań tego równania *)

Reduce[x^3-x^2 +2x+4==0,x,Reals]

(* Reduce przydaje się zwłaszca przy nierównościach *)

Reduce[x (x^2-2) (x^2-3)>0,x,Reals]

Reduce[2^x>E^x,x,Reals]

(* Dopuszczalna jest nierówność jednoczesna *)

Simplify[Reduce[2<Abs[E^(2*x)-3]<3,x,Reals]]

(* Inny zapis problemu z logicznym "and" && *)

Simplify[Reduce[2<Abs[E^(2*x)-3]&&Abs[E^(2*x)-3]<3,x,Reals]]

N[Simplify[Reduce[2<Abs[E^(2*x)-3]&&Abs[E^(2*x)-3]<3,x,Reals]]]

(* Dobrze jest wynik sprawdzić na rysunku *)

Plot[{2,3,Abs[E^(2*x)-3]},{x,-1,1},PlotRange->{1.8,3.1}]

(* Przykład nierówności wymiernej *)

Simplify[Reduce[((x+1)^2-x^2)/(x*(2*x+1))<-1,x,Reals]]

(* Wyznaczamy "ręcznie" (bo mamy też dedykowaną komendę) dziedzinę funkcji f(x)=(Sqrt[4-(x^2)])+Log[1-x]; w tym celu musimy rozwiązać nierówność z logarytmem i pierwistkiem kwadratowym *)

Simplify[Reduce[4-x^2≥0&&1-x>0,x,Reals]]

(* Ale możemy to zrobić po prostu tak: *)

FunctionDomain[Sqrt[4-x^2]+Log[1-x],x]

(* Przykład nierówności trygonometrycznej *)

Simplify[Reduce[Sin[x]+Cos[x]>Sqrt[2]*Cos[2*x],x,Reals]]

(* (C[1]) jest dowolną liczbą całkowitą, a litera C jest zastrzeżona dla stałych  *)

FullSimplify[Reduce[Sin[x]+Cos[x]>Sqrt[2]*Cos[2*x],x,Reals]]

(* Możemy zawęzić obszar poszukiwania x i otrzymać bardziej jednoznaczny wynik *)

FullSimplify[Reduce[Sin[x]+Cos[x]>Sqrt[2]*Cos[2*x]&& 0 < x< 2*Pi,x,Reals]]

(* Możemy szukać rozwiązań w postaci par liczb określonego typu np. całkowitych *)

Simplify[Reduce[x^2+y^2-2*x==7,{x,y},Integers]]

(* Przydaje się możliwość rysowanie funkcji y(x) zadanej w postaci uwikłanej *)

ContourPlot[Cos[x]+Cos[y]==1/2,{x,0,4Pi},{y,0,4Pi}]

(* Możemy podać więcej równań *)

ContourPlot[{x^2+y^2==2,x^2-y^2==1/4},{x,-2,2},{y,-2,2},Axes->True,AxesLabel->{"x","y"}]

(* Rysunek daje wstępne pojęcie o rozwiązaniach, ... *)

Reduce[x^2+y^2==2&&x^2-y^2==1/4&&-2<x<2&&-2<y<2,{x,y},Reals]

(* ... ale dokładnego rozwiązania dostarcza Reduce. Są to w istocie pary (x,y) stanowiące współrzędne punktów *)

N[Reduce[x^2+y^2==2&&x^2-y^2==1/4&&-2<x<2&&-2<y<2,{x,y},Reals]]

(* Obszar w płaszczyźnie zadany równaniami *)

(* Jaką figurę geometryczną wyznacza na płaszczyźnie xy układ nierówności: 2*x+y ≤ 4, (x+4)/2 ≥ y , y ≥ -1 ?  *)

RegionPlot[2*x+y ≤ 4&& (x+4)/2 ≥ y && y ≥ -1,{x,-7,3},{y,-3/2,3}]

(* Przekształcanie wykresów zadanej funkcji *)

(* Dana jest funkcja f(x)=2*x-3. Narysować wykresy funkcji f(x), f(x))-1, f(x+1), f(-x),-f(x), -f(-x), |f(x)|, f(2*x), f(1/x), f^(-1)(x),1/f(x) *)

Clear[f,x];

f[x_]:=2*x-3

(* Budujemy f^(-1) *)

sol=Solve[f[x]==y,x]

ClearAll[g,y];

g[y_]:=((3+y)/2)

(* g jest funkcją odwrotną do f, bo zachodzi ... *)

g[f[x]]

(* ... oraz  *)

f[g[x]]

Plot[{f[x],f[x]-1,f[x+1],f[-x],-f[x],-f[-x],Abs[f[x]],f[2*x],f[1/x],g[x]},{x,-2,2},PlotLegends->{"f(x)","f(x)-1","f(x+1)","f(-x)","-f(x)","-f(-x)","|f(x)|","f(2x)","f(1/x)","(f^(-1))(x)"}]

Granice ciągów i funkcji

(* Przykład "zwykłej" definicji ciągu *)

a[n_]:=n!/(n^2+1)

Table[a[n],{n,1,12}]

Table[N[a[n]],{n,1,12}]

ClearAll[a]

(* Rekurencyjna definicja ciągu Fibonacciego *)

a[1]=a[2]=1;a[n_]:=a[n-2]+a[n-1];

a[3]

Table[a[n],{n,1,15}]

ClearAll[a];

(* Mathematica potrafi rozpoznać, z jakim ciągiem ma do czynienia *)

RSolve[{a[1]==1,a[2]==1,a[n]==a[n-2]+a[n-1]},a[n],n]

Granice ciągów (przy n->∞)

(* Dzięki programowi Mathematica mamy szansę lepiej zrozumieć definicję ciągu *)

(* Możemy sprawdzić wprost z definicji, że granica poniższych ciągów wynosi zero *)

(* Poniżej obrazek z serwisu 
http://www.analizamatematyczna.enhost.pl *)

(* przykład nr 1 *)

g=0;Simplify[Reduce[Abs[1/n-g]<ϵ,n,Reals],n>0&&ϵ>0]

(* czyli n > 1/ϵ  *)

(* przykład nr 2 *)

g=0;wn=Simplify[Reduce[Abs[1/(n^2+n)-g]<ϵ,n,Reals],n>0&&ϵ>0&&ϵ<1]

(* czyli n > ((Sqrt[((4+ϵ)/ϵ)])-1)/2] *)

(* przykład nr 3 *)

g=0;Simplify[Reduce[Abs[2^(-n)-g]<ϵ,n,Reals],n>0&&ϵ>0&&ϵ<1]

(* czyli  n > -Log[ϵ]/Log[2]  *)

(* przykład nr 4 *)

g=3;Simplify[Reduce[Abs[(3*n^2+n-1)/(n^2+5n+2)-g]<ϵ,n,Reals],n>0&&ϵ>0&&ϵ<1]

(* czyli n > (1/2) (-5+((14+(Sqrt[196-112 ϵ+17 (ϵ^2)]))/ϵ)) *)

(* Ilustracja liczbowa, z konkretnym ϵ *)

ϵ=1/1000;

soln0=N[Solve[ϵ (5+2 n)==14+√(196-112 ϵ+17 (ϵ^2)),n]];

n0=Ceiling[n/.soln0[[1]]];

Plot[{(3*n^2+n-1)/(n^2+5n+2),3,3+ϵ,3-ϵ},{n,n0-20000,n0+20000},PlotRange->{2.999-ϵ*11/10,3+ϵ*11/10}]

(* Pewne BARDZO znane granice *)

Limit[(1+1/n)^n,n-> Infinity]

(* Przypominam, że to nie jest "zwykłe" e, ale liczba Eulera, w programie Mathematica oznaczane przez E albo specjalne, pogrubione E *)

Limit[(1-1/n)^n,n-> Infinity]

(* Wzór Stirlinga *)

Limit[n!*E^n/(n^n*Sqrt[2*Pi*n]) ,n-> Infinity]

(* Z wzoru Stirlinga wynika, że dla dużych n można n! przybliżyć przez n^n*Sqrt[2*Pi*n]*E^(-n). Całkiem nieźle to się zgadza już dla n=50:  *) 
N[50!]

n=50;N[n^n*Sqrt[2*Pi*n]*E^(-n)]

ClearAll[n];

(* Kilka prostych granic ciągów *)

Limit[(6*n^2-2*n+2)/(3*n^2+5*n-2),n->Infinity]

Limit[(2^n+3)/(3^n+2),n->Infinity]

Limit[Sin[n!]/(n+2),n->Infinity]

Limit[Sum[2*i-1,{i,1,n}]/(n+2),n->Infinity]

Limit[Sum[i,{i,1,n}]/n^2,n->Infinity]

Limit[(n^2+n+3)/(3*n^2-5*n-2),n->Infinity]

Limit[Sin[(n^2+n+3)*Pi],n->Infinity]

(* Istnieje specjalna komenda do liczenia granicy po liczbach całkowitych ... *)

DiscreteLimit[Sin[(n^2+n+3)*Pi],n->Infinity]

(* ... ale w niektórych przypadkach nawet ona nie pozwala policzyć granicy *)

Limit[Sin[n^n*Sqrt[2*Pi*n]*E^(-n)*Pi],n->Infinity]

DiscreteLimit[Sin[n^n*Sqrt[2*Pi*n]*E^(-n)*Pi],n->Infinity]

Limit[Sin[Sqrt[n^2+1]*Pi],n->Infinity]

DiscreteLimit[Sin[Sqrt[n^2+1]*Pi],n->Infinity]

Granice funkcji

(* W wersji 12 usunięto wreszcie błąd, który polegał na utożsamianiu przez program Mathematica granicy z granicą prawostronną ! *)

Plot[Exp[-1/x],{x,-2,2},PlotRange->{-2,10},AxesLabel->{"x","f(x)"}]

Limit[Exp[-1/x],x->0]

(* To jest poprawna odpowiedź ! *)

Limit[Exp[-1/x],x->0,Direction->-1]

(* albo używając bardziej intuicyjnej opcji: *)

Limit[Exp[-1/x],x->0,Direction->"FromAbove"]

(* oraz lewostronną: *)

Limit[Exp[-1/x],x->0,Direction->1]

(* znowu można użyć bardziej intuicyjnej opcji: *)

Limit[Exp[-1/x],x->0,Direction->"FromBelow"]

(* Granice z funkcji wymiernych *)

Limit[-5*x^2-3*x+1,x->-Infinity]

Limit[-3*x^2*Sqrt[5*x^2+7],x->Infinity]

Limit[(-5*x^5+3*x)/(x^2-2),x->-Infinity]

Limit[(x^4-1)/(x-1),x->1]

Limit[(x^2-4*x+3)/(x-3),x->3]

Limit[(x^3+1)^(1/4)+(x^4+1)^(1/3),x->Infinity]

Limit[Sin[x]/x,x->0]

Limit[Cos[x]/(x*Sin[x]),x->0]

Limit[(Sqrt[x]-1)/(x-1),x->1]

Limit[(5*x^4-2*x^2-17)/(8-12*x^3-x^4),x->Infinity]

Limit[2/(x-2)-(x+6)/(x^2-4),x->2]

Szeregi liczbowe

Zbieżność szeregu liczbowego: czy granica sumy  (Subscript[S, n])≡ (∑_(i=1)^n)(Subscript[a, i])   istnieje przy n → ∞ ?

(* Szereg harmoniczny jest rozbieżny *)

SumConvergence[1/n,n]

(* ale taki naprzemienny szereg jest już zbieżny *)

SumConvergence[(-1)^n/n,n]

(* i Mathematica zna sumę tego szeregu: *)

Sum[(-1)^n/n,{n,1,Infinity}]

SumConvergence[1/n^2,n]

Sum[1/n^2,{n,1,Infinity}]

(* Bardziej ogólny wynik dla szeregu 1/n^alpha: dostaniemy warunek, kiedy szereg jest zbieżny *)

SumConvergence[1/n^alpha,n]

Simplify[Sum[1/n^alpha,{n,1,Infinity}],Re[alpha]>1]

?Zeta

(* Znany wynik dla szeregu geometrycznego *)

SumConvergence[q^n,n]

Simplify[Sum[q^n,{n,0,Infinity}],0<Abs[q]<1]

Pochodne

Pochodna funkcji f(x) w punkcie x0

   (https://pl.wikipedia.org/wiki/Pochodna)

(* Używając w programie Mathematica komendy D, musimy zawsze wskazać, po  czym różniczkujemy, nawet jeśli nam wydaje się to zupełnie oczywiste ! *)

h=a*x^6

D[h,x]

D[h,a]

(* pochodne wyższych rzędów *)

D[h,{x,4}]

w[x_]:=x^3/(x^2+1)

w'[x]

w''[x]

Simplify[w''[x]]

(* i tak dalej ... *)

Simplify[w''''''[x]]

Simplify[D[w[x],{x,6}]]

D[Sqrt[2*x],x]

D[Sin[x]*Cos[x],x]

D[(Sin[2*x])^5,x]

D[Exp[7*x+3],x]

D[Tan[x],x]

(* Sec[x] to 1/Cos[x] *)

Sec[x]===1/Cos[x]

D[Tan[x],x]===1/(Cos[x])^2

D[x^x,x]

(* Mathematica zna też ogólniejsze twierdzenia o pochodnych, na przykład o pochodnej iloczynu ... *)

D[f1[x]*f2[x],x]

(* ... lub ilorazu *)

Factor[D[f1[x]/f2[x],x]]

(* Równaniami różniczkowymi będziemy się zajmować bardziej szczegółowo na jednym z kolejnych wykładów; teraz sprawdźmy, że funkcja x[t]= A*Cos[Sqrt[k/m]*t]+B*Sin[Sqrt[k/m]*t] jest rozwiązaniem równania m*x''[t]+k*x[t]=0 *)

Clear[x,A,B,k,m]

x[t_]:=A*Cos[Sqrt[k/m]*t]+B*Sin[Sqrt[k/m]*t]

Simplify[m*x''[t]+k*x[t]==0]

(* Weźmy funkcję wielu zmiennych *)

ClearAll[x];

v=Sin[x+y]*Cos[x-2*z]

D[v,x]

D[v,y]

D[v,z]

(* pochodna po x i y *)

D[v,x,y]

(* Rozwinięcie w szereg to bardzo często używane narzędzie, które pozwala na przybliżanie skomplikowanych funkcji przez wielomiany ! *)

Series[Sin[x],{x,0,7}]

Normal[Series[Sin[x],{x,0,7}]]

Plot[{Sin[x],x-((x^3)/6)+((x^5)/120)-((x^7)/5040)},{x,0,3}]

Series[Cos[x],{x,0,7}]

Normal[Series[Cos[x],{x,0,7}]]

Plot[{Cos[x],1-((x^2)/2)+((x^4)/24)-((x^6)/720)},{x,0,3}]

Jedno z wielu zastosowań pochodnych: równania stycznych do wykresu funkcji

(* Styczna do paraboli y=x^2  o równaniu  y = a*x + b *)

Clear[f,x];

f[x_]=x^2

df=D[f[x],x]

x0=3;

(* Współczynnik kierunkowy prostej jest równy pochodnej w punkce x0 *)

a=df/.x->x0

(* Współczynnik b dostajemy z warunku, ze prosta musi przechodzić przez punkt (x0,f(x0)) *)

solb=Solve[a*x0+b==f[x0],b]

b=b/.solb[[1]]

Plot[{f[x],a*x+b,f[x0]},{x,x0-3,x0+3},PlotRange->All,AxesLabel->{"x","x^2"}]

ClearAll[a,b,x0];

Badanie przebiegu zmienności funkcji

(* Zbadać przebieg zmienności funkcji f(x)=(x^2+2)/(x+1) *)

ClearAll[f,x,y];

f[x_]=(x^2+2)/(x+1)

(* Dziedzina funkcji jest w danym przypadku oczywista ... *)

Simplify[Reduce[1+x≠0,x,Reals]]

(* ... ale niekiedy specjalna instrukcja FunctionDomain oszczędza sporo pracy  *)

Df=FunctionDomain[f[x],x,Reals]

(* Przeciwdziedzina (zbiór wartości) funkcji: uwaga na składnię ! *)

Rf=FunctionRange[f[x],x,y]

(* To już nie było takie oczywiste !  *)

(* Granice na krańcach dziedziny, a w tym przypadku w minus i plus nieskończoności *)

g1=Limit[f[x],x->−Infinity]

g2=Limit[f[x],x->Infinity]

(* Funkcja nie ma więc asymptot poziomych *)

(* Granica lewostronna i prawostronna przy x-> -1 *)

g3=Limit[f[x],x->-1,Direction->1]

g4=Limit[f[x],x->-1,Direction->-1]

(* W danym przypadku odpowiedź jest prosta, ale warto wiedzieć, jak sprawdzić, czy funkcja jest parzysta ... *)

FullSimplify[ForAll[x,Df,f[x]==f[-x]]]

(* ... lub czy funkcja jest nieparzysta ! *)

FullSimplify[ForAll[x,Df,f[-x]==-f[x]]]

(* pierwsza pochodna *)

df1=Simplify[D[f[x],x]]

(* Dla jakich x pochodna jest ujemna ? *)

FullSimplify[Reduce[df1<0,x,Reals]]

(* Funkcja jest malejąca dla -1-(Sqrt[3]) < x < -1  oraz
 gdy -1 < x < -1+(Sqrt[3])  *)

(* Dla jakich x pochodna jest dodatnia ? *)

FullSimplify[Reduce[df1>0,x,Reals]]

(* Funkcja jest rosnąca dla x < -1-(Sqrt[3]) oraz dla x > (Sqrt[3])-1 *)

(* Dla jakich x pochodna przyjmuje wartość zero ? *)

sdf1zero=Solve[df1==0,x]

(* Lista punktów x, dla których pierwsza pochodna przyjmuje wartość zero *)

zera1poch=x/.sdf1zero

N[zera1poch=x/.sdf1zero]

(* Po uproszczeniu wartości funkcji w tych punktach *)

FullSimplify[f[zera1poch]]

N[FullSimplify[f[zera1poch]]]

df2=Simplify[D[df1,x]]

(* Dla jakich x druga pochodna jest ujemna ? *)

FullSimplify[Reduce[df2<0,x,Reals]]

(* Funkcja jest wklęsła dla x < -1 *)

(* Dla jakich x druga pochodna jest dodatnia ? *)

FullSimplify[Reduce[df2>0,x,Reals]]

(* Funkcja jest wypukła dla x > -1 *)

(* Dla jakich x druga pochodna przyjmuje wartość zero ? *)

sdf2zero=Solve[df2==0,x]

(* Funkcja nie ma punktów przegięcia *)

(* Wartości drugiej pochodnej dla miejsc zerowych pierwszej pochodnej *)

zera1poch

wartosci2poch=df2/.sdf1zero

(* Dlatego f(x) ma w punkcie (-1-(Sqrt[3]),-2(1+(Sqrt[3]))) maksimum lokalne, a w punkcie (-1+(Sqrt[3]),2(-1+(Sqrt[3]))) minimum lokalne *)

(* Na koniec sprawdzimy jeszcze, czy istnieją asymptoty ukośne *)

a1=Limit[f[x]/x,x->-Infinity]

b1=Limit[f[x]-a1*x,x->-Infinity]

a2=Limit[f[x]/x,x->Infinity]

b2=Limit[f[x]-a2*x,x->Infinity]

(* Prosta o równaniu y=x-1 jest asymptotą ukośną zarówno dla x-> -∞, jak i dla x-> ∞ *)

(* Wykres funkcji wraz z asymptotami *)

wykres=Plot[{f[x],a1*x+b1},{x,-4,3},AxesLabel->{"x","f(x)"}]

(* Asymptotę pionową musimy narysować przy pomocy innej instrukcji *)

pion=ParametricPlot[{-1,t},{t,-20,15},PlotStyle->{Dashed,Green}];

Show[wykres,pion]

Całka nieoznaczona

(* To operacja odwrotna do liczenia pochodnej *)

a=.;

Integrate[x^a,x]

(* Wynik jest poprawny, jeśli a ≠ -1 *)

D[((x^(1+a))/(1+a)),x]

Integrate[1/x,x]

D[Log[x],x]

Integrate[Sqrt[(x+7)/(x+2)],x]

Simplify[D[(1/(Sqrt[7+x]))(Sqrt[((7+x)/(2+x))]) ((2+x) (Sqrt[7+x])+5 (Sqrt[2+x]) ArcSinh[((Sqrt[2+x])/(Sqrt[5]))]),x]]

Integrate[Cos[x],x]

Integrate[Sin[x],x]

Integrate[Tan[x],x]

Integrate[Cot[x],x]

Integrate[Sin[x]*Cos[x]/((Sin[x])^4+(Cos[x])^2),x]

Integrate[Exp[x],x]

Integrate[x^3/(x^2+1),x]

Integrate[Sqrt[1+x^2],x]

Integrate[Sqrt[1-x^2],x]

Integrate[Sqrt[x^2-1],x]

Integrate[1/Sqrt[1+x^2],x]

(* Można oczywiście używać bardziej eleganckiego zapisu: *)

∫ArcSinh[x]\[DifferentialD]x

Integrate[1/Sqrt[1-x^2],x]

Integrate[1/Sqrt[x^2-1],x]

∫Log[x+(Sqrt[-1+(x^2)])]\[DifferentialD]x

∫(-(Sqrt[-1+(x^2)])+x Log[x+(Sqrt[-1+(x^2)])])\[DifferentialD]x

∫(-(3/4) x (Sqrt[-1+(x^2)])+(1/4) Log[x+(Sqrt[-1+(x^2)])]+(1/2) (x^2) Log[x+(Sqrt[-1+(x^2)])])\[DifferentialD]x

(* Czasem trzeba zachować ostrożność, bo Mathematica lubi używać zespolonego rachunku, a my oczekujemy funkcji rzeczywistej *)

Integrate[Cos[x]/(1+(Sin[x])^2+(Cos[x])^3),x]

(* Rozwiązanie całki nieoznaczonej w postaci funkcji rzeczywistej wymaga sporo zachodu i jest przedstawione w notatniku calka_z_NOF_2.nb, który jest dostępny na mojej stronie *)

(* Oczywiście nie powinniśmy żądać rzeczy niemożliwych: niektóre całki nie wyrażają się przez funkcje elementarne *)

Integrate[Exp[-x^2],x]

∫(E^(-(x^2)))\[DifferentialD]x

(∂_x)((1/2) (Sqrt[π]) Erf[x])

∫((Cos[x])/x)\[DifferentialD]x

∫((Sin[x])/x)\[DifferentialD]x

Całka oznaczona

Całka oznaczona w przypadku funkcji jednej zmiennej   (∫_a^b)f(x)dx
(rysunek ze strony
http://blog.etrapez.pl/calki-oznaczone/calki-oznaczone-definicja/)



Jeśli F’(x) = f(x), to  (∫_a^b)f(x)dx = F(b) - F(a)

Plot[x,{x,1,3},PlotRange->{0,3},AxesLabel->{"x","x"},Filling->Axis]

PoleTrapezu=(1/2)*(3+1)*(3-1)

Integrate[x,x]

CalkaOznaczona=(((x^2)/2)/.x->3) - (((x^2)/2) /.x->1)

Plot[Sin[x],{x,0,Pi},AxesLabel->{"x","sin(x)"},Filling->Axis]

Integrate[Sin[x],{x,0,Pi}]

WAŻNA UWAGA PRAKTYCZNA:
W wielu przypadkach opłaca się policzyć najpierw całkę nieoznaczoną, a następnie przy jej pomocy całkę oznaczoną !

(* Przykład: droga w rzucie ukośnym *)

g=10; (* m/s^2 *)

v0=20; (* m/s *)

alfa=30 Degree;

(* czas t będzie podawany w sekundach *)

(* wektor położenia *)

r={v0*Cos[alfa]*t,v0*Sin[alfa]*t-(1/2)*g*t^2};

(* prędkość *)

v=D[r,t]

(* długość wektora prędkości *)

dlv=Sqrt[v[[1]]^2+v[[2]]^2]

(* przyspieszenie *)

a=D[r,{t,2}]

rys=ParametricPlot[r,{t,0,2},AxesLabel->{"x [m]", "y [m]"}]

(* Droga, którą punkt materialny przebył od chwil t=0 do chwili t= 2s *)

s02=Integrate[dlv,{t,0,2}] (* w metrach *)

N[s02]

(* Teraz spróbujmy czegoś bardziej ambitnego - rozwiązania OGÓLNEGO *)

ClearAll[v0,g,alfa]

rowtk=Solve[v0*Sin[alfa]*t-(1/2)*g*t^2==0,t]

tk=t/.rowtk[[2]]

r={v0*Cos[alfa]*t,v0*Sin[alfa]*t-(1/2)*g*t^2};

v=D[r,t];

dlv=Sqrt[v[[1]]^2+v[[2]]^2];

(* Poniższa instrukcja byłaby wykonywana bardzo dłuuuugo: *)

(* Integrate[dlv,{t,0,tk}]  *)

(* Dlatego zrobimy tak: *)

s=Integrate[dlv,t]

s0tk=Simplify[(s/.{t->tk}) - (s/.{t->0}),v0>0]

s0tk=FullSimplify[(s/.{t->tk}) - (s/.{t->0}),v0>0]

s02n=s0tk/.{g->10,alfa->30Degree,v0->20}

Simplify[s02n==s02]

(* Pole koła o promieniu r *)

r=2;RegionPlot[x^2+y^2≤r^2,{x,-r,r},{y,-r,r},Axes->True,AxesLabel->{"x","y"}]

(* To samo przy pomocy innej instrukcji i innych opcji *)

r=2;Plot[{-Sqrt[r^2-x^2],Sqrt[r^2-x^2]},{x,-r,r},AspectRatio->1,Frame->True,Filling->{1->{2}},AxesLabel->{"x","y"}]

r=.;Simplify[2*Integrate[Sqrt[r^2-x^2],{x,-r,r}],r>0]

(* Kilka badzo ważnych całek niewłaściwych *)

Plot[Exp[-x^2],{x,-4,4},PlotRange->All,Filling->Axis]

Integrate[Exp[-x^2],{x,-Infinity,Infinity}]

a=2;Plot[Exp[-a*x],{x,0,4},PlotRange->All,Filling->Axis]

a=.;Simplify[Integrate[Exp[-a*x],{x,0,Infinity}],a>0]

f1[x_]=Max[Sin[x]/x,0];

f2[x_]=Min[Sin[x]/x,0];

Plot[{f1[x],f2[x]},{x,-15,15},PlotRange->All,Filling->Axis,AxesLabel->{"x","sin(x)/x"}]

Integrate[Sin[x]/x,{x,-Infinity,Infinity}]

Clear[f1,f2];

f1[x_]=Max[Sin[x^2],0];

f2[x_]=Min[Sin[x^2],0];

Plot[{f1[x],f2[x]},{x,-4,4},PlotRange->All,Filling->Axis,AxesLabel->{"x","sin(x^2)"}]

Integrate[Sin[x^2],{x,-Infinity,Infinity}]

Integrate[Cos[x^2],{x,-Infinity,Infinity}]

(* Objętość pod wykresem funkcji dwóch zmiennych wymaga podwójnej całki oznaczonej  *)

Plot3D[x^2+2*y,{x,0,3},{y,0,5},AxesLabel->{"x","y","f(x,y)"}]

Integrate[x^2+2*y,{x,0,3},{y,0,5}]

(* Policzmy teraz objętość kuli, czyli podwojoną objętość półkuli o promieniu r, używając współrzednych kartezjańskich *)

Clear[r];2*Integrate [Sqrt[r^2-x^2-y^2],{x,-r,r},{y,-Sqrt[r^2-x^2],Sqrt[r^2-x^2]}]

(* Kula jest kostką we współrzędnych sferycznych i trójwymiarowa całka oznaczona (po rp, theta i phi) ma bardzo proste granice *)

Integrate[rp^2*Sin[theta],{rp,0,r},{theta,0,Pi},{phi,0,2*Pi}]

Inne zastosowania całek oznaczonych w fizyce i technice poznacie Państwo niebawem !