Algebra Symboliczna
Wykład I

Andrzej Odrzywolek
Instytut Fizyki, Zakład Teorii Wzglednosci i Astrofizyki
22.10.2008, środa, 13:15

Dane kontaktowe

dr Andrzej Odrzywołek
pokój 447, IV pietro
E-mail: odrzywolek@th.if.uj.edu.pl
Wykład: środy 13.15-15.00, sala 128
Cwiczenia: piątki 10.30-12.00
Konsultacje: środy 11-13, czwartki 12-13
WWW: http://ribes.if.uj.edu.pl/alsymb/

Co to jest Algebra symboliczna?

Software pozwalajacy zastapic człowieka w trakcie mozliwych do algorytmizacji i tabelaryzowania operacji matematycznych

Dotyczy to np. obliczania całki nieoznaczonej, rozwiazania równania rózniczkowego lub algebraicznego, obliczenia wyznacznika macierzy itp.

Operacje te sa wykonywane symbolicznie(!) tj. tak jak robi to
student na cwiczeniach z algebry/analizy

Zwykle metody symboliczne sa łaczone z tradycyjnymi metodami numerycznymi

Poziom zaawansowania alg. symb. w chwili obecnej przekracza potrzeby większości zainteresowanych osób na swiecie

Computer Algebra Sysytems CAS

Istnieja od lat 70-tych, niekiedy (naiwnie) uwazane były za krok w kierunku „sztucznej inteligencji”

Zwykle opieraja sie na jadrze wykonujacym „prymitywne” operacje matematyczne np. mnozenie/dzielenie wielomianów, działania na ułamkach, rozkład na czynniki pierwsze itp.

„Zaawansowane” obliczenia (całkowanie, r.rózniczkowe, analiza wektorowa itp.) sa napisane typowo z uzyciem wbudowanego jezyka programowania 4GL/5GL i podstawowych procedur jadra oraz stablicowanych wyników (np. typowych całek)

CAS jest nastawiony na rozwiazywanie problemów(!): zawiera pakiety graficzne, numeryczne, obróbki danych, DTP itp

ListaCAS (niekompletna)

MAXIMA (Macsyma) http://maxima.sourceforge.net/

DERIVE

MuPAD http://www.mupad.com/

Maple http://www.maplesoft.com/

MATHEMATICA http://www.wolfram.com/

SINGULAR http://www.singular.uni-kl.de/

http://en.wikipedia.org/wiki/Comparison_of_computer_algebra_systems

Dostępność oprogramowania CAS na UJ

MATHEMATICA - nieograniczona licencja sieciowa i do użytku domowego dla studentów, doktorantów i pracowników WFAIS (3 letnia)

Maple - licencja sieciowa

Wykład i ćwiczenia oparte na MATHEMATICE

W sali A zainstalowana jest wersja 5.2 i 6.0, w pozostałych salach 6.0

Nowa licencja działa od września 2008, faza ,,rozruchu'' jest bliska zakończenia

Administrator licencji z ramienia UOKS: Arkadiusz Wierzbowski

Przełom w stylu nauczania na UJ: wchodzimy w XXI wiek

Instrukcja uzyskania licencji domowej programu Mathematica dla studentów WFAIS Uniwersytetu Jagiellońskiego

1.  Skopiować płytkę z UOKS, dostępna u Pana A. WIerzbowskiego. Proszę przynieść ze sobą czystą płytkę CD lub nośnik wymienny USB jeżcli ktoś preferuje skopiować obraz iso płyty. Rozmiar obrazu około 500MB, osobno dla każdego systemu operacyjnego. Dostępne wersje Windows, Linux i Mac.
2. Zainstalowac Mathematice.
3. Podać numer licencji studenckiej L4705-8708 .
4. Zarejestrować się na stronie Wolfram Research naciskając ,,Web'' w oknie instalatora. Wypełnić wymagane pola formularza w taki sposób aby można było ustalić czy dana osoba jest studentem WFAiS. Najlepiej podać oficjalny e-mail z USOS-u. Po zatwierdzeniu hasło zostanie wysłane do p. Wierzbowskiego w UOKS.
5. Pobrać hasło od p. Wierzbowskiego (osobiście, telefonicznie lub e-mailowo) i wpisać je w wymaganym polu.
6. Mathematica powinna już działać, po uruchomieniu na pasku powinien pojawic się napis ,,For Students''

Źródła informacji

www.wolfram.com

mathworld.wolfram.com

Pomoc (Documentation Center) w MATHEMATICA

Small Donald B., Hosack John M.
Cwiczenia z analizy matematycznej z zastosowaniem
systemów obliczen symbolicznych Wyd.:Wydawnictwa
Naukowo-Techniczne ISBN: 83-204-1778-3 Liczba stron: 244

http://ribes.if.uj.edu.pl/alsymb/

Wikipedia, internet, grupy dyskusyjne, wyszukiwarki

Strona WFAiS (USOS), kod kursu WFAIS.IF-K110.E

Zakres materiału z punktu widzenia CAS

Biegłe posługiwanie sie graficznym interfrejsem uzytkownika MATHEMATICA/Maple

Ładowanie pakietów oraz uzywanie zawartych w nich funkcji

Pisanie prostych funkcji i procedur. Petle i sekwencje wyrazen

Upraszczanie i przekształcanie wyrazen. Podstawowe struktury: listy, wyrażenia, funkcje

Obliczenia arytmetyczne stało- i zmiennoprzecinkowe dowolnej precyzji

Rozwiazanie równania / układu równan, symbolicznie i/lub numerycznie

Obliczenie dowolnej całki oznaczonej i nieoznaczonej, symbolicznie i/lub numerycznie

Narysowanie (zbadanie) przebiegu dowolnej funkcji (w tym zespolonej ) 2D / 3D danej w postaci jawnej, parametrycznej lub uwikłanej; proste animacje

Operacje na wyrazeniach jawnie zespolonych, obliczenie residuum, całki zaspolone po prostoliniowych odcinkach, transformaty Fouriera

Rozwiazanie równania rózniczkowego zwyczajnege

Zakres materiału z punktu widzenia matematycznego

arytmetyka dowolnej precyzji

E^10.0!

N[Pi,2000];

operowanie wyrazeniami algebraicznymi

Expand[(a+b)^3]

TrigExpand[Cos[13 α]]

obliczenia na liczbach i wyrazeniach zespolonych

Re[(-1+ 2 I)^5]

Log[-1]

Re[a+b I] //ComplexExpand

ComplexExpand[(E^(I ϕ))]

funkcje elementarne i specjalne

Sin[3.14159]

FresnelS[Infinity]

Gamma[1/2]

rozwiazywanie równan liniowych i nieliniowych oraz układów równan

Solve[{x^2+y^2==1, Abs[x]+Abs[y]==1},{x,y}]

ContourPlot[{x^2+y^2==1, Abs[x]+Abs[y]==1},{x,-2,2},{y,-2,2}]

Assuming[x∈Reals,D[Abs[x]]]

Assuming[z∈Reals,Integrate[Abs[z],z]]

obliczenia macierzowe

Power[(({{λ, 0}, {0, 1}})).(({{0, 1}, {1, 0}})),5]

Det[%]

rachunek rózniczkowy i całkowy

D[Sin[ω t],{t,4}]

Integrate[x^x+Log[x^x^x],x]

Assuming[x>0,Simplify[%]]

równania rózniczkowe zwyczajne i cząstkowe

DSolve[y''[x]+y[x]==1,y[x],x]

DSolve[((∂u(x,t))/(∂t))+((∂u(x,t))/(∂x)) u(x,t)==0,u(x,t),{x,t}]

obliczenia symboliczne i numeryczne

Clear[ω]

Integrate[Exp[I ω t] Exp[-t],{t,0,Infinity}]

% /. ω->1

ω=1

NIntegrate[Exp[I ω t] Exp[-t],{t,0,Infinity}]

typowe błedy obliczeń numerycznych i symbolicznych

FourierTransform[Cosh[ x],x,ω]

Integrate[Cosh[x] Exp[-I ω x],{x,-Infinity,Infinity}]

Sin[10^10 3.14159265354]

Sin[10^10 Pi]

FindRoot[Tan[z]==I,{z,1}]

Solve[Tan[z]==I,z]

Reduce[Tan[z]==I,z]

FindInstance[Tan[z]==I,z]

Zagadnienia przydatne w toku studiów i nie tylko

grafika komputerowa

KnotData[{3,1}]

wykresy 2D i 3D

ContourPlot[Cos[x]+Cos[y]==1,{x,-10,10},{y,-10,10}]

ContourPlot3D[x^4+y^4+z^4-(x^2+y^2+z^2)^2+3(x^2+y^2+z^2),{x, -4,4}, {y, -4, 4}, {z, -4, 4}]

animacje

Animate[Plot[A Sin[x+A Pi/2],{x,-Pi,Pi},PlotRange->{-2,2},PlotLabel->A],{A,-1,1,0.005}]

programowanie obliczen

Table[{n,x/.FindRoot[First[y[x] /.DSolve[{y[0]==0,y'[x]+y[x]==x^n},y[x],x]],{x,1},AccuracyGoal->2]},{n,1,20}] //ListPlot

analiza danych pomiarowych i dopasowywanie krzywych

dane=Import["http://ribes.if.uj.edu.pl/alsymb/przyklady/fitowanie_nieliniowe/dane/Si_data.txt","Table"] ;

num=Dimensions[dane][[1]]

dane1=Table[{dane[[ii,1]],dane[[ii,2]]},{ii,1,num}] ;

wykres = ListLogLogPlot[dane1,Frame->True]

Manipulate[Show[wykres,LogLogPlot[A x^n Exp[-b x],{x,0.1,10.0}]],{A,1,100},{b,1,10},{n,{1,2,3,4,5}}]

aproksymacja i interpolacja

punkty=(({{0, 0}, {(π/6), (1/2)}, {(π/4), ((Sqrt[2])/2)}, {(π/3), ((Sqrt[3])/2)}, {(π/2), 1}}))

sinus = Interpolation[punkty]

sinusek = InterpolatingPolynomial[punkty,x] //Simplify //N

Plot[{Sin[x]-sinusek},{x,0,Pi/2}]

FortranForm[sinusek]

bazy danych

Table[{IsotopeData["Properties"][[ii]],IsotopeData["Lithium3",IsotopeData["Properties"][[ii]]]},{ii,1,Dimensions[IsotopeData["Properties"]][[1]]}] //TableForm

CAS: podstawowe trudnosci dla studenta

Terminologia angielska - wiedza po polsku np:
całka - integral, rotacja  - curl, pochodna - derivative, równanie - equation, liczna naturalna  - non-negative integer
MATHEMATICA prawdopodobnie nie zostanie przetłumaczona na język polski

Używanie CAS wymaga wiedzy matematycznej, szczególnie formułowania problemów w języku matematyki

Obliczenia z użyciem CAS są w jawnym konflikcie z obecnym stylem nauczania, opartym o ręczne rachunki

Wiedza matematyczna potrzebna do skutecznego używania CAS jest nieco inna niż ta potrzebna aby zdobywać oceny 5.0 z przedmiotów matematycznych np już w szkole średniej powinny zostać wprowadzone:
1. Liczby zespolone  - w dziedzinie zespolonej więksość rachunków jest łatwiejsza do zalgorytmizowania. Równanie kwadratowe w domenie rzeczywistej ma zawsze 2 rozwiązania; w domenie rzeczywistej 0, 1 lub 2 rozwiązania.
2. Jednoznaczna notacja - np. (sin^2)x ; zapis ten powinien oznaczać Sin[Sin[x]] a rozumiemy go jako (Sin[x])2 
3. Równania różniczkowe zwyczajne, zagadnienie początkowe i brzegowe
4. Graficzne(w tym 3D, animacje, użycie kolorów itd. ) metody rozwiązywania równań i nierówności w miejsce manipulacji wyrażeniami i zapamiętywanych wzorów
5. Podstawy obliczeń numerycznych i arytmetyki komputerowej: liczby zmiennoprzecinkowe, całkowite i wymierne, podstawowe algorytmy rozwiazywania typowych problemów (bisekcja, Monte Carlo itd.)

UWAGA: Notacja jest ściśle sformalizowana!

1. (sin^2)x

sin^2x

UWAGA: nie ma żadnego komunikatu o błędzie! MATHEMATICA zinterpretowała wyrażenie jako zmienną o nazwie ,,sin'' podniesioną do kwadratu i pomnożoną przez ,,x''. Prawidłowy zapis:

Sin[x]^2

Prosty sposób na sprawdzenie: wstawiamy np. Pi:

sin^2 x /. x->Pi

Sin[x]^2 /. x->Pi

2. (sin^(-1))x (f. odwrotna do Sin[x])

sin^-1x (* zły zapis *)

InverseFunction[Sin][x] (* poprawny zapis *)

3. Mnożenie, np. sin ωt

sinωt (*ŹLE!*)

sin ωt (*ŹLE!*)

Sin[ωt](*ŹLE!*)

Sin[ωt] /. {ω->1, t->Pi} (*ŹLE! MATHEMATICA uznała że ωt to jedno wyrażenie o nazwie ,,ωt''*)

Sin[ω t] (*DOBRZE! Spacja pomiędzy ,,ω'' i ,,t'' oznacza mnożenie*)

Sin[ω*t] (*DOBRZE! Znak mnożenia dla pewności warto wpisywać *)

4. Znak równości np. x^2=4, x=cos x

x^2=4(* ŹLE!*)

Solve[%,z]

x^2==4 (*DOBRZE! Podwójny znak równości używamy do tworzenia równań i wyrażeń logicznych. *)

Solve[%,x]

x = Cos[x]; (*FATALNIE!*)

Solve[%,x]

5. Stałe fundamentalne π, e, i, ∞

Sin[pi] (*ŹLE!*)

Sin[Pi]

e^iϕ //ComplexExpand(*ŹLE! podstawa logarytmów naturalnych to E, a jednostka urojona I*)

Exp[I ϕ] //ComplexExpand (*DOBRZE!*)

Limit[Exp[-x],x->infinity] (*ŹLE!*)

Limit[Exp[-x],x->Infinity] (*DOBRZE!*)

6. Zasady składniowe dot. funkcji: 
  a) argumenty funkcji podajemy w nawiasach kwadratowych np: Sin[x]
  b) funkcje wbudowane posiadają pełne nazwy zaczynające się z dużej litery np. Gamma[x]
  c) wyjatkami od reguły b) są funkcje elementarne m.in: Sin (sinus) , Cos (kosinus), Tan (tangens), Exp (f. wykładnicza), Log (logarytm naturalny)

log[a/b^3] //PowerExpand (*ŹLE! To nie jest logarytm naturalny, tylko niesprecyzowna funkcja o nazwie ,,log''*)

Log[a/b^3] //PowerExpand (*Dobrze!*)

Γ[6] (*ŹLE!*)

Gamma[6] (*DOBRZE!*)

7. Listy, macierze, tablice, zbiory tworzymy używając nawiasów ,,wąsatych'' { }; do pojedynczych elementów listy odwołujemy się PODWÓJNYMI nawiasami kwadratowymi [[ ]]. Indeksy elementów listy zaczynaja się OD ,,1'' !

lista={a,b,c,d,e,f}

lista[[2]]

lista[[0]]

lista[[-1]]

MATHEMATICA jako kalkulator

80*127

Nacisniecie Shift+Enter powoduje obliczenie wyrazenia.
Nacisniecie Enter powoduje przejscie do nastepnej linii.
Dokładnie na odwrót w MAPLE !

Kolejne polecenia i wyniki są numerowane przez Kernel MATHEMATICI. Pozycja w oknie interfejsu użytkownika nie ma znaczenia.

Możemy uruchomić Kernel osobno (MathKernel.exe - Windows, math - Linux)

Operatory %, %%, %%%, pozwalają na odwoływanie się do wyniku 1,2, 3 kroki wstecz itd. Operator %n odwołuje się do wyniku uzyskanego w n-tym kroku.

%

%%

%1

Operator ? wyświetla skróconą pomoc, ?? rozszerzoną pomoc.

??

?Sin

??Sin

?%

Podstawowe konstrukcje składniowe

, , Zakres zmienności'': {zmienna, start, koniec, krok}

Liczby całkowite od 0 do 10:

Table[n,{n,0,10}]

Całka od 0 do π

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

Wykres funkcji w przedziale (-5,5):

Plot[Sinh[x],{x,-5,5}]

Obliczenie wartosci sinusa od 0 do 2π co π/6:

Table[Sin[α],{α,0,2 Pi,Pi/6}]

Narysowanie wykresu f. sinus w przedziale od {-T,T} przy czym początkowa wartość T równa się 2 π

Manipulate[Plot[Sin[t],{t,-T,T}],{{T,2 Pi},0.1,50,0.1}]

Wykres polilogarytmu dla n = 1, 3, 5, 7

Manipulate[Plot[PolyLog[n,x],{x,-10,10}],{n,{1,3,5,7}}]

Plot[Table[PolyLog[n,x],{n,{1,3,5,7}}],{x,-10,10}]

Podstawowe konstrukcje składniowe

Reguły transformacyjne i operator ,,zamień wszystko'' (ReplaceAll)

Reguła transformacyjna ,,x zamieniamy na y'':

regula1 = x->y

x^2+4 /. x->y

x^2+4 /. regula1

x+y /. Plus->Power

FullForm[x+y]

Sin[α] /. Sin->Exp

Przykład : Wydobywanie wartości zwracanej przez FindRoot

FindRoot[x^x==Pi,{x,1}]

x /. %

x/. FindRoot[x^x==Pi,{x,1}]