0

matlab で一連の非線形方程式を解きたいです。つまり、(lat1,lon1) と (lat2,lon2) で定義された 2 つのポイントがあるとします。ここで、両方のポイントから 20 km の距離にあるポイント lat3,lon3 を見つけたいと考えています。これは、点 (lat1,lon1) と (lat2,lon2) を中心として描かれた半径 20km の円の交点によって与えられます。

しかし、この方程式をどのように解くかについて、私は少し混乱しています。

matlabで2点間の距離を計算する機能があります

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

http://www.mathworks.com/help/toolbox/symbolic/solve.htmlで利用可能なmatlabのソルブ機能を使用しようとしてい ます

しかし、私が定義するとき

syms lat3 lon3

そして、方程式を解法関数に渡そうとすると、エラーがスローされます atan2 only accepts arguments of type sym。どうすればこれを乗り越えることができますか?

4

1 に答える 1

0

その特定の問題だけを解決する必要がある場合は、Matlab の方程式を解く関数は必要ありません。単純にピタゴラスの公式を使用できます。

ポイントが (0,0) と (1,0) で半径が x の場合、(0,0) と (1,0) の両方から x 離れた 2 つのポイントは

(0.5, sqrt (x^2 - 0.25) ) および (0.5, - sqrt (x^2 - 0.25))。

ポイントが(a、b)と(c、d)の場合、2つのポイントの距離は

距離 = 平方根 ( (ca)^2 + (db)^2 )。

では、原点が (a,b) で単位が距離で、横軸が (c,d) を通る座標系を使用します。この座標系では、問題の点は

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

ここで、元の座標系に到達するには、dist を掛ける必要があります。

(0.5 * 距離、+/- sqrt (r^2 - 0.25 * 距離^2))、

次に、(dist, 0) を (ca, db) に回転する行列で回転します。

cos alpha   -sin alpha
sin alpha   cos alpha

ここで、alpha = arccos ( (db) / dist)、つまり行列

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

を与える

(0.5 (db) -/+ (ca) sqrt (r^2 / dist^2 - 0.25)、0.5 (ca) +/- (db) sqrt (r^2 / dist^2 - 0.25)

そして最後に (a,b) を追加すると、

(a + 0.5 (db) -/+ (ca) sqrt (r^2 /dist^2 - 0.25)、b + 0.5 (ca) +/- (db) sqrt (r^2 /dist^2 - 0.25) )

これらはあなたが探しているポイントです。おそらく私はどこかで間違いを犯しましたが、方向性が明確になるはずです。

于 2012-06-04T20:55:23.397 に答える