|
> No.315[元記事へ]
!どなたか御知恵 拝借 お願いします。
!先のルンゲクッタ法で、他の微分要素を含み、暴走を生じ、それを押えるために
!安定化バッファ、f1_ f2_ を用いたが、その是非を、別な等価回路と網回路で計算
!し直し、比較して確かめた。 一致する様で、正しい波形だった。
!計算間隔 0.0105秒 では互いの差( ルンゲ・クッタ1、ルンゲ・クッタ2 )が目立ち
!ますが、 ~0.0005秒くらいで重なります。(全文コピー、RUN)
!
!問題は、ラプラス変換とも比較しようとした際に生じ、R1(b+sinωt)i(t)部分の変換で、
!時間関数の、抵抗と電流の積が、
! R1(b+sinωt)i(t) → R1*b*i(t)+R1*j/2*( e^(j*w*t)-e^(-j*w*t) )*i(t)
! ラプラス変換 → R1*b*i(s)+R1*j/2*( i(s-jw) - i(s+jw) )
!のようになって、i(s) にまとまらず、i(s)を決定できずに、強引に jw=0 での i(s)に
! s-jw, s+jw を代入して求めた i(s) を逆変換して i(t) を出した。(添付画像の式参照)
!しかし・・
!R1=30 付近の低い値では、比較的一致するも、R1=100以上あたりから著しく外れる。
!原因は、強引な i(s)の前提ですが、参考例題も見当たらず難渋している。
!下の laplace_ON を1にすると、ルンゲ・クッタ2 との比較テストモードに入ります。
!ルンゲ・クッタ1は、オーバーフローしやすい為、除いています。
!問題を簡単にするため、2次回路開放同然 R2→1e9 で、
! E, L1, R1(1+sinωt) の3素子のみの直列回路として、その電流i(t)と
! R1(1+sinωt)の、両端電圧v(t)を、描きます。
! ラプラス変換 v(t)灰, i(t)緑
! ルンゲ・クッタ2 v(t)赤, i(t)青 … 2次側は単独、L2開放端v2(t)赤, i2(t)青≒0
!---------------------------
!
OPTION ARITHMETIC COMPLEX
LET laplace_ON=0
!---------------------------ルンゲ・クッタ1で計算。(バッファが無いと暴走する)
!回路の微分方程式 r(t)=R1*(1+sin(w*t))
!
! i1┌→┐M┌→┐i2 (一次側の電圧平衡式)L1*(di1/dt)+r(t)*i1-M*(di2/dt)=E
! ┌─┐ ┌─┐ (二次側の電圧平衡式)M*(di1/dt)=L2*(di2/dt)+R2*i2
! │ L1 L2 R2
! E │ └─┘
! │ r(t)=R1*(1+sin(w*t))
! └─┘
! バッファ無しでは f1(t, i1)= (di1/dt)= ( E-R1*(1+sin(w*t))*i1+M*(di2/dt) )/L1
! 暴走する 微分方程式 f2(t, i2)= (di2/dt)= ( M*(di1/dt)-R2*i2 )/L2
!---------------------------ルンゲ・クッタ2で計算。(バッファ不要)
!相互インダクタンス M= k*(√L1*L2)の結合係数 k=1 として、漏れ磁束の無い場合、
!回路のi1側に揃えるT型等価回路で、網路を変更。
!
! ┌ i31→┐ 上の回路と等価な i2 =(i31+i21)*SQR(L1/L2)
! ┌→┐i21
! ┌─┬─┐ (i31の網路) R2*L1/L2*(i31+i21) +r(t)*i31= E
! │ L1 R2*L1/L2 (i21の網路) R2*L1/L2*(i31+i21) +L1*(di21/dt)= 0
! E ├─┘
! │ r(t)=R1*(1+sin(w*t))
! └─┘
! i31= (E-R2*L1/L2*i21) /(r(t)+R2*L1/L2)
! E+L1*(di21/dt)= r(t)*i31
! E+L1*(di21/dt)= r(t)*(E-R2*L1/L2*i21) /(r(t)+R2*L1/L2)
! (
! )
!問題の無い 微分方程式 f21(t, i21)= (di21/dt)= -(E+r(t)*i21) /(L2/R2*r(t)+L1)
!-------------------------------
LET E=10
LET R1=1000
LET L1=20
LET L2=20
LET R2=1000
LET M=SQR(L1*L2) !結合係数 k=1
!
LET b=1
LET w=2*PI*1 !1Hz
DEF r(t)=R1*(b+SIN(w*t))
!
IF laplace_ON=1 THEN
LET R1=30
LET R2=1e9
END IF
!
!-----ルンゲ・クッタ1
DEF f1(t,i1)=( E-r(t)*i1+M*f2_ )/L1 ! f2_…直接のf2()は、不可
DEF f2(t,i2)=( M*f1_-R2*i2 )/L2 ! f1_…直接のf1()は、不可
SUB RungeKutta_1(t,i1,i2)
LET k1=f1(t,i1)
LET k2=f1(t+dt/2, i1+k1*dt/2)
LET k3=f1(t+dt/2, i1+k2*dt/2)
LET k4=f1(t+dt, i1+k3*dt )
LET i1=i1+(k1+2*k2+2*k3+k4)*dt/6
LET f1_=f1(t,i1) ! f1_…f1()のバッファ
!
LET k1=f2(t,i2)
LET k2=f2(t+dt/2, i2+k1*dt/2)
LET k3=f2(t+dt/2, i2+k2*dt/2)
LET k4=f2(t+dt, i2+k3*dt )
LET i2=i2+(k1+2*k2+2*k3+k4)*dt/6
LET f2_=f2(t,i2) ! f2_…f2()のバッファ
END SUB
!-----ルンゲ・クッタ2
DEF i31=(E-R2*L1/L2*i21)/(r(t)+R2*L1/L2)
DEF f21(t,i21)=-(E+r(t)*i21)/(L2/R2*r(t)+L1)
DEF i20=(i31+i21)*SQR(L1/L2)
SUB RungeKutta_2(t,i21)
LET k1=f21(t,i21)
LET k2=f21(t+dt/2, i21+k1*dt/2)
LET k3=f21(t+dt/2, i21+k2*dt/2)
LET k4=f21(t+dt, i21+k3*dt )
LET i21=i21+(k1+2*k2+2*k3+k4)*dt/6
END SUB
!-----ラプラス逆変換
DIM Xr(5)
! xr(0)=0 …根は6個、0は自明で因数分解から除いた。
LET Xr(1)=-R1*b/L1
LET Xr(2)=COMPLEX(0,w)
LET Xr(3)=COMPLEX(-R1*b/L1,w)
LET Xr(4)=COMPLEX(0,-w)
LET Xr(5)=COMPLEX(-R1*b/L1,-w)
FOR j=1 TO 5
PRINT Xr(j)
NEXT j
DEF Gs(s)=E/L1*( (s^2+w^2)*((s+R1*b/L1)^2+w^2) -R1/L1*s*w*(2*s+R1*b/L1) )*EXP(s*t)
DEF k_0=Gs(0 )/ ( (0 -Xr(1))*(0 -Xr(2))*(0 -Xr(3))*(0 -Xr(4))*(0 -Xr(5)) )
DEF k_1=Gs(Xr(1))/ ( Xr(1) *(Xr(1)-Xr(2))*(Xr(1)-Xr(3))*(Xr(1)-Xr(4))*(Xr(1)-Xr(5)) )
DEF k_2=Gs(Xr(2))/ ( Xr(2)*(Xr(2)-Xr(1)) *(Xr(2)-Xr(3))*(Xr(2)-Xr(4))*(Xr(2)-Xr(5)) )
DEF k_3=Gs(Xr(3))/ ( Xr(3)*(Xr(3)-Xr(1))*(Xr(3)-Xr(2)) *(Xr(3)-Xr(4))*(Xr(3)-Xr(5)) )
DEF k_4=Gs(Xr(4))/ ( Xr(4)*(Xr(4)-Xr(1))*(Xr(4)-Xr(2))*(Xr(4)-Xr(3)) *(Xr(4)-Xr(5)) )
DEF k_5=Gs(Xr(5))/ ( Xr(5)*(Xr(5)-Xr(1))*(Xr(5)-Xr(2))*(Xr(5)-Xr(3))*(Xr(5)-Xr(4)) )
DEF k0_5=re(k_0+k_1+k_2+k_3+k_4+k_5) !留数の和
!-----run
SET TEXT background "OPAQUE"
DIM baki(10),bakv(10) ! drawing channels
!
FOR dt=0.0105 TO 0.000499 STEP -0.001 !演算ピッチ sec. pitch time
IF laplace_ON=1 THEN LET dt=.0005
SET DRAW mode hidden
CLEAR
SET DRAW mode explicit
LET t=0 !計算開始 sec. calculation start
LET ts=0 !描画開始 sec. drawing start
LET tw=3 !描画時間 sec. drawing time
LET Vw=28 !+目盛上限(上側グラフ)1の倍数、Volt.Ampere. maximum scale
LET ofs=15 !+目盛上限(下側グラフ)5の倍数、Under_Graph offset !CEIL(Vw/10)*5
!
LET i21= -E/R1 ! ルンゲ・クッタ2 初期値( i1=i31←i21, i2=i20←i21+i31) at t=0
LET i1=i31 !┐
LET i2=i20 !┼ルンゲ・クッタ1 初期値! at t=0
LET f2_=f2(t,i2) !┘
!
IF laplace_ON=1 THEN LET i21=0
!
SET WINDOW -.06*tw, tw, -Vw,Vw
SET COLOR MIX(15) .5,.5,.5
DRAW grid(1,5)
PLOT TEXT,AT .1,Vw*0.92,USING"計算間隔=#.###### 秒。 計算開始後###.### 秒からの描画":dt,ts
PLOT TEXT,AT .1,Vw*0.86,USING"ω=#.##rad/s E=##V L1=##H L2=##H k=1 R1=####Ω R2=####Ω":w,E,L1,L2,R1,R2
PLOT TEXT,AT .1,-0.1*Vw:"r(t)="& STR$(R1)& "*("& STR$(b)& "+sinωt)"
DO
IF laplace_ON=1 THEN
!-----ラプラス
CALL Grph( "green","i1(x20mA)", K0_5*50, "gray","v1(x1V)", K0_5*r(t) , 8, 0)
ELSE
!-----ルンゲ・クッタ1
CALL Grph( "blue","i1(x20mA)", i1*50 , "red","v1(x1V)",r(t)*i1 , 1, 0)
CALL Grph( "blue","i1(x20mA)", i1*50 , "red","v1(x1V)", E-(L1*f1_-M*f2_), 2, 0)
CALL Grph( "blue","i2(x2mA)" ,-i2*500, "red","v2(x1V)", L2*f2_-M*f1_ , 3, ofs )
CALL Grph( "blue","i2(x2mA)" ,-i2*500, "red","v2(x1V)",-R2*i2 , 4, ofs )
CALL RungeKutta_1(t,i1,i2)
END IF
!-----ルンゲ・クッタ2
CALL Grph( "blue","i1(x20mA)", i31*50 , "red","v1(x1V)", r(t)*i31 , 5, 0)
CALL Grph( "blue","i1(x20mA)", i31*50 , "red","v1(x1V)", E+L1*f21(t,i21), 6, 0)
CALL Grph( "blue","i2(x2mA)" ,-i20*500, "red","v2(x1V)",-R2*i20 , 7, ofs)
CALL RungeKutta_2(t, i21)
!-----
LET t=t+dt
LOOP UNTIL ts+tw< t
NEXT dt
!-----draw
SUB Grph( icol$,i$,i, vcol$,v$,v, n, ofs)
SET WINDOW -.06*tw, tw, -Vw+ofs, Vw+ofs
IF ts< t THEN
SET LINE COLOR vcol$
PLOT LINES :t-ts-dt, bakv(n); t-ts, v
SET LINE COLOR icol$
PLOT LINES :t-ts-dt, baki(n); t-ts, i
ELSEIF t=ts THEN
SET TEXT COLOR vcol$
PLOT TEXT,AT .1, .17*Vw :v$
SET TEXT COLOR icol$
PLOT TEXT,AT .1, .11*Vw :i$
IF ofs<>0 THEN
SET LINE COLOR 15
PLOT LINES :-.06*tw, 0; tw,0
SET TEXT COLOR 15
ASK PIXEL SIZE (0,0 ;tw,Vw) px,py
FOR j=5*INT((-Vw+ofs)/5+1) TO ofs-1 STEP 5
PLOT TEXT,AT -22*tw/px, j-15*Vw/py, USING"###":j
NEXT j
END IF
SET TEXT COLOR 1
END IF
LET baki(n)=i
LET bakv(n)=v
END SUB
END
|
|