Filistin'e Özgürlük

#IStandWithPalestine

Free Palestine

MATLAB ile Üç Boyutlu Grafik Çizimi

MATLAB ile üç boyutlu grafik çizmek için basit bir örnek göstereceğim. Bu örnekte iki fonksiyona ait grafik çizilecektir.

MATLAB ile üç boyutlu grafik çizmek için basit bir örnek göstereceğim. Optimizasyon problemlerinde çok sık kullanılan amaç fonksiyonlarından Michalewicz ve Rastrigin fonksiyonlarının nasıl çizildiklerini örnek kodlarla anlatacağım.

Michalewicz ile başlayalım…

MATLAB ile bu fonksiyonu yazmak kafa karıştırıcı gelebilir ama  aslında o kadar zor değil.

Fonksiyonu şu şekilde ifade edebiliriz:

				
					fstr = '-sin(X)*(sin(2*X.^2/pi))^20 - sin(Y)*(sin(2*Y.^2/pi))^20';
				
			

Fonksiyonun alt ve üst limitleri -2.4 ve +2.4 olarak belirleyelim.

				
					altLimit = -2.4;
ustLimit = 2.4;
				
			

Fonksiyona ait eksenleri oluşturalım:

				
					x = linspace(altLimit, ustLimit, 100);
y = x;
				
			

Fonksiyon çizimi 3 boyutlu olması için grafiği içine oturacağı bir kutu çizmek gerekiyor. Bunun için meshgrid() fonksiyonundan faydalanacağız.

				
					[X, Y] = meshgrid(x, y);
				
			

Fonksiyonun metin halini vectorize() fonksiyonunu kullanarak vektörize ediyoruz. Evet pek açık bir ifade olmadı. Vektörize edilen metni inline() fonksiyonu ile fonksiyonun her (x, y) noktasına karşılık gelen z değerlerini hesaplatıyoruz. inline() fonksiyonu yerine anonim fonksiyon kullanılması tavsiye ediliyor.

				
					fonk = inline(vectorize(fstr));
z = fonk(X, Y);
				
			

Gelelim grafiği çizmeye…

Grafiği çizmeden önce eksenlerle ilgili olarak renk, açı, ızgara çizgisi stili, ortam aydınlatması vd. ayrıntıları belirliyoruz.

				
					axes1 = axes(
    'ZColor', [0 0 1],
    'YColor', [0 1 0],...
    'XColor', [1 0 0],...
    'Units', 'pixels',...
    'Projection', 'perspective',...
    'PlotBoxAspectRatio', [1 1 1],...
    'OuterPosition', [5 -5 1300 700],...
    'Layer', 'top',...
    'GridLineStyle', '-',...
    'AmbientLightColor', [1 1 0]);
				
			

x, y ve z eksenlerinin sınır değerlerini belirleyelim.

				
					xlim(axes1, [min(x)*0.95 max(x)*1.05]);
    ylim(axes1, [min(y)*0.95 max(y)*1.05]);
    zlim(axes1, [min(min(z)) max(max(z))]);
				
			

Bakış açısını belirleyelim

				
					    view(axes1, [150 10]);

				
			

Kutu formunda bir eksen elde etmek için box() fonksiyonunu uygulayalım:

				
					    box(axes1,'on');
				
			

Izgara görünümü için grid() fonksiyonunu kullanalım:

				
					   grid(axes1, 'on');

				
			

Grafiğe yeni çizimler yapılırsa önceki çizilen herşeyin kalması için hold() fonksiyonunu kullanalım:

				
					hold(axes1, 'all');
				
			

Gelelim işin can alıcı noktasına…

Artık ortam hazır, veriler hazır, eksenler hazır…

surf() fonksiyonu ile her (x,y) noktasına karşılık gelen z noktasını çizdirelim.. Fonksiyon içindeki diğer parametreler basit şeyler. Açıklamaya gerek duymuyorum.

				
					surf(x, y, z, 'LineStyle', 'none', 'LineWidth', 0.005);

				
			

Fonksiyonun metin halini grafiğin başlığı olarak ekleyelim.

				
					title(fstr);

				
			

x, y ve z eksenlerine etiketlerini ve renklerini ekleyelim. Renk değerleri 0 ile 1 arasında [R G B] şeklinde belirlenebilir.

				
					    xlabel('X Ekseni', 'Color', [1 0 0]);
    ylabel('Y Ekseni', 'Color', [0 1 0]);
    zlabel('Z Ekseni' , 'Color', [0 0 1]);
				
			

Bir de son olarak light() fonksiyonu yardımıyla grafiğe şöyle güzel bir ışıklandırma yapalım.

				
					light('Parent', axes1, 'Position', [1 1 1]);

				
			

Yukarıdaki gibi bir görüntü elde edilmelidir.

Rastrigin fonksiyonunu çizmek için de aynı yöntem kullanılabilir.

Bu fonksiyon için aşağıdaki değişiklikleri uygulamak gerekiyor.

Fonksiyonu çizdirdiğinizde aşağıdaki gibi bir görüntü elde edilir.

				
					altLimit = -pi/2;
ustLimit = pi/2;
fstr = 'X.^2 - 10*cos(2*pi.* X) + Y.^2 - 10 * cos(2*pi.*Y)';
				
			
Okunma Sayısı: 3