MATLAB - Czwarty wymiar - wykresy 4D

Współczesna inżynieria to analizowanie problemów wielowymiarowych. Jak zatem komfortowo poruszać w takiej przestrzeni i wizualizować czwarty, a może piąty wymiar? Czy da się oswoić i przyzwyczaić do wielowymiarowości, która wymyka się naszej intuicji?

Wiemy doskonale jak rysować wykresy 2D i 3D w MATLABie. Dopóki liczba zmiennych nie przekracza trzech poruszamy w „stresie komfortu”. Jednak w inżynierii często mamy do czynienia z problemami wielowymiarowymi, a tym samym z wielowymiarową analizą danych. Często zachodzi potrzeba nie tylko analizy numerycznej ale również wizualizacji danych. I o ile do trzeciego wymiaru nie ma z tym problemu, to przestrzeni czterowymiarowej nie da się już tak łatwo narysować.

MATLAB oferuje jednak kilka funkcji, które pozwolą „obejść” ograniczenia trójwymiarowego, kartezjańskiego układu współrzędnych. Ich omówieniem zajmę się na przykładzie.

Wykresy 2D i 3D

W przypadku dwuwymiarowym, mamy jedną zmienną niezależną (x) i jedną zależną (y). Rysujemy klasyczny wykres „plotem”, na przykład zależność błędu pomiarowego od temperatury. W przypadku trójwymiarowym mamy dwie zmienne niezależne (x i y) i trzecią zależną (z). Radzimy sobie funkcją mesh, na przykład rysując zależność błędu pomiarowego od temperatury i wartości napięcia. A co jeśli na błąd pomiaru ma dodatkowo wpływ trzecia zmienna niezależna?

Wizualizacja 4D

Rozpatrzmy taki właśnie przypadek. Załóżmy, że mamy dane pomiarowe składające się z trzech zmiennych niezależnych (temperatura, napięcie, prąd), które wpływają na czwartą zmienną zależną (wartość błędu pomiarowego jakiegoś przyrządu). Dane można pobrać tutaj. Jak zwizualizować zależność błędu od wszystkich trzech zmiennych? Brakuje nam przecież jednego wymiaru na wykresie 3D.

Pierwsza możliwość to oczywiście analizowanie przekrojów. Rysujemy rzut na płaszczyznę 2D (np. temperatura – napięcie) i rysujemy przekroje dla kolejnych wartości prądu:

clear all; close all; clc
load dane

[X,Y] = meshgrid(U, T);
figure;
contour(X,Y,Err(:,:,1),20)
cb = colorbar;
cb.Label.String = 'Błąd względny [%]'
ylabel('Temperatura [^oC]'); xlabel('Napięcie [V]');

% Animacja (DOSTOSUJ wg szybkości komputera pause(XX) )
for h = 1:length(I)
    contour(X,Y,Err(:,:,h));
    cb = colorbar;
    cb.Label.String = 'Błąd względny [%]'
    ylabel('Temperatura [^oC]'); xlabel('Napięcie [V]');
    legend(['Dla prądu = ' num2str(I(h)) 'mA'])
    pause(0.1)
end

Druga możliwość to również narysowanie przekrojów ale na rysunku 3D. Używamy w tym celu dobrze znanych funkcji meshgrid i mesh. Aby lepiej zobaczyć jak zmienia się płaszczyzna wartości błędów dla kolejnych wartości prądu, podobnie jak w poprzednim programie, zróbmy animację:

clear all; close all; clc
load dane
[X,Y] = meshgrid(U, T);
mesh(X,Y,Err(:,:,1))
hold on;
ylabel('Temperatura [^oC]'); xlabel('Napięcie [V]'); zlabel('Błąd względny [%]')

% Animacja (DOSTOSUJ wg szybkości komputera pause(XX) )
for h = 1:length(I)
    mesh(X,Y,Err(:,:,h))
    pause(0.5)
end

Najciekawszą możliwością jest zastosowanie funkcji slice. Jest to funkcja przeznaczona do wizualizacji danych „objętościowych”, typu przepływy, gradienty pola, cieśnienie w przestrzeni 3D. Z powodzeniem jednak można ją zastosować w każdym innym przypadku. Zobaczmy efekty na animacji.

clear all; close all; clc
load dane
[X,Y,Z] = meshgrid(U, T, I);
figure;

% Animacja (DOSTOSUJ wg szybkości komputera pause(XX) )
for k = -10:40
    slice(X,Y,Z,Err,80,k,0);
    cb = colorbar;
    cb.Label.String = 'Błąd względny [%]'
    ylabel('Temperatura [^oC]'); xlabel('Napięcie [V]'); zlabel('Prąd [mA]')
    pause(0.5)
end

Zwróćmy uwagę, że czwarty wymiar jest tu wizualizowany kolorem. Nie ma innego sposobu na translację 4-go wymiaru do przestrzeni trójwymiarowej. Co prawda zamiast koloru można użyć zmiennej wielkości punktów – jak ma to miejsce na buble charts, ale to są to pokrewne metody.

Jeżeli dane posiadają więcej zmiennych i wymiar przestrzeni jest większy niż 4, to do narysowania wykresu należy „zafiksować” więcej zmiennych i próbować rzutować dane na przestrzeń 3D. Ale o tym w następnych wpisach.

(Visited 252 times, 1 visits today)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *