Polski opis Eigenmath, Opisy programów FREE


Eigenmath

(v. 137)

Portable. Freeware.

Podręcznik użytkownika

Źródło:

Eigenmath.pdf

G. Weight

Maj 2011

Przekład:

Robert Wiśniewski

0x01 graphic

http://chomikuj.pl/bobwis

Eigenmath to wieloplatformowy system algebry komputerowej napisany przez George Weigta.

Obecnie dostępny dla systemów Windows Linux i Mac OS X.

Eigenmath jest napisany w języku C, a jego kod źródłowy jest wolno dostępny.

Ten niewielki programik pozwala na wykonywanie nie tylko obliczeń numerycznych ale również symbolicznych (w  tym różniczkowanie i całkowanie), przeprowadzanie operacji macierzowych i tworzenie prostych wykresów a nawet pisanie skryptów.

W istocie rzeczy jest to zminiaturyzowana, przenośna wersja MatLab.

0x01 graphic

SPIS TREŚCI

1. Wprowadzenie

1.1. Wykładniki ujemne

1.2. Definiowanie symboli

1.3. Wykresy

1.4. Skrypty

1.5. Liczby zespolone

1.6. Algebra liniowa

2. Obliczenia

2.1. Pochodne

2.2. Gradient

2.3. Szablony funkcji

2.4. Całki

2.5. Długość łuku

2.6. Lrzywe całkowe

2.7. Pole powierzchni

2.8. Całki powierzchniowe

2.9. Teoria Greena

2.10. Teoria Stokesa

3. Dodatkowe przykłady

3.1. Wzory François Viète

3.2. Wirowość (rotacja) w postaci tensorowej

3.3. Kwantowy oscylator harmoniczny

3.4. Wodorowe funkcje falowe

3.5. Akceleratory kosmiczne Shuttle i Corvette

3.6. Stała Avogadro

3.7. Zero do potęgi zerowej

4. Funkcje wbudowane

5. Składnia

0x01 graphic

1. Wprowadzenie

Poniższe przykłady zaczerpnięte zostały z autobiograficznych notatek Vladimira Nabokova.

„Prosty samouczek objaśnił mi zbyt wcześnie istotę logarytmów i wyczytałem w (brytyjskiej publikacji dla młodzieży) o pewnym matematyku hinduskim, który dokładnie w ciągu dwóch sekund potrafił obliczać 17-ty pierwiastek np. z liczby 3529471145760275132301897342055866171392 (nie miałem pewności czy wynik jest dobry, ale sprawdziłem i wynosił on 212)”.

Możemy to sprawdzić wpisując w programie Eigenmath wyrażenie:

212^17

Po wciśnięciu klawisza ENTER, zostanie wyświetlony poniższy wynik:

3529471145760275132301897342055866171392

Tak więc Nabokow miał rację.

Możemy to dalej sprawdzić klikając przycisk Float, co prowadzi do prostszego wyniku

3.52947 x 1039

Teraz możemy skorzystać z Eigenmath do obliczenia 17-tego pierwiastka z tej liczby.

N=212^17

N

N = 3529471145760275132301897342055866171392

N^(1/17)

212

Podkreśla się, że gdy do symbolu jest przypisywana w liczba, nie ukazuje się żaden wynik.

Aby zobaczyć tą wartość, trzeba wprowadzić ten symbol w wierszu wpisywania danych:

N

N = 3529471145760275132301897342055866171392

1.1. Wykładniki ujemne

Eigenmath wymaga stosowania nawiasów wokół wykładników ujemnych, np.

10^(-3)

zamiast

10^-3

Powodem tego jest to, że łączenie znaków ujemnych nie zawsze jest jednoznaczne.

Przykładowo w wyrażeniu:

X^-1/2

nie jest jasne czy wykładnikiem jest -1 czy -1/2.

Tak więc Eigenmath wymaga wprowadzania nawiasów x^(-1/2), co jest jednoznaczne.

Teraz powstaje nowe pytanie. Pomijając znak minus, czy może występować osobny znak potęgowania ^ (bez nawiasów) ?

Odpowiedź jest taka, że istotny jest tylko pierwszy znak za symbolem potęgowania. Przykładowo, poniższe wyrażenie jest traktowane jako (x1)/2:

x^1/2

0x01 graphic

Tak więc na ogół, nawiasy sa niezbędne w wyrażeniu zawierającym wykładnik

X^(1/2)

x1/2

1.2. Definiowanie symboli

Jak wcześniej wspomniano, Eigenmath korzysta z takiej samej składni jak stary język Fortran.

N=212^17

Przy definiowaniu symbolu, żaden wynik nie jest wyświetlany. Aby zobaczyć wynik, trzeba wprowadzić wymagany symbol:

N

N = 3529471145760275132301897342055866171392

Wszystko po pierwszej literze symbolu jest traktowane jako indeks dolny:

NA = 6.02214*10^23

NA=6.02214*1023

Symbol może być literą grecką:

xi=1/2

xi

0x01 graphic

Z uwagi na to, że xi jest odczytywane jako ξ, jak można wprowadzić symbol xi ? Spróbujemy to rozwiązać w przyszłości, ale teraz xi jest odczytywane zawsze jako ξ.

Litery greckie mogą również pojawiać się w indeksach.

Amu=2.0

Amu

Aμ = 2.0

Ogólna zasada jest taka, że Eigenmath skanuje cały symbol szukając greckich liter:

alphamunu

αμν

Spróbujemy teraz sprawdzić co się pojawi przy obliczaniu wartości symbolu. Najważniejsze jest to, że Eigenmath dokładnie oblicza podwyrażenia symboliczne.

A=B

B=C

C=D

sin(A)

sin(D)

W powyższym przykładzie, obliczanie wartości sin(A) prowadzi do wyniku sin(D), ponieważ program Eigenmath rozwiązuje symbol A zastępując go symbolem D.

Jednak wewnętrznie A jest nadal równe B. co można sprawdzić wpisując funkcję nawiasów binding:

binding(A)

B

Spróbujmy teraz wrócić na chwile do definicji symboli. Pamiętamy, że prawa strona definiowanego wyrażenia jest obliczana przed jej zamknięciem w nawiasach (przed wykonaniem funkcji binding), np.:

B=1

A=B

binding(A)

1

Funkcja binding A jest tutaj równa 1, a nie B, ponieważ B już zostało wcześniej zdefiniowane zanim pojawiało się A=B. Do poznania dokładnej wartości A stosujemy funkcję quote:

A=quote(B)

binding(A)

B

Wszystko to oznacza, że symbole mają podwójny charakter. Symbol ma wartość nawiasową binding Tora może być inna od jej obliczanej wartości, Zwykle różnica ta nie jest istotna. Funkcje quote oraz binding są tu wymienione głównie w celu zilustrowania tego co może pojawiać się wewnątrz programu. W warunkach normalnych nie trzeba korzystać z tych funkcji. Jednak jedynym istotnym wyjątkiem jest korzystanie z funkcji quote do oczyszczania symbolu.

x=3

x

x = 3

x=quote(x)

x

x

1.3. Wykresy

Funkcja draw(f,x) rysuje wykres funkcji f względem zmiennej x. Drugi argument można pominąć gdy zmienną zależną jest x lub t. Wektory xrange oraz yrange sterują skalą wykresu, np. draw(x^2).

0x01 graphic

xrange=(-1,1)

yrange=(0,2)

draw(x^2)

0x01 graphic

Funkcja Clear (lub kliknięcie przycisku Clear) resetuje zakres xrange oraz yrange przywracając go do wartości domyślnych.

Wykresy parametryczne pojawiają się gdy funkcja zwraca wektor. Funkcja trange steruje zakresem wektora.

Zakres domyślny wynosi (-π, π)

f=(cos(t),sin(t))

draw(5*f)

0x01 graphic

trange=(0,pi/2)

draw(5*f)

0x01 graphic

Poniżej przedstawiono zestaw ciekawych krzywych oraz kody do ich wykreślania.

Pierwszą z nich jest lemniskata.

clear

X=cos(t)/(1+sin(t)^2)

Y=sin(t)*cos(t)/(1+sin(t)^2)

draw(5*(X,Y))

0x01 graphic

Następną jest kardioida

r=(1-cos(t))/2

u=(cos(t),sin(t))

xrange=(-1,1)

yrange=(-1,1)

draw(r*u)

0x01 graphic

1.4. Skrypty

Poniżej przytoczono przykład rysowania wykresu linii prostej y = mx + b.

y=m*x+b

m=1/2

b=-3

draw(y)

0x01 graphic

Teraz załóżmy, że chcemy rysować ten wykres dla różnych wartości m. Możemy ponownie wszystko wpisywać, ale łatwiej jest wykonać to za pomocą skryptu. Potem wystarczy wrócić i szybko wpisywać różne wartości m oraz b tyle razy ile tylko zechcemy.

W celu utworzenia skryptu, kliknąć przycisk Edit Script. Następnie wprowadzić polecenia skryptu po jednym wierszu jak pokazano powyżej. po czym kliknąć przycisk Run Script aby zobaczyć wykres.

Program Eigenmatch uruchamia skrypt wiersz po wierszu, Każdy wiersz jest obliczany tak jak przy zwyczajnych poleceniach. Jest to kontynuowane do końca skryptu.

Po uruchomieniu skryptu można kliknąć przycisk Edit Script i w celu powrotu i dokonania zmiany skryptu.

Czasem można wydrukować skrypt np. w celu dodania do niego kilku komentarzy. Można to wykonać przez wprowadzenie wymaganego tekstu w cudzysłowach (w jednym wierszu). Przykładowo, poniższy skrypt:

„To jest liczba pi”

float(pi)

Wyświetli po kliknięciu przycisku Run Script:

To jest liczba pi

3,1415

Program Eigenmatch ma wbudowaną prostą możliwość debuggingu. Ustawienie polecenia trace na wartość 1 powoduje, że każdy wiersz skryptu będzie drukowany po uruchomieniu skryptu.

Zwykle to ustawienie powinno znajdować się w pierwszym wierszu skryptu

trace=1

Teraz po uruchomieniu skryptu drukowany będzie każdy jego wiersz.

1.5. Liczby zespolone

Gdy program Eigenmatch zostanie uruchomiony, definiuje in symbol i jako 0x01 graphic
. W pozostałych przypadkach litera i nie ma specjalnego znaczenia. Jest to zwykły symbol jaki można przedefiniować oraz korzystać z niego wg potrzeb.

Liczby zespolone można wprowadzać w postaci prostokątnej lub biegunowej:

a+i*b

a + ib

exp(i*pi/3)

0x01 graphic

Przekształcenie postaci prostokątnej w biegunową za pomocą funkcji rect upraszcza mieszane formy.

A=1+i

B=sqrt(2)*exp(i*pi/4)

A-B

0x01 graphic

rect

0

Podnoszenie do potęgi regularnych liczb zespolonych powoduje ich mnożenie.

(a+i*b)^2

0x01 graphic

Gdy a i b są liczbami a wykładnik potęgi jest ujemny, obliczenie jest wykonywane następująco:

0x01 graphic

Oczywiście, powoduje to usunięcie wielkości i z mianownika.

Poniżej podano kilka przykładów:

1/(2-i)

0x01 graphic

(-1+3i)/(2-i)

0x01 graphic

Wartość bezwzględna liczby zespolonej zwraca jej wielkość:

abs(3+4*i)

5

W związku z powyższym, można oczekiwać następującego wyniku:

abs(a+b*i)

0x01 graphic

Wynikiem nie jest, 0x01 graphic
ponieważ wymagałoby to założenia się że a i b są liczbami rzeczywistymi. Przykładowo, przyjmijmy, że a = 0, b = i. Wówczas:

0x01 graphic

oraz:

0x01 graphic

i dlatego dla pewnych a, b C, mamy

0x01 graphic

Funkcja mag jest alternatywą. Traktuje ona symbole a oraz b jako liczby rzeczywiste.

mag(a+b*i)

0x01 graphic

1.6. Algebra liniowa

Do mnożenia wektorów i macierzy stosowany jest iloczyn kropkowy (wektorowy) w postaci funkcji dot. Poniższy przykład pokazuje jak korzystać z tej funkcji oraz jak korzystać z funkcji inv do rozwiązywania układu równań liniowych AX = B względem X.

A=((3.8,7.2),(1.3,-0.9))

B=(16.5,-22.1)

X=dot(inv(A),B)

X

0x01 graphic

Co w tym jest dziwnego i dlaczego konieczne jest stosowanie funkcji dot ? Dlaczego nie korzystamy po prostu z wyrażenia 0x01 graphic
takiego jak iloczyn skalarny ? Powodem tego jest to, że program zwykle zmienia wewnętrznie kolejność czynników w celu optymalizacji procesu obliczania.

Przykładowo, symboliczna postać wyrażenia 0x01 graphic
zmieniana jest wewnętrznie na 0x01 graphic
. Z uwago na to, że iloczyn kropkowy dot nie jest przemienny, taka zmiana kolejności prowadzi do błędnego wyniku. Korzystanie z podanej wyżej funkcji do mnożenia rozwiązuje ten problem, ponieważ argument nie zmienia kolejności.

Należy podkreślić, że funkcja dot może mieć więcej niż dwa argumenty. Przykładowo, można korzystać z wyrażenia dot(A,B,C) do uzyskania iloczynu wektorowego trzech tensorów.

Poniższy przykład demonstruje relację 0x01 graphic

A=((a,b),(c,d))

inv(A)

0x01 graphic

adj(A)

0x01 graphic

det(A)

0x01 graphic

inv(A)-adj(A)/det(A)

0x01 graphic

Czasem obliczenia mogą być prostsze jeśli zostaną przeorganizowane do korzystania z funkcji adj zamiast inv. Główną ideą jest próba zapobiegania pojawiania się wyznacznika w dzielniku. Przykładowo załóżmy, że mamy macierze A i B i chcemy sprawdzić czy:

0x01 graphic

W zależności od złożoności det B, program może nie być zdolny do sprawdzenia, czy wynik jest zerem. Jeśli to ma miejsce, należy skorzystać z poniższej alternatywy:

0x01 graphic

Funkcja adj macierzy jest związana z ko faktorami w poniższy sposób:

A=((a,b),(c,d))

C=((0,0),(0,0))

C[1,1]=cofactor(A,1,1)

C[1,2]=cofactor(A,1,2)

C[2,1]=cofactor(A,2,1)

C[2,2]=cofactor(A,2,2)

C

0x01 graphic

adj(A)-transpose(C)

0x01 graphic

2. Obliczenia

2.1. Pochodne

Funkcja d(f; x) zwraca pochodną f względem zmiennej x. Zmienną x można pominąć w wyrażeniu zawierającym tylko zmienną x.

d(x^2)

2x

Poniższa tabela zestawia różne sposoby obliczania pochodnych wyższych stopni.

0x01 graphic

2.2. Gradient

Gradient f uzyskuje się przy korzystaniu z wektora x w pochodnej d(f; x).

r=sqrt(x^2+y^2)

d(r,(x,y))

0x01 graphic

Gradient f w pochodnej d(f; x) może być funkcją tensorową. Gradient wzrasta o 1 wraz ze stopniem.

F=(x+2y,3x+4y)

X=(x,y)

d(F,X)

0x01 graphic

2.3. Szablony funkcji

Funkcja f w pochodnej d(f) nie musi być zdefiniowana. Może być to szablon funkcji wyrażony poprzez jego nazwę i listę argumentów.

Program Eigenmath sprawdza listę argumentów z zadaniem do wykonania.

Przykładowo, wyrażenie d(f(x); x) jest obliczane, ponieważ f zależy od x. Wyrażenie d(f(x); y) oblicza wartość zero, ponieważ f zależy nie tylko od y.

d(f(x),x)

0x01 graphic

d(f(x),y)

0

d(f(x,y),y)

0x01 graphic

d(f(),t)

0x01 graphic

Ostatni przykład pokazuje, że pusta lista argumentów powoduje zawsze obliczanie wartości bez względu na drugi argument.

Szablony funkcji są przydatne do eksperymentowania z różnymi postaciami. Przykładowo, załóżmy że chcemy sprawdzić identyczność wyrażenia:

div(curlF) = 0

dla arbitralnej funkcji wektorowej F:

F=(F1(x,y,z),F2(x,y,z),F3(x,y,z))

curl(U)=(d(U[3],y)-d(U[2],z),d(U[1],z)-d(U[3],x),d(U[2],x)-d(U[1],y))

div(U)=d(U[1],x)+d(U[2],y)+d(U[3],z)

div(curl(F))

0

2.4. Całki

Całkowanie integral(f; x) zwraca wartość funkcji podcałkowej f względem zmiennej x.

Zmienną x można pominąć.

Można wykonywać całkowanie wielokrotne rozszerzając listę argumentów.

integral(x^2)

0x01 graphic

integral(x*y,x,y)

0x01 graphic

Funkcja defint(f, x, a, b,...) oblicza całkę oznaczoną f względem x w granicach od a do b.

Lista argumentów może być rozszerzona dla całek wielokrotnych.

Poniższy przykład oblicza całkę f=x2 w dziedzinie półkola. Dla każdej wartości x wzdłuż odciętej, zakresy y wzdłuż rzędnej zmieniają się od 0 do 0x01 graphic

defint(x^2,y,0,sqrt(1-x^2),x,-1,1)

0x01 graphic

Alternatywnie można skorzystać z funkcji eval do obliczania całki oznaczonej krok po kroku.

I=integral(x^2,y)

I=eval(I,y,sqrt(1-x^2))-eval(I,y,0)

I=integral(I,x)

eval(I,x,1)-eval(I,x,-1)

0x01 graphic

Tutaj zastosowano przydatną sztuczkę. Trudniejsze całki zawierające sinus i cosinus można często rozwiązać korzystając z wykładników. Uproszczenia trygonometryczne korzystające z potęg i kątów wielokrotnych można zmienić w proste wyrażenia algebraiczne w dziedzinie wykładniczej.

Przykładem może być całka oznaczona:

0x01 graphic

którą można rozwiązać w poniższy sposób:

f=sin(t)^4-2*cos(t/2)^3*sin(t)

f=circexp(f)

defint(f,t,0,2*pi)

0x01 graphic

Poniżej podane jest sprawdzenie:

g=integral(f,t)

f-d(g,t)

0

Podstawowe prawo obliczania przedstawił James Gregory współczesny Newtonowi. Prawo to jest formalnym wyrażeniem odwrotnej relacji między całkami i pochodnymi.

0x01 graphic

Poniżej przytoczono rozwiązanie Eigenmath podstawowego prawa obliczania:

f=x

xrange=(-1,1)

yrange=xrange

draw(defint(f))

0x01 graphic

draw(integral(defint(f)))

0x01 graphic

Pierwszy wykres pokazuje, że f '(x) jest asymetryczna i dlatego łączne pole pod krzywą w granicach od -1 do 1 wynosi 0.

Drugi wykres pokazuje, że f(1) = f(-1) i dlatego dla 0x01 graphic
uzyskujemy:

0x01 graphic

2.5. Długość łuku

Załóżmy, że g(t) jest funkcją, która wykreśla krzywą. Długość łuku od g(a) do g(b) opisuje całka:

0x01 graphic

W której |g'(t)| jest długością wektora stycznego do funkcji g(t). Suma całkowa wszystkich długości łuków osiąga łączną długość od a do b. Przykładowo, spróbujemy zmierzyć długość poniższego łuku:

xrange=(0,1)

yrange=(0,1)

draw(x^2)

0x01 graphic

Odpowiednia wartość g(t) dla tego łuku wynosi:

0x01 graphic

Rozwiązanie Eigenmath ma postać:

x=t

y=t^2

g=(x,y)

defint(abs(d(g,t)),t,0,1)

0x01 graphic

float

1.47894

Zgodnie z oczekiwaniem, wynik jest większy od długości przekątnej równej 0x01 graphic
.

Wynik ten wygląda raczej na skomplikowany gdy zaczniemy od prostej paraboli.

Sprawdźmy wartości |g'(t)| aby upewnić się dlaczego tak się dzieje:

g

0x01 graphic

d(g,t)

0x01 graphic

abs(d(g,t))

0x01 graphic

Poniższy skrypt wykonuje dyskretne obliczenie długości łuku przez dzielenie krzywej na 100 części.

g(t)=(t,t^2)

h(t)=abs(g(t)-g(t-0.01))

L=0

for(k,1,100,L=L+h(k/100.0))

L

L = 1.47894

Obliczyć długość krzywej y = x3/2 od początku układu do x = 4/3.

x=t

y=x^(3/2)

g=(x,y)

defint(abs(d(g,x)),x,0,4/3)

0x01 graphic

Chociaż t jest podstawione w miejsce x, poprzednie rozwiązanie w istocie rzeczy nie różni się od poniższego

g=(t,t^(3/2))

defint(abs(d(g,t)),t,0,4/3)

0x01 graphic

2.6. Krzywe całkowe

Istnieją dwa rodzaje krzywych całkowych: jedne dla pól skalarnych i drugie dla pól wektorowych.

Poniższa tabela pokazuje jak są one obliczane w oparciu o długości łuków.

Postać abstrakcyjna

Postać obliczeniowa

Długość luku

0x01 graphic

0x01 graphic

Krzywa całkowa, pole skalarne

0x01 graphic

0x01 graphic

Krzywa całkowa, pole wektorowe

0x01 graphic

0x01 graphic

Dla postaci pola wektorowego, do oznaczania jednostkowego wektora stycznego stosowany jest symbol u :

0x01 graphic

Długość wektora stycznego upraszcza się względem ds w poniższy sposób:

0x01 graphic

Po obliczeniu uzyskujemy:

0x01 graphic
oraz 0x01 graphic

gdzie C jest linią prostą od (0, 0) to (1, 1).

Jaka różnica powstaje względem pomiaru ? Pierwsza pochodna znajduje się na polem skalarnym, a druga pochodna znajduje się na polem wektorowym. Stanie się to lepiej zrozumiałe gdy uzyskamy wynik obliczeniowy:

0x01 graphic

Dlatego dla 0x01 graphic
, otrzymujemy:

x=t

y=t

g=(x,y)

defint(x*abs(d(g,t)),t,0,1)

0x01 graphic

Natomiast dla 0x01 graphic
, otrzymujemy:

x=t

y=t

g=(x,y)

F=(x,0)

defint(dot(F,d(g,t)),t,0,1)

0x01 graphic

Poniższe zadania krzywych całkowych pochodzą z podręcznika Advanced Calculus, Fifth Edition by Wilfred Kaplan.

Obliczyć całkę 0x01 graphic
wzdłuż krzywej od (0,0) do (2,2).

x=2t

y=2t

g=(x,y)

F=(y^2,0)

defint(dot(F,d(g,t)),t,0,1)

0x01 graphic

Obliczyć całkę 0x01 graphic
wzdłuż krzywej:

0x01 graphic

x=2t+1

y=t^2

z=1+t^3

g=(x,y,z)

F=(z,x,y)

defint(dot(F,d(g,t)),t,0,1)

0x01 graphic

2.7. Pole powierzchni

Niech S będzie polem powierzchni sparametryzowanej zmiennymi x i y.

Oznacza to, że 0x01 graphic
, gdzie z = f(x, y). Linie styczne w tym punkcie pola S tworzą wąski równoległobok. Powierzchnia a tego równoległoboku jest opisana wielkością iloczynu wektorowego.

0x01 graphic

Przez sumowanie wszystkich tych równoległoboków uzyskujemy łączne pole powierzchni,. A zatem:

0x01 graphic

Poniższy przykład oblicza pole powierzchni tarczy jednostkowej równoległej do płaszczyzny xy.

z=2

S=(x,y,z)

a=abs(cross(d(S,x),d(S,y)))

defint(a,y,-sqrt(1-x^2),sqrt(1-x^2),x,-1,1)

0x01 graphic

Wynikiem jest π, zgodnie z oczekiwaniem - pole powierzchni koła jednostkowego. Poniższy przykład oblicza powierzchnię z = x2 + 2y jednostkowego kwadratu:

z=x^2+2y

S=(x,y,z)

a=abs(cross(d(S,x),d(S,y)))

defint(a,x,0,1,y,0,1)

0x01 graphic

Z powodów praktycznych, funkcja f(x,y) musi być bardzo prosta aby Eigenmath mógł rozwiązać całkę podwójną. Teraz obliczmy spiralę zdefiniowaną przez :

0x01 graphic

W przykładzie tym, współrzędne x, y i z są funkcjami niezależnego parametru w przestrzeni.

x=u*cos(v)

y=u*sin(v)

z=v

S=(x,y,z)

a=abs(cross(d(S,u),d(S,v)))

defint(a,u,0,1,v,0,3pi)

0x01 graphic

float

10.8177

2.8. Całki powierzchniowe

Całka powierzchniowa jest podobna do łapania wiatru w żagle.

Inaczej mówiąc, obliczamy poniższą całkę:

0x01 graphic

w której Fn jest ilością wiatru padającego na wąski, prostopadły równoległobok dA. Całka ta sumuje po całej powierzchni żagla.

Niech S będzie powierzchnią żagla sparametryzowaną przez x i y (w modelu tym kierunek z jest zgodny z wiatrem).

Na podstawie właściwości iloczynu wektorowego uzyskujemy poniższe wyrażenie dla jednostki normalnej n oraz dla dA:

0x01 graphic

Wynika stąd, że:

0x01 graphic

Przykładowo, obliczmy poniższa całkę powierzchniową:

0x01 graphic

gdzie: 0x01 graphic
, S jest powierzchnią, 0x01 graphic
, a n jest górą .

Podkreśla się, że powierzchnie te przecinają się w płaszczyźnie koła xy.

Korzystając z reguły prawej dłoni przecinamy x oraz y, co prowadzi do górnego punktu n.

0x01 graphic

Poniższy kod Eigenmatch oblicza tą całkę powierzchniową.

Symbole f i h stosowane są tutaj jako zmienne tymczasowe.

z=1-x^2-y^2

F=(x*y^2*z,-2*x^3,y*z^2)

S=(x,y,z)

f=dot(F,cross(d(S,x),d(S,y)))

h=sqrt(1-x^2)

defint(f,y,-h,h,x,-1,1)

0x01 graphic

2.9. Teoria Greena

Teoria Greena mówi nam, że:

0x01 graphic

Przykład 1: Obliczyć 0x01 graphic
wokół koła 0x01 graphic
korzystając z teorii Greena. Przy próbie obliczania stwierdzamy, że Eigenmatch nie może rozwiązać bezpośrednio całki podwójnej względem x i y.

Dlatego korzystamy zamiast tego ze współrzędnych biegunowych.

P=2x^3-y^3

Q=x^3+y^3

f=d(Q,x)-d(P,y)

x=r*cos(theta)

y=r*sin(theta)

defint(f*r,r,0,1,theta,0,2pi)

0x01 graphic

Funkcja podcałkowa defint ma postać f*r, ponieważ 0x01 graphic
.

Teraz spróbujemy obliczyć boczną krzywą całkową wg teorii Greena i sprawdźmy czy uzyskamy ten sam wynik.

Musimy tu zastosować pewną sztuczkę przekształcając sinus i cosinus na wykładniki, aby Eigenmath mógł znaleźć wymagane rozwiązanie.

x=cos(t)

y=sin(t)

P=2x^3-y^3

Q=x^3+y^3

f=P*d(x,t)+Q*d(y,t)

f=circexp(f)

defint(f,t,0,2pi)

0x01 graphic

Przykład 1: Obliczyć wg teorii Greena obie strony 0x01 graphic
względem tarczy0x01 graphic
. Najpierw obliczamy krzywą całkową wzdłuż granic tarczy. Podkreśla się, że promień tarczy wynosi 2.

--Line integral

P=1-y

Q=x

x=2*cos(t)

y=2*sin(t)

defint(P*d(x,t)+Q*d(y,t),t,0,2pi)

0x01 graphic

--Surface integral

x=quote(x) --remove parametrization of x

y=quote(y) --remove parametrization of y

h=sqrt(4-x^2)

defint(d(Q,x)-d(P,y),y,-h,h,x,-2,2)

0x01 graphic

--Bonus point: Compute the surface integral using polar coordinates.

f=d(Q,x)-d(P,y) --do before change of coordinates

x=r*cos(theta)

y=r*sin(theta)

defint(f*r,r,0,2,theta,0,2pi)

0x01 graphic

defint(f*r,theta,0,2pi,r,0,2) --try integrating over theta first

0x01 graphic

W tym przypadku Eigenmath rozwiązuje obydwie formy całki biegunowej. Jednak w przypadkach, w których Eigenmath nie może uzyskać rozwiązania całki podwójnej, można zmienić kolejność całkowania.

2.10. Teoria Stokesa

Teoria Stokesa oferuje poniższe równoważniki krzywych całkowych i całek powierzchniowych.

0x01 graphic

gdzie F = (P, Q, R).

Dla wielkości S sparametryzowanej względem x i y, uzyskujemy:

0x01 graphic

W wielu przypadkach, przekształcenie całki zgodnie z teorią Stokesa może rozwiązać problem sprowadzając go do łatwiejszej postaci.

Załóżmy, że F = (x, y, z) oraz że S jest częścią paraboloidy 0x01 graphic
, która znajduje się nad płaszczyzną xy.

Obwód tej paraboloidy jest kołem 0x01 graphic
.

Obliczyć krzywe całkowe oraz całki powierzchniowe.

Tu również stwierdzimy, że treba skorzystać w tym celu ze współrzędnych biegunowych aby uzyskać sukces.

--Surface integral

z=4-x^2-y^2

F=(y,z,x)

S=(x,y,z)

f=dot(curl(F),cross(d(S,x),d(S,y)))

x=r*cos(theta)

y=r*sin(theta)

defint(f*r,r,0,2,theta,0,2pi)

0x01 graphic

--Line integral

x=2*cos(t)

y=2*sin(t)

z=4-x^2-y^2

P=y

Q=z

R=x

f=P*d(x,t)+Q*d(y,t)+R*d(z,t)

f=circexp(f)

defint(f,t,0,2pi)

0x01 graphic

3. Dodatkowe przykłady

3.1.Wzory François Viète

François Viète był pierwszym, który odkrył dokładną formułę obliczania wartości liczby π.

Poniżej pokazano tą formułę:

0x01 graphic

Załóżmy, że 0x01 graphic
oraz 0x01 graphic
. Możemy więc napisać:

0x01 graphic

Rozwiązując to wyrażenie względem π, uzyskujemy:

0x01 graphic

Teraz skorzystajmy z Eigenmatch do obliczenia π zgodnie formułą Viète. Oczywiście, nie możemy obliczać wszystkich elementów aż do nieskończoności. Zamiast tego ograniczymy się do pierwszych 9-ciu składników, co zapewnia nam uzyskanie dokładności do 6 cyfr znaczących.

a(n)=test(n=0,0,sqrt(2+a(n-1)))

float(2*product(k,1,9,2/a(k)))

0x01 graphic

Funkcja a(n) może być wywoływana n-razy, a więc łącznie istnieje tu 54 wywołań a(n). Korzystając z innego algorytmu opartego na szablonach zmiennych możemy uzyskać ten wynik w 9 krokach.

a=0

b=2

for(k,1,9,a=sqrt(2+a),b=b*2/a)

0x01 graphic

3.2. Wirowość (rotacja) w postaci tensorowej

Funkcja wirowości Curl wektora może być wyrażona w postaci wektorowej w poniższy sposób:

0x01 graphic

gdzie0x01 graphic
jest tensorem Levi-Civita.

Poniższy skrypt pokazuje, ze formuła ta jest równoważna obliczaniu wirowości starym sposobem:

-- Define epsilon.

epsilon=zero(3,3,3)

epsilon[1,2,3]=1

epsilon[2,3,1]=1

epsilon[3,1,2]=1

epsilon[3,2,1]=-1

epsilon[1,3,2]=-1

epsilon[2,1,3]=-1

-- F is a generic vector function.

F=(FX(),FY(),FZ())

-- A is the curl of F.

A=outer(epsilon,d(F,(x,y,z)))

A=contract(A,3,4) --sum across k

A=contract(A,2,3) --sum across j

-- B is the curl of F computed the old fashioned way.

BX=d(F[3],y)-d(F[2],z)

BY=d(F[1],z)-d(F[3],x)

BZ=d(F[2],x)-d(F[1],y)

B=(BX,BY,BZ)

-- Are A and B equal? Subtract to find out.

A-B

0x01 graphic

Poniżej pokazano odmianę poprzedniego skryptu. Iloczyn 0x01 graphic
jest obliczany za pomocą jednego wiersza kodu. Ponadto, drugi iloczyn oraz kontrakcja wzdłuż k jest teraz obliczana za pomocą iloczynu skalarnego.

F=(FX(),FY(),FZ())

epsilon=zero(3,3,3)

epsilon[1,2,3]=1

epsilon[2,3,1]=1

epsilon[3,1,2]=1

epsilon[3,2,1]=-1

epsilon[1,3,2]=-1

epsilon[2,1,3]=-1

A=contract(dot(epsilon,d(F,(x,y,z))),2,3)

BX=d(F[3],y)-d(F[2],z)

BY=d(F[1],z)-d(F[3],x)

BZ=d(F[2],x)-d(F[1],y)

B=(BX,BY,BZ)

-- A

0x01 graphic

3.3. Kwantowy oscylator harmoniczny

Łączną energię E, energię kinetyczną K oraz energię potencjalną V wyraża równanie:

E = K + V

Odpowiadająca formuła kwantowego oscylatora harmonicznego ma poniższą postać:

0x01 graphic

gdzie n jest liczbą całkowitą reprezentującą kwantyfikowane wartości energii.

Powyższe równanie ma następujące rozwiązanie:

0x01 graphic

w którym Hn(x) jest wielomianem Hermite'a względem x.

Poniższy kod Eigenmath sprawdza E = K + V dla n = 7.

n=7

psi=exp(-x^2/2)*hermite(x,n)

E=(2*n+1)*psi

K=-d(psi,x,x)

V=x^2*psi

E-K-V

0x01 graphic

3.4. Wodorowe funkcje falowe

Funkcje falowe wodoru 0x01 graphic
są rozwiązaniami równania różniczkowego:

0x01 graphic

gdzie n jest liczbą całkowita reprezentującą kwantyfikację łącznej energii, natomiast r jest odległością promieniową elektronu, Operator Laplasjan we współrzędnych sferycznych ma postać:

0x01 graphic

Ogólną postacią 0x01 graphic
jest:

0x01 graphic

gdzie L jest wielomianem Laguerre, P jest wielomianem Legendre, natomiast l oraz m są liczbami całkowitymi spełniającymi poniższe zależności:

0x01 graphic

Ogólną postać można wyrazić jako iloczyn promieniowej funkcji R i harmoniki sferycznej Y.

0x01 graphic

Poniższy kod Eigenmath sprawdza E = K + V dla n , l. M = 7; 3; 1.

laplacian(f)=1/r^2*d(r^2*d(f,r),r)+

1/(r^2*sin(theta))*d(sin(theta)*d(f,theta),theta)+

1/(r*sin(theta))^2*d(f,phi,phi)

n=7

l=3

m=1

R=r^l*exp(-r/n)*laguerre(2*r/n,n-l-1,2*l+1)

Y=legendre(cos(theta),l,abs(m))*exp(i*m*phi)

psi=R*Y

E=psi/n^2

K=laplacian(psi)

V=2*psi/r

simplify(E-K-V)

0

3.5. Akceleratory kosmiczne Shuttle i Corvette

Wahadłowce kosmiczne Shuttle uzyskują przyspieszenia od 0 do 17 000 mil/godzinę w ciągu 8 minut. Statki kosmiczne Corvette uzyskują przyspieszenia od 0 do 60 000 mil/godzinę w ciągu 4,5 sekund. Poniższy skrypt porównuje te dwa wyniki:

vs=17000*"mile"/"hr"

ts=8*"min"/(60*"min"/"hr")

as=vs/ts

as

vc=60*"mile"/"hr"

tc=4.5*"sec"/(3600*"sec"/"hr")

ac=vc/tc

ac

"Time for Corvette to reach orbital velocity:"

vs/ac

vs/ac*60*"min"/"hr"

Poniżej pokazano te wyniki uzyskane po uruchomieniu skryptu. Wynika stąd, że wahadłowiec uzyskuje przyspieszenie dwukrotnie większe niż statek kosmiczny.

0x01 graphic

Czas osiągnięcia prędkości orbitalnej przez statek kosmiczny wynosi:

0x01 graphic

3.6. Stała Avogadro

Zaproponowano zdefiniowanie stałej Avogadro dokładnie na poziomie 84446886 do potęgi trzeciej . Liczba ta odpowiada idealnemu sześcianowi atomów zawierającemu 84,446,886 wzdłuż każdej krawędzi. Można sprawdzić, że różnica między wartością zaproponowaną i zmierzoną wynosi zaledwie 6.0221415 ± 0.0000010) x 1023 atomów.

A=84446886^3

B=6.0221415*10^23

A-B

0x01 graphic

0.0000010*10^23

0x01 graphic

Jak widać, zaproponowana wartość mieści się w granicach błędu eksperymentu. Możemy rozłożyć na czynniki zaproponowaną liczbę:

factor(A)

0x01 graphic

3.7. Zero do potęgi zerowej

Poniższy przykład tworzy wykres funkcji 0x01 graphic
. Wykres ten pokazuje dlaczego konwencja zapisu 00 = 1 ma sens.

f(x)=abs(x^x)

xrange=(-2,2)

yrange=(-2,2)

draw(f)

0x01 graphic

Z wykresu tego widać jak wyrażenie 00 = 1 tworzy linię ciągłą w okolicy x = 0. Teraz możemy zobaczyć jak zachowuje się wyrażenie xx na płaszczyźnie zespolonej:

f(t)=(real(t^t),imag(t^t))

xrange=(-2,2)

yrange=(-2,2)

trange=(-4,2)

draw(f)

0x01 graphic

4. Funkcje wbudowane

Funkcja

Opis

Przykłady

abs(x)

Zwraca wartość bezwzględną lub długość wektora x.

Dla liczb zespolonych można stosować funkcję mag(z)

P(x,y)

abs(P)

0x01 graphic

adj(m)

Zwraca dopełnienie macierzy m

and(a,b,...)

Zwraca logiczne AND określanych wyrażeń

arccos(x)

Zwraca odwrotność cosinusa x

arccosh(x)

Zwraca odwrotność cosinusa hiperbolicznego x

arcsin(x)

Zwraca odwrotność sinusa x

arcsinh(x)

Zwraca odwrotność sinusa hiperbolicznego x

arctan(x)

Zwraca odwrotność tangensa x

arctanh(x)

Zwraca odwrotność tangensa hiperbolicznego x

arg(z)

Zwraca kąt liczby zespolonej z

ceiling(x)

Zwraca najmniejszą liczbę całkowitą nie mniejszą od x

check(x)

W skrypcie, gdy określana wartość x jest prawdziwa, kontynuuje obliczanie. W przeciwnym razie zatrzymuje.

choose (n,k)

Zwraca wartość wyrażenia 0x01 graphic

circexp(x)

Zwraca wyrażenie x z funkcją kołową przekształconą

w postać wykładniczą. Czasem to upraszcza wyrażenie.

coeff(p,x,n)

Zwraca współczynnik xn wielomianu p

cofactor(m,i,j)

Zwraca kofaktor macierzy m

względem wiersza i oraz kolumny j.

con(j)

Zwraca sprzężenie liczby zespolonej z

contract(a,i,j)

Zwraca tensor a sumowany po wskaźnikach i oraz j.

Gdy i oraz j są pominięte, wówczas stosowane są indeksy 1 oraz 2. Funkcja contract(m) jest równoważna ścieżce macierzy m.

cos(x)

Zwraca cosinus x

cosh(x)

Zwraca cosinus hiperboliczny x

cross(u,w)

Zwraca iloczyn wektorowy wektorów u oraz v

curl(u)

Zwraca wirowość (rotację) wektora u

d(f,x)

Zwraca pochodną funkcji f względem zmiennej x

defint(f,x,a,b)

Zwraca całkę oznaczoną funkcji f względem zmiennej x w granicach od a do b. Listę argumentów można rozszerzać na całki wielokrotne.

Przykładowo: defint(f,x,a,b,y,c,d)

deg(p,x)

Zwraca stopień wielomianu p względem x

denominator(x)

Zwraca mianownik wyrażenia x

det(m)

Zwraca wyznacznik macierzy m

do(a,b,…)

Oblicza listę argumentów od lewej do prawej.

Zwraca wynik dla ostatniego argumentu

dot(a,b,…)

Zwraca iloczyn skalarny tensorów

draw(f,x)

Wykreśla funkcję f względem zmiennej x

erf(x)

Zwraca funkcję błędu względem x

erfc(x)

Zwraca komplementarną funkcję błędu względem x

eval(f,x,n)

Zwraca wartość f obliczoną dla x = n

exp(x)

Zwraca wartość ex

expand(r,x)

Zwraca cząstkowe rozszerzenie ułamkowe stosunku dwóch wielomianów r względem x

expand(1/(x^3+x^2),x

0x01 graphic

expcos(x)

Zwraca cosinus x w postaci wykładniczej

expcos(x)

0x01 graphic

epsin(x)

Zwraca sinus x w postaci wykładniczej

epsin(x)

0x01 graphic

factor(n)

Rozkłada liczbę całkowitą n na czynniki pierwsze

factor (12345)

0x01 graphic

factor(p,x)

Rozkłada wielomian n na czynniki względem x. Ostatni argument może być pominięty. Lista argumentów może być rozszerzona na wielomiany kilku zmiennych. Przykładowo, factor(p,x,y) rozkłada wielomian p na czynniki x, a następnie na czynniki y.

factor (125*x*3-1)

0x01 graphic

Factorial(n)

Zwraca silnię liczby całkowitej n.

Alternatywnie, można stosować polecenie n!

10!

0x01 graphic

filter(f,a,b)

Zwraca wyrażenie f z usuwanymi członami a, b, itd.

1/a + 1/b + 1/c

0x01 graphic

filter(last,a)

0x01 graphic

float(x)

Przekształca x na liczbę zmiennoprzecinkową

sum(n,0,20,(-1/2)^n)

0x01 graphic

float(last)

0x01 graphic

floor(x)

Zwraca największa liczbę całkowitą, nie większą od x

for(i,j,k,a,b,…)

Dla i = j poprzez k oblicza a, b, itp.

x=0

y=2

for(k,1,9,x=sqrt(2+x), y=2*y/x)

float(y)

0x01 graphic

gcd(a,b….)

Zwraca największy wspólny dzielnik

hermite(x,n)

Zwraca wielomian Hermite'a n-tego stopnia względem x

hilbert(n)

Zwraca macierz Hilberta rzędu-n

imag(z)

Zwraca część urojoną liczby zespolonej z

inner(a,b,...)

Zwraca iloczyn wewnętrzny tensorów. Funkcja ta spełnia taką samą rolę jak iloczyn skalarny

inegral(f,x)

Zwraca całkę f względem zmiennej x

inv(m)

Zwraca odwrotność macierzy m

isprime(n)

Zwraca wartość 1 gdy n jest liczbą pierwszą.

W przeciwnym razie zwraca 0.

Isprime(2^53-111)

0x01 graphic

laguerre(x,n,a)

Zwraca wielomian Laguerre n-tego stopnia.

Gdy pominiemy parametr a, stosowane jest a = 0.

lcm(a,b,...)

Zwraca najmniejszą wspólną wielokrotność

leading(p,x)

Zwraca wiodący współczynnik wielomianu p względem x

legendre(x,n,m)

Zwraca wielomian Legendre n-tego stopnia.

Gdy pominiemy parametr m, stosowane jest m = 0.

log(x)

Zwraca logarytm naturalny x

mag(z)

Zwraca rozmiar liczby zespolonej z

mod(a,b)

Zwraca resztę z dzielenia a przez b

not(x)

Neguje wynik określanej wartości x

nroots(p,x)

Zwraca wszystkie pierwiastki (rzeczywiste i zespolone) wielomianu p względem x. Pierwiastki te obliczane są

w sposób numeryczny. Współczynniki wielomianu p mogą być rzeczywiste lub zespolone.

numerator(x)

Zwraca licznik wyrażenia x

or(a,b,...)

Zwraca logiczne OR określanej wartości x

outer(a,b,...)

Zwraca iloczyn zewnętrzny tensorów

polar(z)

Przekształca liczbę zespoloną z do postaci biegunowej

prime(n)

Zwraca n-tą liczbę pierwszą 0x01 graphic

print(a,b,...)

Oblicza wyrażenie i drukuje wynik. Przydatne w pętli for

product(i,j,k,f)

Zwraca wartość 0x01 graphic

quote(x)

Zwraca wyrażenie x bez obliczania

quotient(p,q,x)

Zwraca iloraz wielomianów względem x

rank(a)

Zwraca liczbę indeksów w tensorze a. Skalar nie ma indeksów, a więc jego rząd jest równy 0

rationalize(x)

Wstawia wszystko do wspólnego mianownika

rationalize(a/b+b/a)

0x01 graphic

real(z)

Zwraca część rzeczywistą liczby zespolonej z

rect(z)

Zwraca liczbę zespoloną z w postaci prostokątnej

roots(p,x)

Zwraca takie wartości x, że wielomian p(x) = 0.

Wielomian musi by rozkładany na czynniki całkowite

simplify(x)

Zwraca x w najprostszej (uproszczonej) postaci

sin(x)

Zwraca sinus x

sinh(x)

Zwraca sinus hiperboliczny x

sqrt(x)

Zwraca pierwiastek kwadratowy x

stop

W skrypcie zatrzymuje obliczenia

subst(a,b,c)

Podstawia a za b w wyrażeniu c i zwraca wynik

sum(i,j,k,f)

Zwraca wartość 0x01 graphic

tan(x)

Zwraca tangens x

tanh(x)

Zwraca tangens hiperboliczny x

taylor(f,x,n,a)

Zwraca rozwinięcie Taylora f względem x wokół punktu a.

Argument n jest stopniem rozwinięcia.

Gdy pominiemy a, stosowane jest a = 0

taylor(1/cos(x),x,4)

0x01 graphic

test(a,b,c,d)

Gdy a jest prawdą, wówczas zwracane jest b, ponadto gdy c jest prawdą, wówczas zwracane jest d, itd.

Gdy liczba argumentów jest nieparzysta, wówczas zwracany jest ostatni argument, gdy wszystkie pozostałe są fałszywe

transpose(a,i,j)

Zwraca transpozycję tensora względem jego wskaźników i oraz j. Gdy pominiemy i oraz j, wówczas stosowane są wartości 1 oraz 2. Dlatego można wykonać transpozycję macierzy zawierającej 1 argument

A=((a,b),(c,d))

transpose(A)

0x01 graphic

unit(n)

Zwraca macierz jednostkową n x n

unit(2)

0x01 graphic

zero(i,j,…)

Zwraca tensor zerowy o wymiarach i, j. itp.

Funkcja przydatna do tworzenia tensora i ustawiania wartości jego składników

5. Składnia

Matematyka

Eigenmath

Inna postać lub komentarz

-a

-a

a + b

a+b

a - b

a-b

ab

a*b

a b ze spacją między nimi

0x01 graphic

a/b

0x01 graphic

a/b/c

a2

a^2

0x01 graphic

a^(1/2)

sqrt(a)

0x01 graphic

a^(-1/2)

1/sqrt(a)

a(b + c)

a*(b+c)

a (b+c) ze spacją między nimi

f(a)

f(a)

0x01 graphic

(a,b,c)

0x01 graphic

((a,b),(c,d))

T12

T[1.2]

Dostęp do składników tensora

2 km

2*”km”

Jednostki miary w cudzysłowach

0x01 graphic
0x01 graphic
0x01 graphic

Tekst komentarzy nie może zawierać polskich znaków diakrytycznych (przypis tłumacza).

Williamson and Trotter, Multivariable Mathematics, p. 598.

Kaplan, Advanced Calculus, p. 313

Wilfred Kaplan, Advanced Calculus, 5th Edition, 287.

Fox, Ronald and Theodore Hill. \An Exact Value for Avogadro's Number." American Scientist 95 (2007) 104-107.

Proponowana liczba w artykule ma aktualnie wartość 844468883.

W dodatku, autor zredukował ja do 844468863 aby była podzielna przez 12.

See www.physorg.com/news109595312.html

- 33 -

0x01 graphic



Wyszukiwarka

Podobne podstrony:
Polski opis MycView, Opisy programów FREE
Polski opis ZPlot, Opisy programów FREE
Polski opis MATRIXER, Opisy programów FREE
Polski opis PAST, Opisy programów FREE
Opis polski FX ChemStruct, Opisy programów FREE
Polski opis programu QJot Portable, Opisy programów FREE
Polski opis Cactus Spam Filter, Opisy programów FREE
Polski opis Calibre - Szybki start, Opisy programów FREE
Polski opis 1st Clipboard, Opisy programów FREE
Polski opis programu Cleanse Uninstaller Pro, Opisy programów FREE
Opis polski Graph Converter Lite, Opisy programów FREE
Polski opis CSV ed, Opisy programów FREE
Opis polski FX Chem 2.106, Opisy programów FREE
Polski opis FX ChemStruct 1, Opisy programów FREE
Polski opis CADRE Regression Analysis, Opisy programów FREE
Polski opis WZ Grapher, Opisy programów FREE
Polski opis programu CurveFitter 2, Opisy programów FREE
Polski opis Advanced Calculator v.2.0, Opisy programów FREE
Polski opis programu RealWorld Paint, Opisy programów FREE

więcej podobnych podstron