[]
Matlab günlerin yağış ortalamasını alma
Dostlar,
MATLAB da yeniyim. Soracağım soruyu VBA gibi bir dilde yazıp yapabilirim ama artık Matlab ın engin dünyasına gireyim istiyorum. Sorum şu, yol gösterseniz yetwr(şu fonksiyonları kullanacaktır vs)
Elimde bir excel Dosyası var:
1960 1 1 18 12
1960 1 2 12 16
1960 1 3 5 15
.
.
1990 12 30 0 5
Yıl ay gün yağış sıcaklık
En son şunu bulacağım, her günün ortalaması.
Yani 1 ocağın ortalaması şöyle bulunacak: 1 ocak 1960+ 1 ocak 1961.. 1990
Bunu 360 gün için yapmam gerekli,
Nasıl yaparım? Şimdiden teşekkürler.
MATLAB da yeniyim. Soracağım soruyu VBA gibi bir dilde yazıp yapabilirim ama artık Matlab ın engin dünyasına gireyim istiyorum. Sorum şu, yol gösterseniz yetwr(şu fonksiyonları kullanacaktır vs)
Elimde bir excel Dosyası var:
1960 1 1 18 12
1960 1 2 12 16
1960 1 3 5 15
.
.
1990 12 30 0 5
Yıl ay gün yağış sıcaklık
En son şunu bulacağım, her günün ortalaması.
Yani 1 ocağın ortalaması şöyle bulunacak: 1 ocak 1960+ 1 ocak 1961.. 1990
Bunu 360 gün için yapmam gerekli,
Nasıl yaparım? Şimdiden teşekkürler.
Diyelim ki bunları data diye bir değişkene kopyalama-yapıştırma ile atadın.
Bir fonksiyon olarak şunu yazabilirsin.
yil_listesi=unique(data(:,1));
yil_sayisi=size(yil_listesi,1);
%Bu komut yılları listeler ve kaç yıl olduğuna bakar, eğer arada atlama yapmıyorsa buna gerek yok.
ortalamalar=zeros(yil_sayisi,1);
for i=1:yil_sayisi
yil=yil_listesi(i);
suzulmus_liste=yil_listesi(yil_listesi(1,:)==yil,:);
ortalamalar(i)=mean(suzulmus_liste(:,5));
end
Fonksiyonun çıktısı ortalamalar olur.
Editleyip komutları tek tek açacağım.
Edit:
yil_listesi=unique(data(:,1));
data değişkeninin 1. sütununu komple alır. (: işareti MATLAB'de tüm anlamına gelir) data(:,1) ile data değişkeninin 1. sütununu elde ederiz. unique komutu ise tekrarsız olarak o sütunda verilen dataların listelenmesini sağlar. Sonuç olarak yıl listesi şöyle bir vektördür.
yil_listesi =
1960
1961
1962
.
.
.
1990
yil_sayisi=size(yil_listesi,1);
size komutu matrislerin boyutunu verir. 1 dersek satır sayısı, 2 dersek sütun sayısı olur. Burada 1 dediğimiz için yil_listesi değişkenindeki satırları sayarak kaç tane yıla ait verimiz olduğuna bakıyoruz. Böylece arada atlama yapan yıllar varsa, bunları görebiliyoruz.
ortalamalar=zeros(yil_sayisi,1);
Bu komutla ortalamalar değişkenini oluşturuyoruz (initialization). "yil_sayisi kadar satırı ve bir sütunu olan bir sütun vektörüdür" diyoruz.
for i=1:yil_sayisi
end
Tüm yıllar için ayrı ayrı ortalama hesaplayacağım.
yil=yil_listesi(i);
i. sıradaki yıl hangisiyse listeden o yılı çekiyorum.
suzulmus_liste=data(data(:,1)==yil,:);
Bunu parçalara böleyim.
data(:,1)==yil
Bu bir sorgu (== kullanımından bunu anlıyoruz). "Eğer yil_listesi'nin tüm satırlarında birinci sütunun değeri ilgili yıla eşitse" diyor
data(data(:,1)==yil,:);
Yukarıdaki eşitse sorgusundan sonra eşit olan tüm satırları aldırıyoruz. : bu sefer sütunlar için kullanılıyor. Ve onu suzulmus_liste diye bir değişkene atıyoruz. BÖylelikle sadece o yılın verileri kalmış oluyor datadan.
ortalamalar(i)=mean(suzulmus_liste(:,5));
Süzülmüş listenin 5. sütununun ortalamasını alıp, i. yılın ortalaması olarak yazdırıyoruz.
Bir fonksiyon olarak şunu yazabilirsin.
yil_listesi=unique(data(:,1));
yil_sayisi=size(yil_listesi,1);
%Bu komut yılları listeler ve kaç yıl olduğuna bakar, eğer arada atlama yapmıyorsa buna gerek yok.
ortalamalar=zeros(yil_sayisi,1);
for i=1:yil_sayisi
yil=yil_listesi(i);
suzulmus_liste=yil_listesi(yil_listesi(1,:)==yil,:);
ortalamalar(i)=mean(suzulmus_liste(:,5));
end
Fonksiyonun çıktısı ortalamalar olur.
Editleyip komutları tek tek açacağım.
Edit:
yil_listesi=unique(data(:,1));
data değişkeninin 1. sütununu komple alır. (: işareti MATLAB'de tüm anlamına gelir) data(:,1) ile data değişkeninin 1. sütununu elde ederiz. unique komutu ise tekrarsız olarak o sütunda verilen dataların listelenmesini sağlar. Sonuç olarak yıl listesi şöyle bir vektördür.
yil_listesi =
1960
1961
1962
.
.
.
1990
yil_sayisi=size(yil_listesi,1);
size komutu matrislerin boyutunu verir. 1 dersek satır sayısı, 2 dersek sütun sayısı olur. Burada 1 dediğimiz için yil_listesi değişkenindeki satırları sayarak kaç tane yıla ait verimiz olduğuna bakıyoruz. Böylece arada atlama yapan yıllar varsa, bunları görebiliyoruz.
ortalamalar=zeros(yil_sayisi,1);
Bu komutla ortalamalar değişkenini oluşturuyoruz (initialization). "yil_sayisi kadar satırı ve bir sütunu olan bir sütun vektörüdür" diyoruz.
for i=1:yil_sayisi
end
Tüm yıllar için ayrı ayrı ortalama hesaplayacağım.
yil=yil_listesi(i);
i. sıradaki yıl hangisiyse listeden o yılı çekiyorum.
suzulmus_liste=data(data(:,1)==yil,:);
Bunu parçalara böleyim.
data(:,1)==yil
Bu bir sorgu (== kullanımından bunu anlıyoruz). "Eğer yil_listesi'nin tüm satırlarında birinci sütunun değeri ilgili yıla eşitse" diyor
data(data(:,1)==yil,:);
Yukarıdaki eşitse sorgusundan sonra eşit olan tüm satırları aldırıyoruz. : bu sefer sütunlar için kullanılıyor. Ve onu suzulmus_liste diye bir değişkene atıyoruz. BÖylelikle sadece o yılın verileri kalmış oluyor datadan.
ortalamalar(i)=mean(suzulmus_liste(:,5));
Süzülmüş listenin 5. sütununun ortalamasını alıp, i. yılın ortalaması olarak yazdırıyoruz.
- aychovsky (24.06.14 22:15:36 ~ 22:25:51)
Çok Teşekkürler hocam, üzerind düşünüp deneyeceğim.
- hiperaktifmanyetik (24.06.14 22:22:06)
Hocam, nasıl teşekkür etsem az. Eyvallah, açıklamasıyla da mükemmel oldu. :)
- hiperaktifmanyetik (24.06.14 22:33:41)
Xlsread komutunu araştır. Doğrudan Excelden matlaba veri çekersin öğrenmekte fayda var. Aynı şekilde xlswrite komutunu da öğren.
- godsparticle (24.06.14 22:41:31)
1