MATLAB I OBLICZENIA SYMBOLICZNE

Dzisiaj nieco na temat wykonywania obliczeń symbolicznych w MATLABie, czyli tak jakbyśmy robili je na symbolach na kartce papieru. Ta cenna cecha MATLABa często jest niedoceniana i umyka uwadze użytkowników.

Symbolic Math Toolbox umożliwia wykonywanie obliczeń i przekształceń na wyrażeniach matematycznych w postaci symbolicznej czyli w taki sposób w jaki robilibyśmy to na kartce papieru. Dobrym przykładem jest obliczenie całki z danej funkcji w postaci wzoru o czym pisałem w innym wpisie TUTAJ.

Obliczenia symboliczne - podstawy

Dwie podstawowe funkcje służące do tworzenia wyrażeń matematycznych w postaci symbolicznej to sym i syms. Pierwsza z nich tworzy w przestrzeni roboczej MATLABa liczbę lub zmienną symboliczną, które mogą mieć przypisane konkretne wartości, druga, tworzy zmienną symboliczną bez nadanej wartości. W tym drugim przypadku zmienna taka może być używana do tworzenia innych wyrażeń symbolicznych i ich analitycznego przekształcania. Popatrzmy na następujący przykład:

A = sym(2);
B = sym(3);
wynik1 = A + B

syms A B
wynik2 = A + B

W obydwu przypadkach dostajemy wynik w postaci symbolicznej, ale  w pierwszym jest to wartość liczbowa wynikająca z dodania do siebie 2+3, a w drugim ogólne wyrażenie symboliczne A+B.

wynik1 =  5
wynik2 =  A + B   

Jeżeli w drugim przypadku chcemy podstawić za zmienne symboliczne konkretne wartości i obliczyć wynik to należy użyć funkcji subs:

subs(wynik2, [A, B], [2 3])

Wyrażenie symboliczne możemy dalej analitycznie przekształcać używając do tego celu zmiennych zarówno numerycznych jak i symbolicznych:

wynik3 = wynik2 / 2
wynik4 = wynik2 * (A - B)^2 * (A+B)^4 / (A-B)

Otrzymujemy odpowiednio:

wynik3 = A/2 + B/2
wynik4 = (A - B)*(A + B)^5

Zwróćmy uwagę, że w drugim przypadku MATLAB od razu uprościł nam wyrażenie do zwartej postaci, stosując reguły grupowania i upraszczania ułamków. Nie zawsze tak jest, a w przypadku bardziej skomplikowanych wyrażeń do ich uproszczenia można użyć funkcji MATLAB simplify. Dzięki temu z długiego wzoru możemy otrzymać jego zgrabną postać:

syms x
wyrazenie = (x-1)*(x+1)*(x^2+x+1)*(x^2+1)*(x^2-x+1)*(x^4-x^2+1)
wyrazenie_uproszczone = simplify(wyrazenie)

Otrzymyjemy:

wyrazenie = (x^2 + 1)*(x - 1)*(x + 1)*(x^2 - x + 1)*(x^4 - x^2 + 1)*(x^2 + x + 1)
wyrazenie_uproszczone = x^12 - 1

Już po tych kilku przykładach widać, jak Symbolic Math Toolbox może być przydatny, a to dopiero czubek góry lodowej. Toolbox zawiera bowiem bogaty zestaw funkcji do przekształcania wyrażeń, rozwiązywania równań, całkowania, różniczkowania czy rysowania wykresów.

Przykład

Załóżmy, że chcemy narysować funkcję kwadratową dla różnych wartości współczynnika B. Postępujemy zgodnie z opisanym powyżej schematem: tworzymy zmienne, które mają być symboliczne (w tym przypadku wyróżnione podwójnymi dużymi literami XX i BB), następnie tworzymy wyrażenie symboliczne opisujące ogólną postać funkcji kwadratowej i używamy fplot do narysowania przebiegu funkcji. Użyta w programie funkcja subs podstawia za zmienną symboliczną BB wartości liczbowe dla których chcemy narysować przebieg funkcji (czyli 5 i 4.5):

clear all, close all, clc

A = -2.8;
B = 5
C = -1;

syms XX BB
Y = (A.*(XX.^2))+ (BB*XX) + C

Y2 = subs(Y,BB,[5 4.5])
figure
fplot(Y2,[-0.25,2])
xlabel('wartość argumentu X'); ylabel('wartość funkcji'); grid on; 
legend 
Różnica pomiędzy wyrażeniem a funkcją symboliczną

Do tej pory ze zmiennych symbolicznych tworzone były tak zwane wyrażenia. Gdybyśmy w powyższym przykładzie chcieli obliczyć wartość funkcji kwadratowej dla konkretnej wartości argumentu to trzeba by było użyć funkcji subs, gdyż wywołanie np.  Y(10) nie przyniesie oczekiwanego rezultatu. Aby można było w ten sposób podstawiać wartości, należy zdefiniować funkcję symboliczną:

clear all
A = -2.8;
C = -1;
syms Y_f(XX, BB)
Y_f(XX,BB) = (A.*(XX.^2))+ (BB*XX) + C

Y_f(0,1)

Najpierw więc definiujemy funkcję symboliczną oraz jej argumenty, a następnie przypisujemy konkretne wyrażenie matematyczne. Dzięki temu możemy odwoływać się do funkcji w następujący sposób Y_f(0,1), co obliczy wartość funkcji dla argumentu X=0 i współczynnika B=1. Prawda, że proste?

W MATLABie można tworzyć nie tylko liczby, zmienne, wyrażenia czy funkcje symboliczne, ale również macierze, a repertuar funkcji pozwala na wykonywanie złożonych operacji na obiektach symbolicznych. Zachęcam do indywidualnej eksploracji Symbolic Toolbox. 

(Visited 231 times, 2 visits today)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *