非線形連立式の解き方

 投稿者:島村1243  投稿日:2014年 7月13日(日)06時37分24秒
  Amとφを入力値とし、
 Am=0.1~1.0 step 0.1
 φ=PI/18(パラメータで、後でいろいろと変える)
とした場合に、下記の連立方程式を満足する出力値Edとθを求めるプログラムをご教示ください。

入力φとAmの範囲条件
 0<φ<PI/2 [rad]
 0<Am<=1
出力Edとθの範囲条件
 Ed>0
  -PI/2<θ<PI/2 [rad]
定数(値は変更できるようにする)
 R=100
 Xs=PI
 Vs=100
連立方程式
 Vs*Is*cos(θ)=Ed^2/R
 Vs*sin(θ)=Am/sqr(2)*Ed*sin(θ+φ)-Xs*Is
ただし、
 Is=sqr((Am/sqr(2)*Ed*sin(φ))^2+(Vs-Am/sqr(2)*Ed*cos(φ))^2)/Xs
 

Re: 非線形連立式の解き方

 投稿者:山中和義  投稿日:2014年 7月13日(日)09時52分42秒
  > No.3419[元記事へ]

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

> Amとφを入力値とし、
>  Am=0.1~1.0 step 0.1
>  φ=PI/18(パラメータで、後でいろいろと変える)
> 下記の連立方程式を満足する出力値Edとθを求めるプログラムをご教示ください。

これで解を求められると思います。


!2元非線形連立方程式の解

!ニュートン・ラフソン(Newton-Raphson)法
!  1変数の場合、Xi+1=Xi-f(Xi)/f'(Xi)  変形して、Xi+1=Xi+(-f(Xi)/f'(Xi))
!  ここで、漸化式の増分部分⊿x=-f(Xi)/f'(Xi)は、f'(Xi)*⊿x=-f(Xi)となる。
!  行列表記で解釈すると、Jx=bとなる。
!
!これを多変数に拡張する。

FUNCTION f(Ed,θ)
   LET IS=SQR((Am/SQR(2)*Ed*SIN(φ))^2+(Vs-Am/SQR(2)*Ed*COS(φ))^2)/Xs
   LET f=Ed^2/R -Vs*IS*COS(θ)
END FUNCTION
FUNCTION g(Ed,θ)
   LET IS=SQR((Am/SQR(2)*Ed*SIN(φ))^2+(Vs-Am/SQR(2)*Ed*COS(φ))^2)/Xs
   LET g=(Am/SQR(2)*Ed*SIN(θ+φ)-Xs*IS) -Vs*SIN(θ)
END FUNCTION

LET Am=0.5 !0<Am≦1
LET φ=PI/18 !0<φ<π/2

LET R=100
LET Xs=PI
LET Vs=100


LET d=0.01 !∂

LET xi=0 !初期値
LET yi=0

FOR i=1 TO 50 !漸化式を収束させる

   DIM x(2) !⊿x、⊿y

   !連立1次方程式Jx=bを得る
   DIM J(2,2)
   LET fxy=f(xi,yi) !前進差分で近似して求める(平均変化率)
   LET J(1,1)=(f(xi+d,yi)-fxy)/d !J=(∂f/∂x  ∂f/∂y)  ヤコビ(Jacobi)行列
   LET J(1,2)=(f(xi,yi+d)-fxy)/d !  (∂g/∂x  ∂g/∂y)
   LET gxy=g(xi,yi)
   LET J(2,1)=(g(xi+d,yi)-gxy)/d
   LET J(2,2)=(g(xi,yi+d)-gxy)/d

   DIM b(2)
   LET b(1)=-fxy !b=(-f)
   LET b(2)=-gxy !  (-g)

   !----------  ※ガウスの消去法などで2元連立1次方程式を解く
   DIM Ji(2,2) !逆行列を求める  Full BASIC版
   MAT Ji=INV(J) !正則なら
   MAT x=Ji*b
   !----------

   LET xi=xi+x(1) !Xi+1=Xi+⊿x
   LET yi=yi+x(2) !Yi+1=Yi+⊿y

   PRINT xi,yi !確認  ∥Xi+1 - Xi∥≦ε(1+∥Xi+1∥)

NEXT i

PRINT f(xi,yi),g(xi,yi) !確認  ∥f(xi)∥<δ

END


 

Re: 非線形連立式の解き方

 投稿者:島村1243  投稿日:2014年 7月13日(日)13時52分21秒
  > No.3420[元記事へ]

山中和義 様

島村1243です、早速のご教示有難う御座いました。
これからコードを読ませて頂きます。
解けずに弱っていたので大変助かりました。
 

戻る