Programy matematyczne

Uwaga! Informacje na tej stronie mają ponad 5 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

Sun
01
Mar 2009

Czasem trzeba coś policzyć. Do prostych obliczeń wystarczy systemowy kalkulator. Pewne obliczenia na wektorach i kolorach daje się zrobić za pomocą mojego GameDev Calc. Czasami potrzebne są jednak bardziej zaawansowane funkcje. Jaki program matematyczny jest dobry? Niedościgniony jest podobno Matlab, ale on niestety nie należy do darmowych. Na szczęście są darmowe programy, które do wielu rzeczy z powodzeniem wystarczą.

Pierwszy z nich to Scilab. Używa składni podobnej do Matlaba i potrafi robić dużo rzeczy. Na przykład aby znormalizować wektor i pomnożyć go przez macierz:

v=[1 2 3]
vn=v/norm(v)
M=[1 0 0; 0 0 1; 0 1 0]
v2=vn*M

Aby rozwiązać układ równań: 1*x1 + 2*x2 = 10, 0*x1 + 3*x2 = 20:

A=[1 2; 0 3]
B=[10 20]'
X=A\B

Aproksymacja funkcji: Mając dane wartości y dla argumentów t, chcemy znaleźć metodą najmniejszych kwadratów współczynniki funkcji y(t) = c1 + c2 * e^(-t). W tym celu wprowadzamy wektory kolumnowe t oraz y, następnie macierz która w pierwszej kolumnie ma jedynki, w drugiej wartości e^(-t) i wreszcie używamy tego samego operatora, co do rozwiązywania układów równań:

t = [0 .3 .8 1.1 1.6 2.3]'
y = [.82 .72 .63 .60 .55 .50]'
E = [ones(t) exp(-t)]
c = E\y

Wyszło [0.4759522 0.3413195], a więc szukana funkcja ma postać: y(t) = 0.4759522 + 0.3413195 * e^(-t).

Aby narysować wykres tych punktów i tej funkcji, definiujemy wektor argumentów T, w którym będą kolejne liczby od 0 do 2.5 co 0.1 oraz wektor Y wartości naszej funkcji dla tych argumentów. Potem używamy funkcji plot, żeby narysować razem obydwa wykresy.

T = (0:0.1:2.5)';
Y = [ones(T) exp(-T)]*c;
plot(T,Y,'-',t,y,'o')

Scilab nie ma możliwości przekształceń symbolicznych. Do tego z kolei nadaje się, również darmowa, Maxima. Ma jednak trochę inną składnię. Na przykład można wprowadzić wzór funkcji:

y: (a*x^2+b)/(1-c);

I policzyć jej pochodną oraz całkę:

diff(y, x);
integrate(y, x);

Comments | #math #tools Share

Comments

[Download] [Dropbox] [pub] [Mirror] [Privacy policy]
Copyright © 2004-2019