PDA

Tam Sürümünü Görmek İçin : C De Program Yazmam Lazim


kaygisiz2
18/04/2007, 18:14
Assignment Problem

Engineering Experiments and Function Discovery
In engineering we often make experiments to understand how a system behaves under varying conditions. These experiments produce a set of data points. The next step in understanding the

system would be to determine a formula

y  f x that represents the behavior of the system.

This process is called “function discovery”. The formula that is discovered is called to be a
“good fit” if it goes close to the data points that are collected from the experiments.
Suppose that we are testing the braking performance of a new car. We run different experiments with varying speeds and find the stopping distances of the car as:

Speed
(km/h)

Stopping
Distance (m)

20 6.725
40 16.625
60 30.975
80 50.000
100 68.300
120 93.125
140 117.975
When we plot the data, we see how the stopping distance changes with respect to speed. The next step is to discover a formula that goes through these data points. For instance for this

data set,

y  0.9360x  20.07 represents the system as shown in the figure.

Stopping Distances for Varying Speeds

140

y = 0.9360x - 20.07

120
100
80
60
40
20

0
-20


0 20 40 60 80 100
Speed (km/h)


120 140


160




In other words, we can use the function

y  0.9360 x  20.07

for predicting the stopping

distance of the car at 35 km/h although we did not have an experiment that was made for this speed.
The Least Squares Approximation
In this assignment, we are going to use the least squares method to find a line that goes through a given set of data points. The least squares approximation to a set of data points can


where N is the number of data points and A and B are the coefficients of a line that passes
through the data points with least error:

y  Ax  B

(2)


Now let’s solve together the least squares approximation for the stopping distance data. The
N

 xk

term in the first equation above is the square of all x values (speeds in this case) added

k 1
up. This sum is 56000. Make sure you do it yourself with the help of a calculator and get the same result. When we find all other terms in the equations we get:

56000 A  560B  41179.5
560 A  7 B  383.7

(3)

Calculate the rest of the terms as well and verify these equations of two unknowns.

Solving these two equations together, we find:
A  0.9360
B  20.07


(4)

Make sure you do all of these calculations yourself and understand them before proceeding to
Part 1.
PART 1:
Write a program that reads in the data points line by line. That is, the user will give the first pair of x and y values, press enter, give the second pair of x and y values, press enter, and so on. The user will press -1 for both x and y values to stop entering data.
Your program will find and display the two linear equations in terms of A and B (like equation 3 above).

PART 2:
Write a new program that reads in the coefficients for two linear equations of two unknowns and solves them. For instance when the user enters the coefficients in equation 3 as:
56000 560 41179.5
560 7 383.7
Your program will find and display the values of A and B as in equation 4.

PART 3:
Combine PART 1 and PART 2 to find the least squares approximation line for any given set
of data points.
You will only upload your code for PART 3 in this assignment.

TAM OLARAK GRAFIK VEDE FORMULLERI GORMEK İÇİN: http://rapidshare.com/files/26478657/C.doc
YUKARIDADA AÇIKLANDIĞI GİBİ BİR ÖDEVİM VAR C KODU İLE YAZMAM GEREKEN FAKAT NEKADAR UĞRAŞTIYSAM BASINDAN BILE BAŞLAYAMADIM YAZMAYA. ÖDEVİ YAPARKEN ARRAY DE KULLANMAM LAZIM.YUKARIDAKI ACIKLAMADAKI PROGRAMI NASIL YAPABILICEGIM HAKKIDNA BILGI VERİRSENİZ SEVİNİRİM.YANİ AŞAMA AŞAMA NELER YAPMAM GEREKTİĞİNİ DÖYLERSENİZ BEN KODA DOKEBILRIM YARDIMALRINIZI BENDEN ESİRGEYEİN.


epic
18/04/2007, 18:53
Cok ugrasip da basindan bile baslayamamaniza uzuldum.

Ingilizce odev aciklamasini Turkce olarak nasil yorumladiginizi bizimle paylasirsaniz yardimci olabilecegimizi dusunuyorum.

Baslamak icin gosterdiginiz ugrasi da anlatirsaniz nerede yanlis yaptiginizi bulabiliriz belki. Ve dogru bir baslangic icin yol gosterici bilgiler edinirsiniz boylece.

mr_c
18/04/2007, 21:18
Buy a numerical anal. book

kaygisiz2
18/04/2007, 21:32
Buy a numerical anal. book

Bu mesjla ne demek istediginzi dahi anlamadım acıklarmısnız

acehreli
18/04/2007, 22:07
Bir "numerical analysis" (sayisal analiz?) kitabi almanizi onermis.

Benim onerim de, hic vakit gecirmeden ders notlarini tekrar calisman yolunda olacak. Verdigin soruda birden fazla program oldugu icin, ben otekileri bir kenara birakarak "part 1" dedikleri konusunda sunlari soyleyebilirim:

1) x ve y degerlerini tutacak olan bir veri yapisi tanimla (struct). (Bunun nasil yapildigini bize sorma lutfen, bu konu derste gosterildi; ya notlarina bak ya da herhangi bir C kitabina bak.)

2) Kullanicinin girdigi x ve y degerlerini oku (scanf kullanabilirsin) ve birinci adimda tanimladigin yapidan olusturarak diziye ekle. Bu diziyi bastan sabit secebilirsin, program gelistikce malloc ve realloc kullanarak daha buyuk bir yere tasimayi ogrenirsin. Simdilik soyle bir sey yeter:


X_ve_Y_Yapisi dizi[BUYUK_BIR_SAYI];
/* ... */
X_ve_Y_Yapisi kullaniciniGirdigiYapi;
dizi[siradaki] = kullaniciniGirdigiYapi;
++siradaki;


Boylece diziyi doldurmus oluyorsun.

3) O dizi elemanlarini bastan sona giderek (for, while, vs.) yukaridaki "ucuncu denklemde" (like equation 3 above) gosterildigi gibi hesapla.

Ali

kaygisiz2
18/04/2007, 22:19
Cok ugrasip da basindan bile baslayamamaniza uzuldum.

Ingilizce odev aciklamasini Turkce olarak nasil yorumladiginizi bizimle paylasirsaniz yardimci olabilecegimizi dusunuyorum.

Baslamak icin gosterdiginiz ugrasi da anlatirsaniz nerede yanlis yaptiginizi bulabiliriz belki. Ve dogru bir baslangic icin yol gosterici bilgiler edinirsiniz boylece.

Aslında ingilizcesinden tek analdıgım elimizde y=f(x) gibi yani y=ax+b gibi bir denklemimizin olduğu. bu denklemdeki a ve b katsayıalrı kendimiz veriyoruz taki a ve b yerine -1 girene dek. ama buradan sonra hangi formulu kullanıp sonucu bulacagımı daha sonra ne yapacagımı faln analmadım. Alsında formullerı vermısler dıyeceksınız ama o formullerıde anlamadım

acehreli
18/04/2007, 23:10
Yanlis anliyorsun. Sana verilenler yalnizca (x,y) ciftleri. Sen, o degerlere uygun olan a ve b'yi bulmaya calisiyorsun.

Yani verilen degerleri saglayan bir y=f(x) fonksiyonu bulmaya calisiyorsun.

Ali

kaygisiz2
18/04/2007, 23:38
EE o zamna sımdı ne anlatmak istiyor vede sırayla neler yapmam gerekıyor

acehreli
19/04/2007, 00:06
Sirasiyla sunlari yapman gerekiyor:

1) Senden bu programi yapabilmeni bekleyen insanlarin sana ogrettikleri konulari tekrar calisman gerekiyor. Hic olmazsa giristen veri almayi ve dizileri cok iyi anla.

2) Bu program(lar)i o bilgileri kullanarak yazman gerekiyor.

Haydi hemen basla ve bizi gelismelerden haberdar et! Mutlaka takildigin yerler olacaktir. Bize sorarsin...

Ali

kaygisiz2
19/04/2007, 00:19
Bir "numerical analysis" (sayisal analiz?) kitabi almanizi onermis.

Benim onerim de, hic vakit gecirmeden ders notlarini tekrar calisman yolunda olacak. Verdigin soruda birden fazla program oldugu icin, ben otekileri bir kenara birakarak "part 1" dedikleri konusunda sunlari soyleyebilirim:

1) x ve y degerlerini tutacak olan bir veri yapisi tanimla (struct). (Bunun nasil yapildigini bize sorma lutfen, bu konu derste gosterildi; ya notlarina bak ya da herhangi bir C kitabina bak.)

2) Kullanicinin girdigi x ve y degerlerini oku (scanf kullanabilirsin) ve birinci adimda tanimladigin yapidan olusturarak diziye ekle. Bu diziyi bastan sabit secebilirsin, program gelistikce malloc ve realloc kullanarak daha buyuk bir yere tasimayi ogrenirsin. Simdilik soyle bir sey yeter:


X_ve_Y_Yapisi dizi[BUYUK_BIR_SAYI];
/* ... */
X_ve_Y_Yapisi kullaniciniGirdigiYapi;
dizi[siradaki] = kullaniciniGirdigiYapi;
++siradaki;


Boylece diziyi doldurmus oluyorsun.

3) O dizi elemanlarini bastan sona giderek (for, while, vs.) yukaridaki "ucuncu denklemde" (like equation 3 above) gosterildigi gibi hesapla.

Ali

1) Array yani dizi kullanmıycagım daha ögrenemdık dizileri. Ayrıca yukarıda x ve y yi kullanıcıya aldır demişsiniz o kısmını bende yapabılıyroum ama gerısıdne dedıgınız array kısmından hıc bır sey anlamadım vede ne yapomam gerekır ıkıncı kısmda analmadım. ayrıca bırden cok program yapmıycagız 2 bolum halınde yapıpcagız fakat 3. bolumde ıkı program bır arda calısacak heralde tam olarak okumadınız.

2)3) O dizi elemanlarini bastan sona giderek (for, while, vs.) yukaridaki "ucuncu denklemde" (like equation 3 above) gosterildigi gibi hesapla. Hesaplamasına hesaplayımda yukarıda 3. denklemde nasıl hesapladıgını anlayamadım kı. zaten esas sorunda orayı anlayamam ya. yarıdmcı olup bastan sona kadar array kullanmadan ne yapacagımı en basıt halıyle soyelrsenız sevınırm.

3) Tam olarak ne yapacagımı dokumanı okuyup bana soyleyebılırsenız sevinicegim kod yazma konusunda bir sıkıntım yok ama ne yapmam gerektıgını anlayamadım bir turlu birde hangi formullerı kullanam gerektıgını o kunuda yardım ıstıyroum lutfen yardım edin.

acehreli
19/04/2007, 01:19
ÖDEVI. YAPARKEN ARRAY DE KULLANMAM LAZIM

Bizim Turkce'de dizi dedigimiz, senin yukarida ARRAY dediginle ayni sey. Sana dizileri ogretmeden dizi kullanan program isteyemezler. Git, onlarla konus, hakkini ara...

Istersen birden cok program yapma... Ama bak soyle yaziyor:

"PART 1: Write a program that ..." Turkcesi: "Birinci Bolum: ... seklinde bir program yazin."

"PART 2: Write a new program that ..." Turkcesi: "Ikinci Bolum: ... seklinde yeni bir program yazin."

Ben orada iki adet program sayiyorum...

Sana verilen x,y ciftlerini kullanarak "The Least Squares Approximation" yontemini uygulayacaksin.

O yontem soyle calisiyor: Butun x degerlerinin karelerini topla. Senin verdigin metinde 56000 olarak hesaplanmis. Sonra baska seyler hesaplayacaksin ama verdigin metinde bunlar anlasilmiyor. Sonucta olay cok basit: Sana verilen ciftleri kullanarak iki bilinmeyenli iki denklemi cozuyorsun. Senin metinde cozulmesi gerekenler sunlar:

56000 A + 560B = 41179.5
560 A + 7 B = 383.7

Bunun cozumu de A==0.936, B==20.07 oluyormus.

Ali

kaygisiz2
19/04/2007, 01:53
Yazıdıgım metınde cıkmayan şeylere bakabılmenız için bir link koydum ordan ındırıp daha ayrıntılı bakabılırsınız. dOKUMANI INDIRP DHA SONRADA KALDIGINIZ YERDEN ANALTIRSANIZ SON MESAJINIZDA SEVINRIM BAYA YARARLI OLUYOR.

acehreli
19/04/2007, 02:47
Verdigin dosyayi buradan indiremiyorum. Verdigi hatadan anladigim kadariyla bedava hizmet sona ermis...

Ama "least square" diye aratirsan yontem hakkinda bir suru belge bulabilirsin. Surada bir tane buldum:

http://www.utdallas.edu/~herve/Abdi-LeastSquares-pretty.pdf

Orada (5) ve (6) olarak gosterilen denklemlerden anladigim kadariyla sunlari yapacaksin:

1) x'lerin ortalamasini al; buna Mx de

2) y'lerin ortalamasini al; buna My de

3) Verilen her bir x,y icin su carpimi hesapla: (y - My)*(x - Mx) ve bunlarin hepsini topla (Belgedeki (6) denkleminin payi (ust tarafi))

4) Belgedeki (6) denkleminin paydasi icin her bir x icin su carpimi hesapla: (x - Mx)*(x - Mx)

3 ve 4'u su dongude yapabilirsin:


double pay_toplami = 0;
double payda_toplami = 0;
for (/* butun ciftler icin */)
{
// pay_toplami'na (y - My) * (x - Mx) degerini ekle
// payda_toplami'na (x - Mx) * (x - Mx) degerini ekle
}


5) Artik b'yi hesaplayabilirsin (yine ayni denklemden ogreniyorum): b = pay_toplami / payda_toplami.

6) b'yi bildikten sonra a'yi da hesaplayabilirsin. O da belgede (5) denkleminde verilmis.

Ali

acehreli
19/04/2007, 02:48
Bir rica: Lutfen buyuk harf, bold, italic, vs. kullanma. Anlatmak istediklerine hicbir katkisi olmadigi gibi, "bagirmak" olarak kabul ediliyor.

Ali

kaygisiz2
19/04/2007, 04:19
Herşeyiçin çok çok çok sagolasın ALİ bende tam olarak senin bana yaptıgın gibi bir açıklama istiyordum. Boyle bir açıklama olduktan sonra koda dokmek inan çok kolay olacak. Aslında ben kodu yazabılıyordumda sorudan hiç bir şey anlayamamıştım. oda senın sayende halloldu. Buyuksun ALİ BABA

hasan_hio
22/04/2007, 18:11
Bu ödevin tıpatıp aynısına bnde sahibim ve bu gece (pazar) saat 00:00 a kadar bitirip submit etmem gerekiyor. Yukarıda ki yazdığınız herseyi okudum yardım almak istedim fakat hala ödevimde bi gelişme yok.Mümkünse banada yardım edebilirmisiniz.

ödevin türkçesi tam olarak ;

user bi deney yapıyor ve bu deney sonucunca belli sayılara ulasıyor
(20 6.725 40 16.625 60 30.975 80 50.000 100 68.300 120 93.125 140 117.975) ve programda user bu sonucları input olarak giriyor ve programın devam edebilmesi için user tum deney sonuclarını girdikten sonra x & y yerine -1 girmesi gerekiyor. Daha sonra The Least Squares Approximation bu teoreme görede işlemeler yapılıp y=Ax+B deki A ve B yi bulmamız isteniyor fakat ben yapamıyorum lütfen banada yardım edebilirmisiniz.Ayrıca evet biz arrey görmedik ve ödevde yok. LÜTFEN YARDIM EDİN....

Hasan

acehreli
23/04/2007, 01:36
b'nin nasil hesaplandigini yukarida b = pay_toplami / payda_toplami olarak soylemistim.

Onu hesapladiktan sonra a'yi da verdigim baglantidaki (5) numarali formulden soyle buluyorsun: a = My - (b * Mx)

Ali

kaygisiz2
23/04/2007, 18:21
Bu ödevin tıpatıp aynısına bnde sahibim ve bu gece (pazar) saat 00:00 a kadar bitirip submit etmem gerekiyor. Yukarıda ki yazdığınız herseyi okudum yardım almak istedim fakat hala ödevimde bi gelişme yok.Mümkünse banada yardım edebilirmisiniz.

ödevin türkçesi tam olarak ;

user bi deney yapıyor ve bu deney sonucunca belli sayılara ulasıyor
(20 6.725 40 16.625 60 30.975 80 50.000 100 68.300 120 93.125 140 117.975) ve programda user bu sonucları input olarak giriyor ve programın devam edebilmesi için user tum deney sonuclarını girdikten sonra x & y yerine -1 girmesi gerekiyor. Daha sonra The Least Squares Approximation bu teoreme görede işlemeler yapılıp y=Ax+B deki A ve B yi bulmamız isteniyor fakat ben yapamıyorum lütfen banada yardım edebilirmisiniz.Ayrıca evet biz arrey görmedik ve ödevde yok. LÜTFEN YARDIM EDİN....

Hasan


Eminimki sende Işık üniversitelisin kardeşim. Ali arkadaş baya ayrıntılı olarak açıklamış ödevi Bundan sonrada yapamıyrosan ne diyeyim sana. Ben kodumu burda verırdım yaptıgım ama -500 almamak istedişğim içi
n vermiyorum. Hadi sana rs gele