Octave: 2D- und 3D-Grafik - ein paar Beispiele
Von: Delastelle
Datum: Fr. 12. August 2022 06:47:16
Thema: Informatik

Mit dem kostenlosen Programm Octave kann man 2D- und 3D-Grafiken erstellen. Ich habe hier einige kurze Beispiele um Grafiken zu erzeugen. Im Artikel gibt es Grafiken und den Quelltext zum Erzeugen dieser Grafiken. Man kann einen Überblick bekommen, was mit Octave möglich ist.

Einleitung

Um Berechnungen am Computer durchzuführen kann man kommerzielle Programme wie Mathematica, Maple oder Matlab verwenden. Wer diese Programme nicht hat, kann auf die kostenlosen Programme Scilab oder Octave zurückgreifen. Diese sind ähnlich zu Matlab. Ich gebe hier einige Grafik-Beispiele zu Ocatve 4.4.1 an. Ich habe die Programme auch mit Octave 7.2.0 gestestet. Die kleinen Programme (m-Files) habe ich selbst geschrieben bzw. vor allem bei den 3D-Programmen habe ich auch Beispielprogramme aus der Octave Online Hilfe verwendet. Ein paar nützliche Hinweise zu Octave: - ";" am Ende einer Zeile -> damit wird eine Berechnung am Bildschirm angezeigt / verborgen - Befehl // zeigt die Hilfe zum Befehl an - Online Hilfe -> eine Suchmaschine findet etwas mit "Octave Befehl" als Eingabe - size(a) // zeige die Dimension von a an - whos/who // zeigt Variablenbelegungen an Für die 2D-Grafiken wurden folgende Befehle benutzt: plot // fplot // plotyy // hist quiver // pie // bar // barh loglog // semilogx // semilogy // spy imagesc // contour // contourf // stairs voronoi (kein Grafik-Befehl) // scatter // ezplot // polar Für die 3D-Grafiken wurden folgende Befehle benutzt: plot3 // ezplot3 // surf // trisurf pie3 // contour3 // quiver3 // ezmesh surfc // mesh // meshc // scatter3 Die Erstellung von 3D-Plots ist häufig komplizierter als die Erstellung von 2D-Plots.
 

Beispiele zur 2D-Grafik

(Bild 1) \sourceon Octave % normaler Druck plot subplot(2,2,1) x = [0:0.05:2*pi]; plot(x,sin(x)); grid on % normaler Druck fplot subplot(2,2,2); fplot (@cos, [0, 2*pi]); grid on % plotyy: 2 Funktionen in 1 Diagramm x = linspace (-1, 1, 201); subplot (2,2,3); plotyy (x,sin(pi*x), x,10*cos(pi*x)); % Histogramm Hist subplot(2,2,4) a = zeros(100,1); for i = 1:100 zufall = rand()+rand()+rand()+rand()+rand()+rand()+rand()+rand()+rand()+rand(); a(i) = floor(zufall)+1; end hist(a) grid on \sourceoff
(Bild 2) \sourceon Octave % Richtungsfeld quiver subplot(2,2,1) [x,y] = meshgrid(-0.5:0.1:0.5); px = 4*x+y; py = -3*x; quiver(x,y,px,py) axis([-0.5 0.5 -0.5 0.5]) % Tortendiagramm pie subplot(2,2,2) pie([1 2 3]); % Balkendiagramm 1 subplot(2,2,3) bar([1 3 2]); grid on % Balkendiagramm 2 subplot(2,2,4) barh([1 4 2 3]); grid on \sourceoff
(Bild 3) \sourceon Octave % Logarithmischer Plot beide Achsen: loglog subplot(2,2,1) x = [1 2 3]; y = [1 10 100]; loglog(x,y) grid on % Logarithmischer Plot: x Achse subplot(2,2,2) x = [1 2 3]; y = [1 10 100]; semilogx(x,y) grid on % Logarithmischer Plot: y Achse subplot(2,2,3) x = [1 2 3]; y = [1 10 100]; semilogy(x,y) grid on % Anzeige von Nichtnullelementen einer Matrix subplot(2,2,4) a = (rand(10,15)>0.9); spy(a); grid on \sourceoff
(Bild 4) \sourceon Octave % Bild laden und anzeigen subplot(2,2,1) bild = imread('1Ak.jpg'); imagesc(bild); % Höhenlinien contour subplot(2,2,2) colormap ("default"); [x, y, z] = peaks (); contour (x, y, z); grid on % Höhenlinien contour subplot(2,2,3) contourf(x,y,z); % eine Treppenfunktion stairs subplot(2,2,4) x = 1:1:10; y = rand(10,1); stairs(x,y); grid on \sourceoff
(Bild 5) \sourceon Octave % Voronoi Zerlegung: voronoi subplot(2,2,1) x = rand (10, 1); y = rand (size (x)); h = convhull (x, y); [vx, vy] = voronoi (x, y); plot (vx, vy, "-b", x, y, "o", x(h), y(h), "-g"); legend ("", "points", "hull"); % Scatter Plot subplot(2,2,2) x = randn (100, 1); y = randn (100, 1); scatter (x, y, [], sqrt (x.^2 + y.^2)); grid on % ein 2D-Plot subplot(2,2,3) ezplot (@(x, y) x.^2 - y.^2 - 1); % Polar Plot subplot(2,2,4) % clf; theta = linspace (0,2*pi,1000); rho = sin (7*theta); polar (theta, rho); title ("polar() plot"); \sourceoff
 

Beispiele zur 3D-Grafik

(Bild 6) \sourceon Octave % normaler 3D-Druck plot3 subplot(2,2,1) z = [0:0.05:5]; plot3 (cos (2*pi*z), sin (2*pi*z), z, ";helix;"); plot3 (z, exp (2i*pi*z), ";complex sinusoid;"); % 3D-Plot ezplot3 subplot(2,2,2); fx = @(t) t.*cos (t); fy = @(t) t.*sin (t); fz = @(t) t; ezplot3 (fx, fy, fz, [0, pi], 100); % Oberfläche: surf subplot (2,2,3); [X,Y] = meshgrid(-8:.5:8); R = sqrt(X.^2+Y.^2); Z = sin(R)./R; surf(X,Y,Z) subplot(2,2,4) colormap ("default"); N = 31; [x, y] = meshgrid (1:N); tri = delaunay (x(:), y(:)); z = peaks (N); h = trisurf (tri, x, y, z, "facecolor", "interp"); axis tight; zlim auto; title (sprintf ("facecolor = %s", get (h, "facecolor"))); \sourceoff
(Bild 7) \sourceon Octave % Tortendiagramm 3D: pie3 subplot(2,2,1) pie3([1 2 3 4],[0 0 0 1]); % Höhenlinien 3D: contour3 subplot(2,2,2); colormap ("default"); [x, y, z] = peaks (); contour3 (x, y, z); grid on % Richtungsfeld 3D: quiver3 subplot (2,2,3); [x, y, z] = peaks (25); surf (x, y, z); hold on; [u, v, w] = surfnorm (x, y, z / 10); h = quiver3 (x, y, z, u, v, w); set (h, "maxheadsize", 0.33); % ein ezmesh-Plot subplot(2,2,4) colormap ("default"); fx = @(s,t) cos (s) .* cos (t); fy = @(s,t) sin (s) .* cos (t); fz = @(s,t) sin (t); ezmesh (fx, fy, fz, [-pi,pi,-pi/2,pi/2], 20); \sourceoff
(Bild 8) \sourceon Octave % Oberfläche: surfc subplot(2,2,1) az = 100; n = 10; %Datensätze X,Y X = randn(1,az); Y = randn(1,az); %Vektor mit linspace X_edges = linspace(min(X),max(X)+0.001,n); Y_edges = linspace(min(Y),max(Y)+0.001,n); %Vordefinition Z Z = zeros(n,n); %Schreibe Inhalte von X_n, Y_n aller Klassen in Z for i = 1:az for j = 1:n-1 for k = 1:n-1 if (X(i) >= X_edges(j) & X(i) < X_edges(j+1) & ... Y(i) >= Y_edges(k) & Y(i) < Y_edges(k+1)) Z(j,k) = Z(j,k) + 1; end end end end %Plot surfc(X_edges,Y_edges,Z) xlabel('data X'); ylabel('data Y'); zlabel('Haeufigkeit'); % 3D Grafik: mesh subplot(2,2,2); %clf; x = logspace (0,1,11); z = x'*x; mesh (x, x, z, z.^2); set (gca, "zscale", "log"); xlabel "X-axis"; ylabel "Y-axis"; zlabel "log scale"; title ({"mesh() with color proportional to Z^2", "Z-axis is log scale"}); %try % if (strcmp (get (gcf, "__graphics_toolkit__"), "gnuplot")) % title ({"Gnuplot: mesh color is wrong", "This is a Gnuplot bug"}); % endif %catch %end_try_catch % 3D-Oberfläche: meshc subplot (2,2,3); colormap ("default"); [X, Y] = meshgrid (linspace (-3, 3, 40)); Z = sqrt (abs (X .* Y)) ./ (1 + X.^2 + Y.^2); meshc (X, Y, Z); title ("meshc() combines mesh/contour plots"); % Scatter 3D-Plot subplot(2,2,4) [x, y, z] = peaks (20); scatter3 (x(:), y(:), z(:), [], z(:)); \sourceoff *** Ende *** Danke fürs Lesen sagt Ronald
 


Dieser Artikel kommt von Matroids Matheplanet
https://matheplanet.de

Die Url für diesen Artikel ist:
https://matheplanet.de/default3.html?article=1966