Menyelesaikan persamaan non linier yang berhubungan dengan jarak

Saya ingin menyelesaikan sekumpulan persamaan non linier di matlab. Maksud saya, katakanlah saya memiliki dua titik yang ditentukan oleh (lat1,lon1) dan (lat2,lon2). Sekarang saya ingin mencari titik lat3,lon3 sedemikian rupa sehingga jaraknya 20km dari kedua titik tersebut. Diberikan oleh perpotongan lingkaran berjari-jari 20 km yang digambar dengan titik (lat1,lon1) dan (lat2,lon2) sebagai pusatnya.

Namun, saya agak bingung bagaimana menyelesaikan persamaan ini.

Saya memiliki fungsi untuk menghitung jarak antara dua titik di matlab

function [ distance ] = calculateDistance( latitude1,longitude1,latitude2,longitude2 )
radius = 6371;
dLat = degtorad(latitude2-latitude1);
dLon = degtorad(longitude2-longitude1);
a = sin(dLat/2) * sin(dLat/2) + cos(degtorad(latitude1)) * cos(degtorad(latitude2)) * sin(dLon/2) * sin(dLon/2);
c = 2 * atan2(sqrt(a), sqrt(1-a));
distance = radius * c;
end

dan saya mencoba menggunakan fungsi penyelesaian matlab yang tersedia di http://www.mathworks.com/help/toolbox/symbolic/solve.html

Namun ketika saya mendefinisikan

syms lat3 lon3

dan mencoba untuk meneruskan persamaan ke fungsi penyelesaian, itu menimbulkan kesalahan atan2 only accepts arguments of type sym. Bagaimana aku bisa mengatasi ini?


person rajan sthapit    schedule 04.06.2012    source sumber


Jawaban (1)


Jika Anda hanya perlu menyelesaikan pertanyaan tertentu saja, Anda tidak memerlukan fungsi penyelesaian persamaan apa pun di Matlab. Anda cukup menggunakan rumus Pythagoras:

Jika titik-titiknya adalah (0,0) dan (1,0) dan jari-jarinya x, maka dua titik yang berjarak x dari (0,0) dan (1,0) adalah

(0,5, akar persegi (x^2 - 0,25) ) dan (0,5, - akar persegi (x^2 - 0,25)).

Sekarang jika titik-titikmu adalah (a,b) dan (c,d), maka jarak kedua titik tersebut adalah

dist = akar persegi ( (c-a)^2 + (db)^2 ).

Oke, sekarang kita ambil sistem koordinat yang titik asal (a,b) dan satuannya dist serta sumbu horizontal melalui (c,d). Dalam sistem koordinat ini, titik-titik yang dimaksud adalah

(0,5, +/- akar persegi ( (r/dist)^2 - 0,25 ) ).

Sekarang, untuk mendapatkan sistem koordinat aslinya, kita harus mengalikannya dengan dist, sehingga diperoleh

(0,5 * dist, +/- sqrt ( r^2 - 0,25 * dist^2 ) ),

kemudian putar dengan matriks berputar (dist, 0) ke (c-a, d-b), yaitu

cos alpha   -sin alpha
sin alpha   cos alpha

dimana alpha = arccos ( (db) / dist), yaitu matriks

(d-b) / dist   -(c-a) / dist
(c-a) / dist    (d-b) / dist

yang memberikan

(0,5 (db) -/+ (c-a) persegi (r^2 / dist^2 - 0,25), 0,5 (c-a) +/- (db) persegi (r^2 / dist^2 - 0,25)

dan terakhir tambahkan (a,b), menghasilkan

(a + 0,5 (db) -/+ (c-a) persegi (r^2 /dist^2 - 0,25), b + 0,5 (c-a) +/- (db) persegi (r^2 /dist^2 - 0,25) )

Inilah poin-poin yang Anda cari. Mungkin saya telah melakukan kesalahan di suatu tempat, tetapi saya harap arahnya harus jelas.

person JohnB    schedule 04.06.2012