アプリ版:「スタンプのみでお礼する」機能のリリースについて

陰関数の連立方程式

プログラミング言語で数値解析のアルゴリズムを実装しているのですが、
媒介変数表示された陰関数の連立方程式の解法で苦しんでいます。

 x = fx(t)
 y = fy(t)

 x = gx(t)
 y = gy(t)

の一般的な解法を教えてください。

具体的には、
 サイクロイド曲線と放物線の交点座標
  x(t) = A(t-sin(t))
  y(t) = A(1-cos(t))
  y(x) = Bx^2
 インボリュート曲線とベジエ曲線の交点座標
  x(t) = C(cos(t)+tsin(t))
  y(t) = C(sin(t)-tcos(t))
  x(t) = (t-1)^3x1 + 3(t-1)^2tx2 + 3(t-1)t^2x3 + t^3x4
  y(t) = (t-1)^3y1 + 3(t-1)^2ty2 + 3(t-1)t^2y3 + t^3y4
等の解 t を数値解析によって求めたいということです。


任意の陽関数の連立方程式
 y = f(x)
 y = g(x)
を満たす x を求めるアルゴリズム、要するに
 f(x) - g(x) = 0
の解を求めるアルゴリズムは、既に実装済みです。
ですので、ここまで持ち込んでいただければ必要十分です。

簡単に陽関数の解法のアルゴリズムに持ち込めるかと思ったのですが...

A 回答 (3件)

F(t) = ( fx(t) - gx(t))~2 + ( fy(t) - gy(t) )~2


と置いて、
F(t) - 0 = 0
を実装済みのアルゴリズムで解いては?

この回答への補足

ご回答いただきありがとうございます。
しかし、残念ながら、その考え方は間違っています。

例えば、簡単な問題として2つの円を考えて見ます。

 円1
  x = cos(t)
  y = sin(t)

 円2
 x = cos(t)+1
 y = sin(t)

円1は、原点(0,0)を中心とする半径1の円、
円2は、点(1,0)を中心とする半径1の円 です。

このとき、2つの円の交点の座標は、
 (1/2, ±3^(1/2)/2)
の2点であることは自明ですが、その時の媒介変数は
円1では、t = ±pi/3 + 2*pi*n
円2では、t = ±2*pi/3 + 2*pi*n
であって、t はそれぞれの関数において異なります。

ですから、ご回答いただいたように t を共通にしてしまっては解けません。
ちなみに、その方法ではこの問題の場合、
 ( fx(t) - gx(t))^2 + ( fy(t) - gy(t) )^2
は、常に1です。


決して難しいこととも思えないのですが、媒介変数表示された陰関数の連立方程式
の解(陰関数グラフの交点座標)を求めるのアルゴリズムに関して、
ご存知の方がおられますたら、ご助言をお願いいたします。

補足日時:2010/02/18 11:04
    • good
    • 0

> x = fx(t)


> y = fy(t)
> x = gx(t)
> y = gy(t)
>の一般的な解法を教えてください。

始めのtと後のtは別物なので、正確に書くと、
 x = fx(t)
 y = fy(t)
 x = gx(s)
 y = gy(s)
です。
なので。#1の解法ではできないような気がします。


サイクロイド曲線と放物線の交点座標なら、
A(1-cos(t)) = B(A(t-sin(t)))^2
としてtを求めればいいのでは。

この回答への補足

例示したのは、あくまでも1例に過ぎず
媒介変数表示された陰関数の連立方程式の
一般解法を探しています。

よろしくお願いします。

補足日時:2010/02/18 11:08
    • good
    • 0

ああ、そうか。


曲線の交点でしたっけ。
失敗、失敗。

それだと、
G(t,s) = ( fx(t) - gx(s) )~2 + ( fy(t) -gy(s) )~2
の極小値問題に翻訳してみても、
本質的に多変数ですから、
f(x) - g(x) = 0
を解くルーチンには、乗せられませんね。

数値計算なら、最大勾配法などどうでしょう。

適当に初期値 t[0], s[0] を決めて、
t[n+1] = t[n] - r[n]・(∂G/∂t)(t[n],s[n]),
s[n+1] = s[n] - r[n]・(∂G/∂s)(t[n],s[n]).
で漸化します。
r[n] は、正値の適当な数列で、
n が大きくなると減少するように取ります。

G(t[n],s[n]) が十分小さくなったら終わり。
その (t,s) が交点かニアミスかは、
数値計算では判らないので、
人力での確認が必要です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!