การแก้สมการไม่เชิงเส้นที่เกี่ยวข้องกับระยะทาง

ฉันต้องการแก้ชุดสมการที่ไม่ใช่เชิงเส้นใน Matlab ฉันหมายถึงสมมติว่าฉันมีสองจุดที่กำหนดโดย (lat1,lon1) และ (lat2,lon2) ทีนี้ผมอยากหาจุด lat3,lon3 ซึ่งอยู่ห่างจากจุดทั้งสองจุด 20 กม. หาได้จากจุดตัดของวงกลมที่มีรัศมี 20 กม. โดยมีจุด (lat1,lon1) และ (lat2,lon2) เป็นจุดศูนย์กลาง

อย่างไรก็ตาม ฉันสับสนเล็กน้อยเกี่ยวกับวิธีการแก้สมการนี้

ฉันมีฟังก์ชั่นคำนวณระยะห่างระหว่างจุดสองจุดใน 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

และฉันกำลังพยายามใช้ฟังก์ชันการแก้โจทย์ของ Matlab ที่ http://www.mathworks.com/help/toolbox/Symbolic/solve.html

อย่างไรก็ตามเมื่อฉันกำหนด

syms lat3 lon3

และพยายามให้สมการส่งผ่านไปยังฟังก์ชันแก้โจทย์ ซึ่งจะทำให้เกิดข้อผิดพลาดที่ atan2 only accepts arguments of type sym ฉันจะทำสิ่งนี้ได้อย่างไร?


person rajan sthapit    schedule 04.06.2012    source แหล่งที่มา


คำตอบ (1)


หากคุณต้องแก้เฉพาะคำถามนั้น คุณไม่จำเป็นต้องมีฟังก์ชันการแก้สมการของ Matlab คุณสามารถใช้สูตรของพีทาโกรัสได้:

หากคะแนนของคุณคือ (0,0) และ (1,0) และรัศมีคือ x ดังนั้นจุดสองจุดที่อยู่ห่างจากทั้ง (0,0) และ (1,0) คือ

(0.5, sqrt (x^2 - 0.25) ) และ (0.5, - sqrt (x^2 - 0.25))

ทีนี้ถ้าจุดของคุณคือ (a,b) และ (c,d) แล้วระยะห่างของจุดทั้งสองจะเท่ากับ

dist = sqrt ( (c-a)^2 + (db)^2 )

โอเค ตอนนี้เราใช้ระบบพิกัดที่มีจุดกำเนิดคือ (a,b) และมีหน่วยเป็นดิสและแกนนอนผ่านไป (c,d) ในระบบพิกัดนี้ ประเด็นที่เป็นปัญหาคือ

(0.5, +/- sqrt ( (r/dist)^2 - 0.25 ) )

ทีนี้ เพื่อจะถึงระบบพิกัดเดิม เราต้องคูณด้วย dist จะได้

(0.5 * ระยะทาง +/- sqrt ( r^2 - 0.25 * dist^2 ) )

จากนั้นหมุนด้วยการหมุนเมทริกซ์ (dist, 0) ถึง (c-a, d-b) ซึ่งก็คือ

cos alpha   -sin alpha
sin alpha   cos alpha

โดยที่ alpha = arccos ( (d-b) / dist) เช่น เมทริกซ์

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

ซึ่งจะช่วยให้

(0.5 (db) -/+ (c-a) sqrt (r^2 / dist^2 - 0.25), 0.5 (c-a) +/- (d-b) sqrt (r^2 / dist^2 - 0.25)

และสุดท้ายก็เติม (a,b) ยอมจำนน

(a + 0.5 (d-b) -/+ (c-a) sqrt (r^2 /dist^2 - 0.25), b + 0.5 (c-a) +/- (d-b) sqrt (r^2 /dist^2 - 0.25) )

นี่คือจุดที่คุณกำลังมองหา ฉันอาจทำผิดพลาดที่ไหนสักแห่ง แต่ฉันหวังว่าทิศทางควรจะชัดเจน

person JohnB    schedule 04.06.2012