Witam !

Nazywam się Jacek Golak
Pracuję w Zakładzie Teorii Układów Jądrowych Instytutu Fizyki UJ
Moja dziedzina to teoretyczna fizyka jądrowa
Numer pokoju: B-2-32  
e-mail: jacek.golak@uj.edu.pl
strona WWW: http://users.uj.edu.pl/~golak/zestawyNOF.html

Przedmiot Narzędzia Obliczeniowe Fizyki ma charakter pomocniczy. 
Ma ułatwić studiowanie fizyki - dziedziny wiedzy, w której matematyka odgrywa kluczową rolę.
Wykłady i ćwiczenia mają pomóc  w zrozumieniu analizy matematycznej, algebry z geometrią, 
mechaniki klasycznej i kwantowej. Omawiane narzędzia z pewnością przydadzą się także przy opracowaniu
wyników doświadczeń na pracowniach fizycznych.
Zasadnicza część wykładu dotyczy programu Mathematica®.

Czym jest Mathematica® ?

https://www.wolfram.com/mathematica/

Coverage
Symbolic Language, Numerics, Mathematical Computation, 
Algebraic Manipulation, Number Theory, Function Visualization, 
Data Manipulation & Analysis, Machine Learning, Data Visualization & Graphics, 
Strings & Text, Graphs & Networks, Images, Geometry, 
Sound & Video, Knowledge Representation & Natural Language, 
Time-Related Computation, Geographic Data & Computation, 
Scientific and Medical Data & Computation, Engineering Data & Computation, 
Financial Data & Computation, Social, Cultural & Linguistic Data, 
Notebook Documents & Presentations, User Interface Construction, 
System Operation & Setup, External Interfaces & Connections, 
Cloud & Deployment

                http://www.mathematica.pl

  

“Program dla każdego!

Mathematica jest środowiskiem pracy, które pozwala na obliczenia od prostej arytmetyki po najbardziej zaawansowane obliczenia matematyki wyższej. Zakres procedur obliczeniowych pozwala na wykorzystywanie jej tak przez uczniów i studentów jak i pracowników naukowych, stosujących w pracach badawczych zaawansowany aparat matematyczny. ’’

Jak zdobyć licencję

http://www.fais.uj.edu.pl/dla-studentow/studia-z-mathematica

Wybrana literatura

LITERATURA DO WYKŁADU I ĆWICZEŃ

Wykład i ćwiczenia będą w dużej mierze oparte o program Mathematica. Ze względu na ograniczony czas, jestem w stanie jedynie zaproponować wprowadzenie w niektóre aspekty tego programu, szczególnie przydatne dla studentów  fizyki. Tym, którzy chcą lepiej poznać środowisko Mathematica polecam 

(a) “kanoniczny” podręcznik tego produktu:
Stephen Wolfram,
The Mathematica Book, Wolfram Media, wiele wydań
 
(b) zestaw poradników ze strony producenta programu
http://www.wolfram.com/mathematica/resources/

(c) Wspaniałym źródłem przykładów, jest 
“WOLFRAM DEMONSTRATIONS PROJECT”, gdzie pokazane są zastosowania środowiska Mathematica w bardzo wielu dziedzinach wiedzy. Dla nas najważniejsze są te dotyczące fizyki.
http://demonstrations.wolfram.com/

(d) bardzo wiele materiałów dostępnych w internecie, skrypty do wykładów, porady dla początkujących itp.

Nic nie zastąpi jednak praktyki

Przedstawiam notatnik (notebook), w którym pokazane są proste przykłady pracy z programem Mathematica.
Możliwa jest praca w tzw. linii komend, ale praca w notatniku jest znacznie bardziej wygodna i efektywna.

Kalkulator

Ta komórka, tak samo jak komórka powyżej, ma charakter tekstowy. Tworzymy ją, wybierając z menu u góry  
Format ⟶  Style ⟶ Text

Poniższe komórki służą do wpisywania poleceń. Są to tzw. input cells.

2+2  (*  wyrażenie jest liczone po jednoczesnym naciśnięciu Shift i Enter ! *)

(* ...... *)   (* W ten sposób zapisujemy komentarze, które nie mają wpływu na przebieg obliczeń, ale powinny być przydatne w zrozumieniu tego, co robimy ! *)

1/17+5/37

(1/9-2*5)/(-9+3/76)^4   (* a^n oznacza a do potęgi n *)

sina

a

Cos[Sin[2+2-17/3+12*4*9^(1/3)/(2-Sqrt[2])]] (* tu pojawi się nie tylko potęgowanie, ale także znane funkcje matematyczne *)

N[Cos[Sin[2+2-17/3+12*4*9^(1/3)/(2-Sqrt[2])]],100]  (* wartość przybliżona z dokładnością to 100 miejsc znaczących *)

2^34/234

2^45/789

N[(35184372088832/789)]

(* Mamy do dyspozycji stałe matematyczne *)

Pi (* liczba pi *)

N[Pi,200] (* jesli chcemy poznac wartosc numeryczna pi z (niemal) dowolna dokladnoscia *)

E (* podstawa logarytmu naturalnego *)

(* Uwaga: nie mylić E z e !!! *)

N[E,200]  (* wartość numeryczna E z (bardzo) dużą dokładnością *)

100! (* silnia *)

Factorial[100] (* to samo w innym zapisie *)

(* Mathematica podaje DOKłADNY WYNIK, jeśli to tylko możliwe *)

BARDZO WAŻNE : uwaga na zapis wyrażeń z funkcjami !!!

Sin[Pi/6] (* argument funkcji sinus w radianach ! *)

Sin[30 Degree] (* argument funkcji sinus w stopniach *)

Cos[Pi/4]

Tan[14] (* tangens *)

N[Tan[14]]

Cot[14] (* cotangens ! *)

Tan[x]*Cot[x]

(* Mathematica używa często funkcji secans i cosecans, które w polskiej literaturze są rzadko spotykane *)

Sec[x]*Cos[x] (* secans Sec[x]= 1/Cos[x] *)

Csc[x]*Sin[x] (* cosecans Csc[x]=1/Sin[x]  *)

a=(Sqrt[1/200]+Sqrt[3/101])^5/Sin[Pi/8]

(* przypisaliśmy zmiennej a pewna wartość i możemy to wykorzystać w dalszych obliczeniach *)

b=13*a-234*a^6

Pamiętajmy: mała kropka, duża różnica!

Sin[2]

Sin[2.]

Gra w kolory !!!

Sin[2,5] (* kolor czerwony oznacza nieprawidłową komendę ! *)

abece (* kolor niebieski oznacza niezdefiniowaną wcześniej wielkość ! *)

Podstawowa zasada: nazwy komend programu Mathematica (N, Plot, ...) oraz wbudowanych funkcji (sinus, cosinus, tangens, cotangens, ...) zaczynają się od dużych liter; ich argument (lub argumenty) są zawarte w nawiasach KWADRATOWYCH !

Mathematica zna różne funkcje specjalne i pozwala nimi swobodnie operować. 
BARDZO WAŻNE DLA FIZYKA !

Gamma[5] (* Funkcja gamma Eulera to uogólnienie silni. Zachodzi Gamma[n]= (n-1)! *)

Gamma[5]==4! (* To tylko sprawdzenie szczególnego przypadku *)

Gamma[7/3]

N[Gamma[(7/3)]]

FullSimplify[Gamma[n]==(n-1)!,Element[n,Integers]&&n>0]  (* Teraz mamy sprawdzenie ogólnej zależności dla dowolnej liczby całkowitej większej od zera *)

BesselJ[1,3] (* regularna (o skończonej wartości dla argumentu zero) fukcja Bessela *)

N[BesselJ[1,3]]

LegendreP[12,x]  (* wielomian Legendre'a o numerze 12 *)

LegendreP[12,3,x] (* stowarzyszone wielomiany Legendre'a, które w ogólnym przypadku nie są wielomianami :)) *)

SphericalHarmonicY[12,-10,theta,phi ]  (* Harmoniki sferyczne *)

Uwaga na nazwy funkcji, które składają się z kilku słów (arcus sinus, arcus tangens, arcus tangens hiperboliczny, ...)

ArcSin[1/2]

??Arc*

ArcTan[1]

ArcTanh[99/100]

Dlatego najlepiej jest używać nazw zmiennych i nazw funkcji pisanych małymi literami. Nie radzę próbować instrukcji typu: 
C=123.7;
D=13*Pi;
E=-1;
I=5;

Rysowanie wykresów 2D

Plot[Sin[x]+Cos[4*x],{x,0,2*Pi}]

Plot[1/(1-x^2),{x,-3,3}]

Plot[{x^3,Cos[x^4]},{x,-2,2}]

Plot[{x/100,BesselJ[10,x]},{x,5,25}]

Plot3D[x^2-4*Sin[y^2],{x,0,2},{y,-1,4}]

Listy

(*  Uporządkowany zbiór, w zasadzie dowolnych, elementów *)

{1,2,3,x,Sin[p],{y,z},"napis"}

(* zmienna ma wartość, która jest listą *)

dziwnalista={1,x,Sin[beta],{p,q},{11,12,z}}

dziwnalista[[1]] (* pierwszy element listy; koniecznie podwójne nawiasy ! *)

(* to samo inaczej ... *)

Part[dziwnalista,1]

(* ... i jeszcze inaczej *)

First[dziwnalista]

dziwnalista[[2]]

dziwnalista[[4]] (* ten element listy sam jest listą ... *)

dziwnalista[[4]][[1]] (*  ... i można zapytać, jaki jest jego pierwszy element *)

(* Elementy listy w odwrotnej kolejności *)

dziwnalistawstecz=Reverse[dziwnalista]

(* Listy można ze sobą łączyć *)

lista1={1,4,2,5};

lista2={10,4,5,7,3,11};

lista3=Join[lista1,lista2]

(* Proszę zwrócić uwagę na powtarzające się elementy !  Można je usunąć przy pomocy komendy DeleteDuplicates *)

lista4=DeleteDuplicates[lista3]

(* Prosta komenda zlicza elementy listy *)

Length[lista4]

(* Jeszcze inne instrukcje sortują listę *)

lista5=Sort[lista4]

lista6=ReverseSort[lista5]

(* lista, której elementami są wykresy *)

{Plot[Sqrt[x],{x,0,2}],Plot[Sin[5*x],{x,0,Pi}],Plot[x^2,{x,-2,2}]}

Niektóre komendy z definicji dają listy

Table[n^3,{n,1,7}]

(* teraz dostaniemy listę rysunków *)

Table[Plot[x^n,{x,-2,2}],{n,3,5,1}]

(* prosta lista kolejnych liczb naturalnych od 1 do 10 *)

Range[10]

(* lista liczb naturalnych od 2 do 10 *)

Range[2,10]

(* lista liczb naturalnych od 2 do 10, ale z krokiem 5 *)

Range[2,10,5]

?Range

??Range

CharacterRange["A","Z"]

CharacterRange["α","ω"]

Dla list z liczbami mamy bardzo użyteczne komendy:

l1={2,4,1,17,-3,8,95,-34,0}

Length[l1]

Total[l1]

Mean[l1]

Max[l1]

Min[l1]

(* Bardzo ważne: można zadziałać funkcją na CAłĄ LISTĘ ! *)

l1^2

Sin[l1]

N[Cos[l1]]

Rozwiązania równań występują w postaci list ! Dopiero odpowiednia składnia pozwala na "wyłuskanie" wyniku

sol=Solve[x^2==4,x]

sol[[1]]

sol[[2]]

FullForm[sol]

(* Jak wydostać wartość -2, by użyć ją na przykład w dalszych rachunkach ? *)

sol[[1]][[1]][[2]]

(* tego można już używać jak zwykłej wartości liczbowej i przypisać ją zmiennej *)

x11=sol[[1]][[1]][[2]]

x12=sol[[2]][[1]][[2]]

(* Inny sposob wykorzystuje ogólny zapis PODSTAWIENIA *)

x21=x/.sol[[1]]

x22=x/.sol[[2]]

(* Podstawienie działa tak: *)

(z+z^2)/.{z->11}

=, czy ==, czy może === ?

q=90; (* jeden znak "="   przypisanie zmiennej wartości *)

1/2==Sin[Pi/6] (* dwa znaki "="   sprawdzenie równości liczb lub wyrażeń *)

Solve[x^2+3*x+6==0,x] (* dwa znaki "="  konieczne przy równaniach    *)

x=Tan[c];

y=Sin[c]/Cos[c];

x===y  (* sprawdzenie identycznego znaczenia wyrażeń *)

Uzyskiwanie pomocy

Wiele komend posiada opcje, niekiedy bardzo wiele opcji

Plot[Sqrt[x],{x,0,3},AxesLabel->{"x","y"},PlotStyle->Green]

Options[Plot]

?N

(* krotka informacja o funkcji Plot *)
?Plot

(* bardziej rozbudowana informacja o funkcji Plot *)
??Plot

(* pomoc na temat wszystkich funkcji lub poleceń zaczynajacych sie od "Plot" niestety w wersji 14.1 już nie działa! Lepsze jest wrogiem dobrego ... *)
?Plot*

Nasze własne funkcje

Puszczamy wodze fantazji i definiujemy NOWĄ funkcję

f[x_]:=Tan[Sin[Cos[x]]]  (* to nie jest jedyny sposób, ale na razie wystarczy;
więcej informacji o tzw. natychmiastowej i opóźnionej defincji funkcji można znaleźć na mojej stronie w notebooku 
natychmiastowa_i_opozniona_definicja_funkcji.nb
 *)

Plot[f[x],{x,0,Pi}]

f[1]

N[f[1],20]

(* Jeszcze jeden ważny przykład: funkcję można zdefiniować KAWAŁKAMI *)

w[x_]:=Piecewise[{{x^2,x<0},{x,x>=0}}] (* uwaga na składnię *)

Plot[w[x],{x,-2,2}]

w[0]

Zapis z ‘@’

ClearAll[f,g,h];

f@x

f@g@h@x

Czyste funkcje (pure functions = anonymous functions)

(2 #)& (* ta czysta funkcja zwraca podwojoną wartość argumentu *)

(2 #)&[5]

(* Może być aplikowana do listy *)

(2 # )&[{2,6}]

(* i zapisana także w ten sposób *)

Function[x,2x]

Function[x,2x][r]

(* Nadajmy funkcji nazwę *)

f1=Function[x,2x];

f1[r]

f1@r

(* Użyjmy funkcji Map *)

Map[f1,r]  (* Tak jest NIEPOPRAWNIE *)

Map[f1,{r}] (* Tak jest POPRAWNIE *)

ClearAll[f1,a,b,c,d];

Map[f1,{a,b,c,d}]

(* To samo inaczej *)

f1/@{a,b,c,d}

(* Teraz Map działa na listę list na poziomie 1 *)

Map[f1,{{a,b},{c,d}}]

(* Teraz Map działa na listę list na poziomie 2 *)

Map[f1,{{a,b},{c,d}},{2}]

f1@{{a,b},{c,d}}

f1/@{{a,b},{c,d}}

f1@@{{a,b},{c,d}}

f1@@@{{a,b},{c,d}}

Operator %

v=24*5/(6!)

N[%]    (* % zastępuje wynik poprzedniego obliczenia. Ponieważ obliczenia w poszczególnych komórkach mogą być wykonywane w dowolnej kolejności, % nie oznacza automatycznie wyniku z poprzedniej komórki !   *)

w=%+11

t1=%%*6 (* %% teraz wykorzystujemy przedostatnio uzyskany wynik *)

t2=%%% *6 (* a teraz jeszcze wcześniejszy *)

(* wynik z komórki numer 126 *)
t3=(%126)*6

Nadawanie wartości zmiennym i ich odwoływanie

W jednej komórce można podać wiele komend

a1=23
a2=3
a3=7

Jeśli nie chcemy widzieć outputu (na przykład przy prostych instrukcjach przypisania), wtedy dajemy średniki

b1=23;b2=3;b3=7;b4=-9.0;b5=76;b6=0;

Clear[b1 ] ; (* wartość b1 stanie się z powrotem nieokreślona; proszę zwrócić uwagę na zmianę koloru na niebieski ! *)

b1

b2=.; (* to dziala tak samo. UWAGA na zmiane koloru nazwy b2 z czarnego na niebieski *)

Clear[b3,b4,b5] (* to wyczyści trzy zmienne naraz *)

(* poniższa instrukcja wyczyści WSZYSTKIE PRZYPISANE WARTOŚCI i DEFINICJE *)

ClearAll["Global`*"]

a1

f

Inne

s1=Sum[n^2,{n,1,10}]

(* łatwo użyc opcji Insert -> Input from above i potem zmienić , by uzyskać ... *)

s2=Sum[n^5,{n,1,10}]

(* podobnie można wykorzystać output z poprzedniej komórki *)

Sum[ii^3,{ii,1,n}]

g[n_]:=(1/4) (n^2) (((1+n))^2)  (* użyłem opcji Insert -> Output from above *)

(* Insert -> Picture -> From file *)

;

Blur[,5]

bird=;

ColorNegate[EdgeDetect[bird]]

Jak unikać podstawowych błędów

(0) Notatnik zbudowany jest z komórek. Na początku warto zapisywać polecenia w odrębnych komórkach, bo łatwiej jest zlokalizować błędy ! Polecenia wprowadzamy przy pomocy SHIFT+ENTER

(1) Nawiasy ( ) są używane wyłącznie dla zaznaczenia kolejności operacji. Nie należy używać { } oraz [ ] w wyrażeniach matematycznych !

(2) Polecenia programu Mathematica oraz wbudowane funkcje mają nazwy zaczynające się z dużej litery !

(3) Nawiasy kwadratowe są używane dla argumentów poleceń i funkcji !

(4) Nawiasy { } są używane wyłącznie w listach !

(5) Przy definiowaniu własnych funkcji  (na razie) trzymać się wzoru: f[x_]:= x^5

(6) Równania (i porównywania) wymagają dwóch znaków ==

Przypominam: należy zwracać uwagę na kolory !
Kolor czerwony oznacza zwykle błędną składnię !
Kolor niebieski zmiennej oznacza, że nie nadano jej żadnej wartości, co może mieć wpływ na dalsze obliczenia z wykorzystaniem tej zmiennej !