Şimdi Ara

Bilinen 10 adet koordinat icin en uygun konum bulma?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
4
Cevap
0
Favori
905
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • İlk sorum şu arkadaslar: Mahallede bulunan 10 tane evin koordinatları verilmiştir. Bu mahallede doğalgaz dağıtım merkezi kurulması düşünülmektedir. Bu merkezden tüm evlere çekilecek doğalgaz hatlarının toplam uzunluğunun en az olması için bu merkezin nerede kurulacağını hesaplayın.

    İkinci sorum şu: Bir önceki problemde kurulacak merkez sayısı iki olduğunda yerlerini hesaplayın.

    Benim ilkine düşündüğüm çözüm: (Dizilerle yapmayı çalıştım az kod olması açısından ama beceremedim)
    #include <stdio.h>
    #include <conio.h>

    main()
    {
    int x1=3,y1=5;
    int x2=7,y2=8;
    int x3=4,y3=1;
    int x4=9,y4=3;
    int x5=6,y5=2;
    int x6=13,y6=4;
    int x7=2,y7=12;
    int x8=3,y8=4;
    int x9=16,y9=12;
    int x10=7,y10=18;

    int koordinatx=(x1+x2+x3+x4+x5+x6+x7+x8+x9+x10)/10;
    int koordinaty=(y1+y2+y3+y4+y5+y6+y7+y8+y9+y10)/10;

    printf("Merkezin kurulmasi icin en uygun koordinatlar: %d,%d",koordinatx,koordinaty);


    getch();
    }


    İkinci soru için yaptığım çözüm ise bu: (Ama emin değilim, sanırım birbirine en yakın sıralı ikili 5 koordinatı bulup oraya bir merkez kurdurtup diğer kalan sıralı ikili 5 koordinatada ayrı bir merkez kurulmasını ayarlamalıyım fakat birbirine en yakın 5 koordinatı nasıl bulduracağımı düşünemedim.)
    #include <stdio.h>
    #include <conio.h>

    main()
    {
    int x1=3,y1=5;
    int x2=7,y2=8;
    int x3=4,y3=1;
    int x4=9,y4=3;
    int x5=6,y5=2;
    int x6=13,y6=4;
    int x7=2,y7=12;
    int x8=3,y8=4;
    int x9=16,y9=12;
    int x10=7,y10=18;

    int koordinat1x=(x1+x2+x3+x4+x5)/5;
    int koordinat1y=(y1+y2+y3+y4+y5)/5;

    int koordinat2x=(x6+x7+x8+x9+x10)/5;
    int koordinat2y=(y6+y7+y8+y9+y10)/5;


    printf("1. Merkezin kurulmasi icin en uygun koordinatlar: %d,%d\n",koordinat1x,koordinat1y);
    printf("2. Merkezin kurulmasi icin en uygun koordinatlar: %d,%d",koordinat2x,koordinat2y);


    getch();
    }







  • Ortalama almak kadar basit bir problem gibi görünmüyor.
    Euclid mesafeleri toplamını minimum yapmak ile mesafenin kareleri toplamını minimum yapmak aynı değil.

    ikinci durumda (a1 - x1)^2 + ... (a1-x10)^2 değerini minimum yapmaya çalışıyoruz ve
    cevap a1 = (x1 + x2 + ... x10)/10 oluyor. ama Euclid mesafesi daha karışık. kök olduğu için türevi sıfıra eşitleyip çözmek biraz daha zorlaşıyor.

    İnternette biraz arama yaptıktan sonra bunun Weber Problemi diye geçtiğini gördüm.

    Geometrik Median algoritmaları genel anlamda bunları hesaplıyor ama dediğim gibi ortalama almak kadar kolay değil. Yöntemlerden bir tanesi Weiszfeld's Algorithm diye geçiyor.
    Ben de detaylı incelemedim. Merak ettim ama, bir bakacağım.
  • İnceledim, o kadar zor bir algoritma değilmiş.
    Euclid mesafesinin türevini aldığımız zaman https://math.stackexchange.com/questions/2297660/derivative-of-vector-consisting-of-euclidean-distances

    buradaki cevap elde ediliyor. Bunu da sıfıra eşitleyip iterative ya da ilerlemeli şekilde bunu çözmeye çalışan bir algoritma.



    Bunu bir loop içinde yakınsayana kadar hesapladığınızda bu noktayı bulmuş oluyorsunuz.



    < Bu mesaj bu kişi tarafından değiştirildi yesil1026 -- 27 Aralık 2018; 14:23:21 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.