PLOT LINES がおかしい

 投稿者:島村1243  投稿日:2020年 2月27日(木)10時10分17秒
  十進BASIC-v7.8.5.4インストーラ版を、Windows2000(32bit)とWindowsXP(32bit)にインストールして使用しています。
PLOT LINES で黒の横軸線を1本引いた後に、黒曲線と赤曲線を描き終わりました。
それに続けて、set line colorで緑を設定し緑の曲線を描いたら、前に描いた黒の横軸線1本の色が緑に変化しました。横軸線は2度書きしていません。プログラムを下記に示しますが、BASICの仕様でしょうか? 状況はどちらのOS上でも同じで、Linux版32bitのv8.0.1.5も同様です。

OPTION ARITHMETIC COMPLEX

!*** 計算条件の入力 ***********
LET Hz =1       !描画する電源のサイクル数[Hz]
LET f = 50      !電源周波数[Hz]
LET V=1         !電源電圧[p.u] v=Vcos(wt+fai)
LET fai=45      !電源投入位相角[度]
LET R=10        !抵抗[Ω]
LET L=0.5       !インダクタンス[H]
LET C=4.946E-4    !コンデンサ静電容量[F]
LET bunkatu =1000   !1[Hz]の分割数設定
!*** ここまで ****************

!*** 諸量内部算出
LET j=SQR(-1)
LET w=2*PI*f
LET fai = RAD(fai)
LET dt =1/f/bunkatu      !計算微分時間[秒]を設定
LET Nmax=Hz*bunkatu       !計算点数
SET WINDOW 0,Nmax,-1.8,1.8
LET Zst=SQR(R^2+(w*L-1/w/C)^2)
LET Ist=V/Zst
LET alfa = -R / 2 /L
LET beta = SQR(1/C /L - alfa^2)
LET delta1=alfa+j*beta
LET delta2=alfa-j*beta
LET K1 =delta1/(delta1-delta2)/(delta1-j*w)
LET K2 =delta2/(delta2-delta1)/(delta2-j*w)
LET K3 =j*w/(j*w-delta1)/(j*w-delta2)
LET H1 =delta1/(delta1-j*w)/(delta1-delta2)
LET H2 =delta2/(delta2-j*w)/(delta2-delta1)
LET H3 =j*w/(j*w-delta1)/(j*w-delta2)

LET ipu_=0
LET Hipu_=0
LET vpu_=V*COS(fai)
LET ten_=0

SET LINE COLOR "black"
PLOT LINES:0,0;Nmax,0 !<---横軸線を黒で描画

FOR n=0 TO  Nmax
   LET ten=n
   LET t = n * dt
   LET wt=w*t
   LET i1 =K1* EXP(delta1*t)
   LET i2 =K2* EXP(delta2*t)
   LET i3 =K3*EXP(j*wt)
   LET i = EXP(j*fai)*V/L*(i1 +i2 + i3)
   LET ipu=Re(i)/Ist
   LET vpu=V*COS(wt+fai)

   !*** 電圧・電流描画指示 ***
   SET LINE COLOR "black"
   PLOT LINES: ten_,vpu_;ten,vpu   !電源電圧波形
   SET LINE COLOR "red"
   PLOT LINES: ten_,ipu_;ten,ipu   !電流波形
   LET ten_=ten
   LET ipu_=ipu
   LET vpu_=vpu
NEXT N
PRINT "【2】電源電圧曲線と実電流曲線を描きました。"
PRINT "黒色曲線は印加した電源電圧の波形です。"

pause "この描画を保持し、演算子法に基づく実電流の厳密解曲線も描きますか?"

FOR n=0 TO  Nmax
   LET ten=n
   LET t = n * dt
   LET wt=w*t
   LET Hi1 =H1* EXP(delta1*t)
   LET Hi2 =H2* EXP(delta2*t)
   LET Hi3 =H3*EXP(j*wt)
   LET Hi = EXP(j*fai)*V/L*(Hi1 +Hi2 + Hi3)
   LET Hipu=Re(Hi)/Ist
   !*** 電流描画指示 ***
   SET LINE COLOR "green"
   PLOT LINES: ten_,Hipu_;ten,Hipu   !電流波形
   LET ten_=ten
   LET Hipu_=Hipu
NEXT N
PRINT "緑色曲線は変換法による実電流波形です。"

END
 

Re: PLOT LINES がおかしい

 投稿者:SHIRAISHI Kazuo  投稿日:2020年 2月27日(木)13時01分32秒
     SET LINE COLOR "green"

   PLOT LINES: ten_,Hipu_;ten,Hipu   !電流波形
の間に
PRINT ten_,Hipu_,ten,Hipu
を挿入して調べてみると
最初の行が
1000                    0                       0                       1.04170364486623E-16
となるので,正しく動作していると思います。
(前のten_が残っているのが原因)

PLOT POINTSを使って

SET LINE COLOR "black"
PLOT LINES:0,0;Nmax,0 !<---横軸線を黒で描画
SET POINT STYLE 1
FOR n=0 TO  Nmax
   LET ten=n
   LET t = n * dt
   LET wt=w*t
   LET i1 =K1* EXP(delta1*t)
   LET i2 =K2* EXP(delta2*t)
   LET i3 =K3*EXP(j*wt)
   LET i = EXP(j*fai)*V/L*(i1 +i2 + i3)
   LET ipu=Re(i)/Ist
   LET vpu=V*COS(wt+fai)

   !*** 電圧・電流描画指示 ***

   SET POINT COLOR "black"
   PLOT POINTS: ten,vpu   !電源電圧波形
   SET POINT COLOR "red"
   PLOT POINTS:ten,ipu   !電流波形

NEXT N
PRINT "【2】電源電圧曲線と実電流曲線を描きました。"
PRINT "黒色曲線は印加した電源電圧の波形です。"

pause "この描画を保持し、演算子法に基づく実電流の厳密解曲線も描きますか?"

FOR n=0 TO  Nmax
   LET ten=n
   LET t = n * dt
   LET wt=w*t
   LET Hi1 =H1* EXP(delta1*t)
   LET Hi2 =H2* EXP(delta2*t)
   LET Hi3 =H3*EXP(j*wt)
   LET Hi = EXP(j*fai)*V/L*(Hi1 +Hi2 + Hi3)
   LET Hipu=Re(Hi)/Ist
   !*** 電流描画指示 ***
   SET POINT COLOR "green"
   PLOT POINTS: ten,Hipu   !電流波形

NEXT N
PRINT "緑色曲線は変換法による実電流波形です。"

としたほうがアルゴリズム的に簡潔に書けると思います。

http://hp.vector.co.jp/authors/VA008683/

 

Re: PLOT LINES がおかしい

 投稿者:島村1243  投稿日:2020年 2月27日(木)14時43分19秒
  > No.4808[元記事へ]

SHIRAISHI Kazuo 先生へのお返事です。

> (前のten_が残っているのが原因)

先生のご回答を読み、下記のようにLET ten_=0を追加したら、正常になりました。

pause "この描画を保持し、・・・描きますか?"
LET ten_=0 <---これを追加した。
FOR n=0 TO  Nmax
以下省略

素早いご回答・ご教示を賜り有難う御座いました。
 

戻る