Quit[]

Liczby

Liczby naturalne, wymierne, rzeczywiste, zespolone

Liczby naturalne (Integers)

Clear[x,y]

1∈Integers

1.∈Integers

(1/2)∈Integers

Liczby rzeczywiste (Reals)

2∈Reals

(2/3)∈Reals

2.3∈Reals

Liczby wymierne (Rationals)

(2/3)∈Rationals

E∈Rationals

E∈Reals

Liczby zespolone (Complexes)

3+3 I∈Reals

3+3 I∈Complexes

3∈Complexes

Head

{Head[3],Head[(1/3)],Head[0.3],Head[0.3+I]}

Head[x]

Stałe matematyczne (π, e, i, °, γ, ∞)

π

Pi

π//N

e

E

E//N

jednostka urojona  i

I

I//N

(I^2)

wzór  Eulera (de Moivre'a)

(E^(I π))

stopień

Degree

{Cos[30 Degree],Sin[90 °]}

liczba Gamma Eulera

EulerGamma

EulerGamma//N

ℽ

nieskończoność

{(1/∞), ∞+∞,-3 ∞, (∞^2)}

Funkcje numeryczne (Abs, Sign, IntegerPart...)

Moduł - wartość bezwzgledna (Abs)

Abs[{-5,5+12 I,(E^(Sqrt[-2]))}]

Znak (Sign)

Sign/@{153.2,π,E-π,π+IE}

Zaokrąglenie (Round)

{1.3,2.3,3.3,4.3,5.3,6.3,7.3,8.3,9.3,10.3}//Round

{1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5}//Round

Część całkowita (IntegerPart)

IntegerPart[3.766]

IntegerPart[{-(9/2),2.5+I,(Sqrt[π]),(E^E)}]

Podłoga (Floor)

Floor[{-(9/2),2.5+I,(Sqrt[π]),(E^E)}]

Sufit (Ceiling)

Ceiling[{(9/2),2.5`+I,(Sqrt[π]),(E^E)}]

Obcięcie (Chop)

Exp[N[2 π I]]

Chop[Exp[N[2 π I]]]

Maksimum i minimum (Max, Min)

Max[{2,6,1,8,12,8,2,6,4,6,9}]

Min[{2.6,45,345.3,0.0033}]

Funkcja schodkowa (UnitStep)

u[x_]=UnitStep[x-1];

Plot[u[x],{x,-2,2},PlotRange->{-1,3},PlotStyle->{RGBColor[1,0,0],Thickness[0.01`]}]

u[x_]=UnitStep[(x-1)(x-2)(x-3)];

Plot[u[x],{x,0,5},PlotRange->{-1,3},PlotStyle->{RGBColor[1,0,0],Thickness[0.01`]}]

Dzielniki i liczby pierwsze (Divisors, Prime)

Dzielniki (Divisors)

Divisors[24]

Polecenie FactorInteger przedstawia liczbę jako iloczyn potęg kolejnych liczb pierwszych, np:

(2^3) (3^1)

Wynik ma forme listy:

FactorInteger[24]

Największy wspólny podzielnik

GCD[70,67]

Najmniejsza wspólna wielokrotność

LCM[2,3,5]

Reszta z dzielenia

Mod[16,5]

Liczby pierwsze (Prime)

3∈Primes

8∈Primes

Setna liczba pierwsza

Prime[100]

Sto pierwszych liczb pierwszych

Prime[Range[100]]

Systemy pozycyjne (BaseForm, IntegerDigits)

Podstawa (BaseForm)

Liczba 12 w systemie dziesiętnym

BaseForm[12,10]

Liczba 12 w systemie dwójkowym

BaseForm[12,2]

Liczba 12 w systemie siódemkowym

BaseForm[12,7]

Liczba 10!  w systemie szesnastkowym

BaseForm[10!,16]

Cyfry (IntegerDigids, RealDigits)

10!

Lista kolejntch cyfr dziesiętnych

IntegerDigits[10!]

Lista kolejntch cyfr dwójkowych

BaseForm[10!,2]

IntegerDigits[10!,2]

IntegerDigits[10!,8]

IntegerDigits[10!,16]

Uwaga: IntegerDigits wypisuje wartość kolejnej pozycji liczbowo!
(nie f  tylko 15)

Składanie liczby z listy cyfr (FromDigits)

x=22!
b=18;

id=IntegerDigits[x,b]

FromDigits[id,b]

BaseForm[FromDigits[id,b],b]

Sprawdzenie

FromDigits[id,b]==x

Precyzja (Precision, Accuracy)

Precision

Precision to ilość wszystkich miejsc znaczących

X={23.6,23.654873654864276535788909987668356764755};

Length/@First/@RealDigits/@ X

RealDigits/@ X

Precision/@ X

$MachinePrecision

X={40, 40.};

Length/@First/@RealDigits/@ X

Precision/@ X

Precyzja nie zależy od położenia przecinka dziesiętnego

23.65487365486427653578890//Precision
23654873654864.27653578890//Precision

23.65487365486427653578890//RealDigits
23654873654864.27653578890//RealDigits

Reprezetacja obydwu liczb wymaga tyle samo pamięci RAM.

Wiekszość współczesnych komputerów i pracujących na nich kompilatorów ma ustaloną precyzję (FORTRAN, C: singleprecision=8, doubleprecision=16). Ponieważ położenie przecinka nie wpływa na rozmiar pamięci liczby te noszą miano zmienno-przecinkowych (floating point numbers).

Mathematica operuje liczbami o dowolnej precyzji. Domyślna precyzja jest precyzją "sprzętową"  (MachinePrecision) chyba, że wprowadzimy liczbę o większej ilości miejs znaczących. Dzięki zmiennej precyzji mozna operować dowolnie wielkimi liczbami lub prowadzić rzchunek z dowolnie dużą dokładnością. (Placimy za to pamiecią RAM.  Mathematica jest zdolna przywłaszczyć sobie całą, dowolnie dużą pamięć komputera.)

Accuracy

Accuracy to ilość miejsc po przecinku

23.65487365486427653578890//Accuracy
23654873654864.27653578890//Accuracy

Liczby ścisłe (Exact)

Mathematica operuje pojeciem liczby ścisłej. Sa to liczby o nieskończonej precyzji

Precision[4]

Precision[π]

Precision[(142/1000)]

Rachunek prowadzony przy użyciu liczb ścisłych jest ścisły (nie zawiera błędu obliczeniowego). Rachunkiem scisłym jest np

Solve[(z^2)+3z +1==0,z]

%//Precision

Liczby typu Exaxt mają oczywiście również nieskończoną Accuracy

Accuracy[π]
Accuracy[E]
Accuracy[I]

Postawienie kropki za liczbą tworzy liczbę przybliżoną o precyzji maszynowej

4//Precision
4.//Precision

Pozbycie się kropki przywraca nieskończoną precyzję

IntegerPart[4.]
%//Precision

Inny przykład

6.75
%//Precision

Rationalize[6.75]
%//Precision

Rachunek przybliżony (N, NSolve, NIntegrate)

Procedury rachunku przybliżonego mają często nazwy zaczynające się od N.

Wartość numeryczna (N)

Podaje przybliżoną wartość numeryczną wyrażenia (zamienia liczby typu Exact na ich przybliżenia dziesietne)

N[1]
N[1]//Precision

Drugi argument funkcji N pozwala ustalić precyzję w dowolny sposób

x=31;n=6;

N[x,n]
N[x,n]//Precision
N[x,n]//RealDigits
N[x,n]//RealDigits//First//Length

W ten sposób mogę wprowadzić do rachunku również liczby o precyzji mniejszej niż maszynowa (uwaga, może być niebezpieczne!)

y=N[x,n]
y//Precision

Rozwiązanie równania (NSolve)

Clear[x]

NSolve[x^5-4(x^2)+3x+1==0,x]
%//Precision

Całka (NIntegrate)

NIntegrate[Sin[Exp[x]],{x,0,1}]
%//Precision

Precyzja rachunku (WorkingPrecision)

Ustalam precyzję obliczeń na wyższą niż maszynowa

x1=NIntegrate[Sin[Exp[x]],{x,0,1}]
x2=NIntegrate[Sin[Exp[x]],{x,0,1},WorkingPrecision->60]

x1//Precision
x2//Precision

N[x1,60]
N[x2,60]

0.43060610312069103`     ;

x1//RealDigits
x2//RealDigits

x1//RealDigits//First//Length
x2//RealDigits//First//Length

Co  x1  zawiera powyżej 16 miejsca? Mogę wymusić zaliczenie wiekszej ilosci cyfr jako znaczacych 
(uwaga, niebezpieczne!)

SetPrecision[x1,16]
x3=SetPrecision[x1,60]

Miejsca powyżej 16 nie muszą być wypełnione zerami, ale cyfry tam stojące nie są znaczące. Bezpiecznie jest o nich mysleć jak o szumie losowym.

Popełniony błąd

x1-x2
x3-x2

Uwaga: podnoszenie precyzji rachunku  nie polega na podnoszeniu precyzji wyniku! Utrzynywanie własciwej precyzji rachunku jest szczególnie ważne w procedurach rekursywnych, gdzie wynik poprzedniego rachunku stanowi dane początkowe dla następnego (np. przy numerycznym rozwiązywaniu równań różniczkowych). W takich sytuacjach bład się kumuluje.

źródło notatnika

Algebra Komputerowa  (http://mth.drac.oa.uj.edu.pl/public.php?pubcase=lecture)
Wersja programu: Mathematica 7

Andrzej Woszczyna
Wydział Fizyki, Astronomii i Informatyki Stosowanej
Uniwersytet Jagielloński