Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

MATLAB soruları


dasaaa

Öne çıkan mesajlar

Dasasaasa biraz geç olucak ama ben senin aradığın makaleyi buldum. Derken ben de bulamadım. Çok ilginç sciencedirect'in senin aradığın makalen dışındaki tüm makalelerini indirebiliyorum ama seninkine gelince 31 dolarcık istiyor benden. Abstract'ı koyayım bari işine yarar. :)

Bu arada matlab soruna randn yerine rand le yaklaşırsan nasıl olur. Rand direk 0 ile 1 arasında random sayı atıyor. Mesela
temp = rand
veya
A = rand(100)

diyerek kullanabilirsin ama istediinin bu olduğundan emin değilim tabi.

Abstract

The scarcity of hourly solar radiation data for locations in Vietnam presents difficulties in using simulation packages for assessing the potential of solar energy systems in that country. This paper describes a computer model to generate daily and hourly solar radiation sequences from monthly average daily radiation values, or monthly average daily sunshine hour data. The resulting model has been tested in a number of ways. The statistics of the real and generated sequences were compared. Also the two data sequences have been used in simulation packages and design program such as f-chart and the performance of solar hot water system for the two cases compared. The results of these comparisons are also reported in this paper.
Link to comment
Sosyal ağlarda paylaş

dasaaa said:

randn ile sadece 0-1 arası normally distributed random value oluşturmanın bi yolu var mı.. ya da normally dist. başka bir şey de olabilir mean=0 ve standard deviation=0 olacak tabi..

ama her değeri 0-1 arasında olması lazım

bi loop yazdım ama mesela 100sayı generate ediceksem bayağı uzun sürüyor bunu yapması :(


ya şimdi iki metod var. ikincisi aslında en güzel olanı ve numerical recipes in C (William H.Press) kitabında falan bulabilirsin.

O metodda kısacası bir f(x) fonksiyonu hesaplıyorsun elinle, o fonksiyon istediğin bir dağılımı başka bir dağılıma götürüyor (misal senin örneğinde rand düzgün dağılımını normal dağılıma götürecek).


Senin denediğine benzer ama daha az sayı yaratmalı bir metod var ben ona dart atmaca diyorum.

Şimdi normal dağılımı düşün x ve y eksenleri var. y'nin alabileceği max bir değer var (eksponansiyelin için sıfır olduğunda), ona maxY de. Bir de senin normal dağılımını sağdan soldan kısıtlıyorsun misal (-minX, maxX değerleri arasında). Bu değerlerin dışında bir değer alması çok düşük bir ihtimal olacak şekilde seçiyorsun.

Şimdi önce -minX ile maxX arasında seçkisiz (random sdf) bir sayı yaratıyorsun adı xr olsun. Daha sonra bunı normal dağılım olasılık fonksiyonuna sokup (hani şu eksponansiyelli olan falan) sonucu p(xr) olsun. Bir de daha sonra maxY,0 arası bir seçkisiz sayı yaratıyorsun, adına yr de. Eğer yrp(xr) olursa sayıyı seçmiyor ve aynı prosedürü tekrar ediyorsun. Ha Ymax'ı direk normal dağılımda A.exp(-bişi) ise A seçeceksin, çünkü exp(-bişi)nin alabileceği maksimum değer 1, A ile çarptığın zaman A.exp in alabileceği maksimum değer de haliyle A). MaxX ve MinX i de deneyerek bulacaksın.

Teori: sen x'leri düzgün dağılımdan seçtiğin herhangi birinin gelme olasılığı eşit. Ama seçtiğin yr sayısının p(xr)den düşük gelme olasılığı tamamen dağılımının özelliğine bağlı, dolayısıyla düzgün seçtiğin xr'yi kabul etme olasılığın dağılımdan elde edeceğin olasılığa eşit. Eğer dağılımın çok dar değilse ve seçtiğin (Xmin,Xmax), (Ymax,0) diktörtgeninin çoğunu kaplıyorsan çok fazla seçkisiz sayı yaratmana gerek kalmayacaktır.

Örnek C kodu: (rand1 maxY değerine denk geliyor, rand2 yi de 2.23*pow(10.0,3), -2.23*pow(10.0,3) değerleri arasından seçiyorum)


ouble randomForce()
{

double var;
double max;
double rand1,rand2;
int check=0;

var=2*(K*(F/M)*T*(1/M))*(0.5* pow(10.0,-15));
max=1/(var*pow(2*PI,0.5));

//printf("var is %e, max is %en",var,max);

while(check==0)
{

rand1=max*(double)rand()/(double)RAND_MAX;;
rand2=2.23*pow(10.0,3)-4.46*pow(10.0,3)*(double)rand()/(double)RAND_MAX;;
if (rand1<= max*exp(-pow(rand2,2)/(2*pow(var,2)))){
check=1;
}

}
//printf("rand 2 is %en",rand2);
return rand2;
}


Ben şimdi ikinci yazdığım metodu kullanıyorum ama aslında adam olan ilk metodu kullanır sdf. Bugün ya da yarın onu tekrar çalışıp (unuttum o fonksiyonun nasıl bulunduğunu) onu koyacağım programa çalıştıktan sonra anlatırım onu da.
Link to comment
Sosyal ağlarda paylaş

O benim dediğim ilk metoda baktım malesef elimizideki dağılımın analitik integralini bulman lazım. tabi bu gaussian integral için mümkün değil heh. ikinci metodu kullanabilirsin ama yine de, daha detaylı açıklaması için:

http://www.quantum-physics.polytechnique.fr/physix/wiki/index.php/Rejection_sampling
Link to comment
Sosyal ağlarda paylaş

  • 4 ay sonra ...
asd [1x2000] bi matrix
sdf [1x2000] bi matrix daha
...
...
...
17tane matriximiz var. bunları excel'e atıcam. sütünlar halinde olacak.


asd || sdf || ... || ... ||
0 4 5 1.1
2 8 1 3


atıyorum işte anlamışsınızdır.
fid = fopen(['dosyaadi'.xls'],'w');


faşan yapıyorum.. asd, sdf vs. zaten asd=asd' haline getirildi bile. hepsi sütun yani.

bunları sütün halinde nasıl xls'e yazdırıcam?

fprintf(fid, 'asd',????????



ne yazıcam buraya kod olarak??
Link to comment
Sosyal ağlarda paylaş

dasaaa said:

asd [1x2000] bi matrix
sdf [1x2000] bi matrix daha
...
...
...
17tane matriximiz var. bunları excel'e atıcam. sütünlar halinde olacak.


asd || sdf || ... || ... ||
0 4 5 1.1
2 8 1 3


atıyorum işte anlamışsınızdır.
fid = fopen(['dosyaadi'.xls'],'w');


faşan yapıyorum.. asd, sdf vs. zaten asd=asd' haline getirildi bile. hepsi sütun yani.

bunları sütün halinde nasıl xls'e yazdırıcam?

fprintf(fid, 'asd',????????



ne yazıcam buraya kod olarak??



hmm şöle yapabiliyorum ama her bir array için 5sn falan sürüyor!
xlswrite('dosyaadi.xls', asd, 'Sheet1', 'A1')
xlswrite('dosyaadi.xls', sdf, 'Sheet1', 'B1')


daha kısa süreni yok mu?
5! loop yapıcam ve bi sürü dosya girişi için yapmam gerekecek bunları...
:(
Link to comment
Sosyal ağlarda paylaş

böhüeeehehuhu arkadaşım can veriyorum burada.. her analiz için ben diyeyim 10 sen de 20dakika vakit harcıyorum bak.. dahası da var excel üzerinden data alan başka bir programa sokuyorum da oradan kontrol ediyorum.. ve zor oluyor haliyle..

bi el atıverin kamuran! bulamadım çözümü! csvwrite diye bir modul buldum ama ı-ıh o da olmadı hani..
Link to comment
Sosyal ağlarda paylaş

  • 2 hafta sonra ...
hmm.. 2soru ile karşınızdayım..

önemli olan soru bu birincisi.

1.gui'si olan, hazırladığım bi matlab .m file'ı .exe'ye çevirebilir miyim? nette gördüğüm 3-5 şeyi denedim ama başarılı olamadım.. C++ üzerinden bişiler yapıyor sanırım. çeviriyor. çıkan exe'ye çift tıklıyorum.. hiçbir işe yaramıyor. gui'siz de denedim o da olmadı.

önceden herhangi bir şekilde exe'ye çevirebilen varsa nasıl çevirdi gerçekten merak ediyorum..

2.daha az önemli olan sorum da şu, ee dur bi toparlayayım.. çünkü anlatmakta sıkıntı yaşıyorum.. :/ yapmaya çalıştığım şey şunun gibi aslında

mesela 3aksx4kat bir sistem yaratmak istedik diyelim..



|----|---| 4
| | |
|----|---| 3
| | |
|----|---| 2
| | |
|----|---| 1
| | |
1 2 3
4m 3m


bunu belirli uzunluklar ve yüksekliklerle çizdirip, joint noktalarına kütle atamak istiyorum. şimdilik sadece çizdirebilmem bile yeterli olacaktır..

bunu ne diye aratacağımı inanın bilemedim..
Link to comment
Sosyal ağlarda paylaş

  • 2 hafta sonra ...
ilk soru mcc komutu ile yapılabiliyor.

ama internetten bi aratın 2tane pdf çıkıyor.. biri matlab'ın dev bi pdf dosyası.. 144sf falan. öteki daha küçükçe. 90sf falan.

alın bi bakın, sıkılın bol bol.. mload falan bi ton sıkıcı şey var. ama karmaşık bişiler yapınca olmuyor exe :(

2.soruda 3 adet matris oluşturup buna göre bi koordinat düzlemi oluşturttum.. olmadı. iyi olmadı en azından

beceremedim.

sonra bunu excel üzerinden yaptım. excele giriyoruz binayı. kat sayısı, aralık sayısı ve diğer bilgileri. oradan koordinatları çözüp sheet2ye yazıyor. soonra da matlab çalıştırınca bunun içiden dataları alıyor.

bir ara bakıcam başka bir şeyler yapıp daha düzgün işe sokucam.

yine de exe olayını çözememek üzdü..

başka yollar arayağım işte. her türlü öneriye açığım..
Link to comment
Sosyal ağlarda paylaş

  • 3 hafta sonra ...
şimdi bi nonlinear analiz programı yazıyorum

newton rapson iterasyon yapıyor.

gui kurdum, orada bir editbox yarattım.
iterasyonun her adım sonucunu orada vermek istiyorum.. bu aşağıdakini dedim ama çalışmıyor.

caption1=sprintf(['Iteration ',num2str(iter),'n','Total vertical displacement h=',num2str(hi),'cm ',',Error=',num2str(Er),', Corrected Bar Forces= ',num2str(Ni),' N']);
set(handles.sonucc, 'String',caption1);

dedim mesela..
benim istediğim

o editbox içinde
Iteration 1
Total vertical displacement h=48865.3618cm ,Error=-1.0088, Corrected Bar Forces= 80641924.8972 N
Iteration 2
Total vertical displacement h=42787.0935cm ,Error=-0.21105, Corrected Bar Forces= 50481438.0194 N
Iteration 3
Total vertical displacement h=41058.7746cm ,Error=0.10331, Corrected Bar Forces= 42629214.3979 N

yapması.

ama herhangi bir şekilde yeni satır oluşturtamıyorum. son durumu veriyor sadece.

nasıl yapabilirim. n falan koyuyorum set(handles kısmına ama ı-ıh.. hiçbir işe yaramıyor.. şunu yapsam bitecek salak proğram..
Link to comment
Sosyal ağlarda paylaş

yok lam adam gibi forum yok..

bi de abi şey sıkıntısı oluyor o gibi her forumda. adama soruyorsun adam cevap veriyor işte..

"bu soruyu bir çok kez cevapladık aratırsan bulabilirsin"

lam mal herif. aradık bulamadık ki soruyoruz. allahın öküzü!

diyemiyorsun.. ya da diyorsun atılıyorsun..

ha bir de şu cevap tipi var..

"fprintf komutuna bak"

ah be güzelim çok yardımcı oldun gerçekten.. benim hiç aklıma gelmemişti allah inandırsın.. bre ornitorenk kılıklı gergedan! nesine bakayım onu yazsana mal! aç help dosyasını oku diye yardım mı olur. bilmiyorsan konuşma bre öküz.. yardım etmeyeceksen de yıkıl git, nanik yapıyor sanki zürafa kılıklı borazancı başı..

işte böle sn reyou. burada öle saçma yanıtlar yok.. cevap ya var, ya da yok. yoksa ben bulursam yazıyorum zaten.

arayan olursa adam gibi yerden bulsun, bu dediğim süpersalak topluluklarla uğraşmasın.. kafayı yemesin..

bak o forumlarda atttığım 3tur böle çıldırttı beni.. burası güzel gerçetken. bi bakınıyorum diğer forumlara da... fiyuu.. burası her bakımdan cennet gibi be baba..
Link to comment
Sosyal ağlarda paylaş

Yabancı forumlara bak ?

Matlab için çok geniş soru sorma ve kaynak imkanın var yine bence gayet iyi, üzerinde çalıştığım başka bir programda internet üzerinde neredeyse sıfıra yakın kaynak/bilgi var, sorum olduğu zaman duvarları izlemekle yetiniyorum.
Link to comment
Sosyal ağlarda paylaş

said:
Yabancı forumlara bak ?

hhmmmm nedense hiç aklıma gelmemişti.....
http://www.cinemaretro.com/uploads/DRNOCU1.jpg

baktım ama işe yarar bişi bulamadım.. adamlar text kullan demişler. bunu da "sayısını bildiğin adım için yinele" demişler.

bende sayısı belli değil ve loop ile çalışmıyor.

onun yerine table koydum, table'a atattım.. bir de excel'e yollattırıyorum
Link to comment
Sosyal ağlarda paylaş

  • 1 ay sonra ...
Excel dosyasındakı verileri nasıl matlabda import edip plotluyoruz ?

80 bin satırlık (80k x 2) bir datam var bunun burda plotun almam lazım, google ve bilimum araştırmaya girmeden önce burda madem sen biliyorsun hazırcılık yapıp sorim dedim.
Link to comment
Sosyal ağlarda paylaş

şimdi excel'in içi şöle olsun
A - B
1 - 2
2 - 5
2 - 4

gibi iki sütun yani..

excel'de xls olmalı, diyelim ki deneme xls c:deneme.xls olarak geçiyor yeri.

a=xlsread('c:deneme.xls')
a1=a(:,1) (burada ilk sütunu a1'e kaydettik)
a2=a(:,2) (ikinci sütun da a2 oldu)
plot(a1,a2) bu da çizimi

bu arada eğer 0,124578 gibi bişiler varsa excel içinde onları noktaya çevir 0.124578 olacaklar yani.. Replace all ile yapıcaksın onu da excel'den ya da bi text editorden.. ben txt editor kullanırdım yerine olsam..

onda sadece ilk satır
a=load ('c:deneme.txt');
olarak değişecek, txt'den daha hızlı okur bi de.. ha son olarak xlsx nasıl alır bilmiyorum denemedim hiç..
Link to comment
Sosyal ağlarda paylaş

  • 2 ay sonra ...
Yeni konu açmayayım dedim.

İki matrisin konvolüsyon çarpımını yapan kod lazım bana.

Arkadaş kendi yazdığını gönderdi çalışma prensibini göstermek için;


a=[];
b=[];
c=[];
x=[1 2 3 4];
y=[5 6 7 8 9 10];

uzx=length(x);
uzy=length(y);

%A bölümü için

for i=1:uzx
gecxa=x(1:i);
gecya=y(1:i);
gecyalr=fliplr(gecya);
a(i)=sum(gecxa(1:i).*gecyalr(1:i));
end

% A Bölümü tamam.


% B bölümü için


for j=1:(uzy-uzx)
gecxb=x(1:uzx);
gecyb=y(j+1:j+uzx);
gecyblr=fliplr(gecyb);
b(j)=sum(gecxb.*gecyblr);
end


% B bölümü tamam


% C bölümü için

for k=2:uzx
k1=k-1;
gecxc=x(k:uzx);
gecyc=y(uzy-uzx+k:uzy);
gecyclr=fliplr(gecyc);
c(k1)=sum(gecxc.*gecyclr);
end

% C bölümü tamam


sonuc= [a b c]

conv=conv(x,y)



Bir el atıverirseniz makbule geçer.
Link to comment
Sosyal ağlarda paylaş

ben de function olarak yazdım işine yarar umarım gerçi biraz amatörce oldu ama sağlık olsun asdasd

function [k]=kon(x,y)
n=length(x);
m=length(y);
abc=zeros;
r=0;
for b=1:m
for c=1:n
r=r+1;
abc(r,1)=m-b+n-c;
abc(r,2)=y(b)*x(c);
end
end
l=max(abc(:,1));ab=zeros(1,l+1);
for f=0:l %*
for t=1:r
if abc(t,1)==(l-f)
if ab(1,f+1)==0;
ab(1,f+1)=abc(t,2);
else
ab(1,f+1)=ab(1,f+1)+abc(t,2);
end
end
end
end
k=ab;

* koyduğum yere kadar katsayıları üstleri hesaplıyor, sonra üstleri aynı olanların toplanıp öyle gösterilmesi gerekiyor ondan aklıma gelen bu tek tek üstleri birbirine eşit olanları kontrol ettirip toplatmak geldi gerçi çok iç içe girdi döngüler ama olsun asdas
-----
tic toc ile benim "kon" ile matlab in conv ınını kıyasladım asfas benim kon yaklaşık 244 kat daha yavaş çalışıyor safasdasd
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...