多元方程式を解く方法

 投稿者:島村1243  投稿日:2015年 9月12日(土)19時47分19秒
  次のような問題を解くプログラムを知りたいのですが、お分かりになりましたらご教示お願いします。

<条件>
1)i=1,2,3,...N(多くても100程度)
2)⊿は未知定数で、C(i)=⊿*(i-1)
3){x(i),y(i)}は、x-y直交座標上の点を表す未知座標で、
x軸上の既知定点{A,0}を中心とする既知半径Rの円周上に在り
   (x(i)-A)^2+y(i)^2=R^2
を満たす。
4){B,0}はx軸上に在る既知定点の座標。
5)Q1,Q2は既知定数
6)cos(θ(i))=(x(i)-A)/R=C(i)/Q1-Q2/Q1*cos(ANGLE(x(i)-B,y(i)))を満たす。
7)θ(1)+θ(2)+θ(3)+...θ(N)=2*PIを満たす。

上記条件を満たす⊿と{x(i),y(i)}或いはθ(i)を求める。
 

Re: 多元方程式を解く方法

 投稿者:山中和義  投稿日:2015年 9月13日(日)19時02分29秒
  > No.3830[元記事へ]

島村1243さんへのお返事です。

> <条件>
> 6)cos(θ(i))=(x(i)-A)/R=C(i)/Q1-Q2/Q1*cos(ANGLE(x(i)-B,y(i)))を満たす。


i=1のとき、Δで調整できないので、これを満たさないと思います。

このi=1の上記の条件を除いて、N=2ときはすべてが満たすと思います。


プログラムは、

0≦θ[1]≦θ[2]≦ … ≦θ[n]とする。
2π=θ[1]+θ[2]+ … +θ[n]≧nθ[1]より、2π/n≧θ[1]
2π-θ[1]=θ[2]+ … +θ[n]≧(n-1)θ[2]より、(2π-θ[1])/(n-1)≧θ[2]
2π-(θ[1]+θ[2])=θ[3]+ … +θ[n]≧(n-2)θ[3]より、(2π-(θ[1]+θ[2]))/(n-2)≧θ[3]
   :
   :
として、不定方程式を解く。
th[i]を0.25°ずつ変化させて、x[i],y[i]を求めて、
そのときの各Δ[i]で、Δ[2]≒Δ[3]≒ … ≒Δ[N]となるものを探し出す。


PUBLIC NUMERIC x(100),y(100)
PUBLIC NUMERIC N, A,B,R,Q1,Q2
LET N=3 !2以上
LET A=5 !既知定数
LET B=1
LET R=2
LET Q1=2
LET Q2=3
DIM th(N) !θ[i]
FOR t=0 TO 360/N STEP 0.25 !※調整が必要である
   LET th(1)=t
   LET x(1)=A+R*COS(RAD(t))
   LET y(1)=  R*SIN(RAD(t))
   !!IF ABS( Q1*(x(1)-A)+R*Q2*COS(ANGLE(x(1)-B,y(1))) )<1E-4 THEN !※調整が必要である
   CALL try(2,360-t, th)
   !!END IF
NEXT t
END

EXTERNAL SUB try(i,s, th()) !2π=θ[1]+θ[2]+ … +θ[n]
IF i=N THEN
   LET th(N)=s

   LET x(N)=A+R*COS(RAD(s))
   LET y(N)=  R*SIN(RAD(s))

   LET d2=( Q1*COS(RAD(th(2)))+Q2*COS(ANGLE(x(2)-B,y(2))) )/(2-1)
   LET d=( Q1*COS(RAD(s))+Q2*COS(ANGLE(x(N)-B,y(N))) )/(N-1)
   IF ABS(d-d2)<1E-4 THEN !※調整が必要である
      PRINT "Δ=";d2 !解を表示する
      FOR K=1 TO N
         PRINT K;th(K);x(K);y(K)
      NEXT K
      PRINT
   END IF
ELSE
   FOR t=th(i-1) TO s/(N-i+1) STEP 0.25 !※調整が必要である
      LET th(i)=t

      LET x(i)=A+R*COS(RAD(t))
      LET y(i)=  R*SIN(RAD(t))

      IF i>2 THEN
         LET OK=0
         LET d2=( Q1*COS(RAD(th(2)))+Q2*COS(ANGLE(x(2)-B,y(2))) )/(2-1)
         LET d=( Q1*COS(RAD(t))+Q2*COS(ANGLE(x(i)-B,y(i))) )/(i-1)
         IF ABS(d-d2)<1E-4 THEN LET OK=1 !※調整が必要である
      ELSE
         LET OK=1
      END IF
      IF OK<>0 THEN CALL try(i+1,s-t, th)
   NEXT t
END IF
END SUB


 

Re: 多元方程式を解く方法

 投稿者:島村1243  投稿日:2015年 9月14日(月)05時51分14秒
  山中和義さんへのお返事です。

> 島村1243さんへのお返事です。
>
> > <条件>
> > 6)cos(θ(i))=(x(i)-A)/R=C(i)/Q1-Q2/Q1*cos(ANGLE(x(i)-B,y(i)))を満たす。
>
> i=1のとき、Δで調整できないので、これを満たさないと思います。
> このi=1の上記の条件を除いて、N=2ときはすべてが満たすと思います。
>
> プログラムは、

山中さん、明解なご教示有り難うございます。
早速、お教え頂いたプログラムを試させて頂きます。
 

戻る