teacup. [ 掲示板 ] [ 掲示板作成 ] [ 有料掲示板 ] [ ブログ ]

 <思いやりのあるコミュニティ宣言>
 teacup.掲示板は、皆様の権利を守りながら、思いやり、温かみのあるコミュニティづくりを応援します。
 いつもご協力いただきありがとうございます。

 投稿者
  題名
  内容 入力補助画像・ファイル<IMG>タグが利用可能です。(詳細)
    
 URL
[ ケータイで使う ] [ BBSティッカー ] [ 書込み通知 ] [ 検索 ]

スレッド一覧

  1. スレッドが使えます(2)
  2. Apple Silicon (M1プロセッサ)での動作(7)
  3. Full BASIC互換ライブラリ(8)
  4. Paract BASIC(22)
  5. Amusement_Program(10)
  6. 改修予定のJIS非互換(3)
  7. 複数ページ長編プログラム(新規投稿)(16)
  8. 「十進BASIC第2掲示板」投稿記事リスト(17)
  9. 「十進BASIC掲示板過去ログ」インデックス(トピック)(17)
  10. 人の色覚の数理(14)
  11. 「十進BASIC掲示板過去ログ」インデックス(ツリー)(91)
スレッド一覧(全11)  他のスレッドを探す  スレッド作成

*掲示板をお持ちでない方へ、まずは掲示板を作成しましょう。無料掲示板作成


誤差逆伝搬法

 投稿者:しばっち  投稿日:2021年 1月27日(水)19時59分16秒
返信・引用
  誤差逆伝搬法による多層パーセプトロン(ニューラルネットワーク)のテスト

https://qiita.com/Ugo-Nama/items/04814a13c9ea84978a4c
https://qiita.com/43x2/items/50b55623c890564f1893

https://qiita.com/tky1117/items/ffc367e52c4a04cffa1d
https://qiita.com/tky1117/items/d2847ac2c84858c7307b
https://qiita.com/tky1117/items/c2c69a5f69d9cf8ca751
https://qiita.com/tky1117/items/7cdebb370e0da7ba6f71
https://qiita.com/tky1117/items/d845040be4a13dd1133f
https://qiita.com/tky1117/items/83403794280e74357660
https://qiita.com/tky1117/items/bbf250bcbd4ddae2d32e
https://qiita.com/tky1117/items/867f311b91fa927cacd2


下記URLからの移植です。残念ながら質問されてもわかりません。
https://qiita.com/ufoo68/items/9e4ca04578ba0f5fa5ff

誤差逆伝搬法はAI(人口知能)や機械学習といった技術に使われています。
下記プログラムでは学習量を30万epochで打ち切っています。2進モードで実行してください。
XOR問題について学習させ解かせています。

OPTION BASE 0
RANDOMIZE
LET NUM_INPUT=2
LET NUM_HIDDEN=20
DIM TRAIN_X(3,NUM_INPUT),D(3)
MAT READ TRAIN_X,D
DATA 0, 0, -1,0, 1, -1,1, 0, -1,1, 1, -1
DATA 0, 1, 1, 0
DIM W(NUM_HIDDEN,NUM_INPUT),V(NUM_HIDDEN),Y(4,NUM_HIDDEN),Z(4)
LET ETA = 0.1
LET EPOCH = 300000
FOR L=0 TO NUM_HIDDEN
   FOR I=0 TO NUM_INPUT
      LET W(L,I) = RND
   NEXT I
NEXT L
FOR I=0 TO NUM_HIDDEN
   LET V(I) = RND
NEXT I
FOR K=0 TO EPOCH
   FOR J=0 TO 3
      FOR L=0 TO NUM_HIDDEN-1
         FOR I=0 TO NUM_INPUT
            LET TMP = TMP+TRAIN_X(J,I) * W(L,I)
         NEXT I
         LET Y(J,L) = SIGMOID(TMP)
         LET TMP = 0
      NEXT L
      LET Y(J,NUM_HIDDEN) = -1
      FOR I=0 TO NUM_HIDDEN
         LET TMP = TMP+Y(J,I) * V(I)
      NEXT I
      LET Z(J) = SIGMOID(TMP)
      LET TMP = 0
      FOR I=0 TO NUM_HIDDEN
         LET V(I) = V(I) - ETA * Y(J,I) * DIFFSIGMOID(Z(J)) * (Z(J) - D(J))
      NEXT I
      FOR L=0 TO NUM_INPUT
         FOR I=0 TO NUM_HIDDEN
            LET W(I,L) = W(I,L) - ETA * TRAIN_X(J,L) * DIFFSIGMOID(Y(J,I)) * DIFFSIGMOID(Z(J)) * (Z(J) - D(J)) * V(I)
         NEXT I
      NEXT L
   NEXT J
   IF MOD(K , 10000) =0 THEN
      PRINT "z=";
      FOR I=0 TO 3
         PRINT Z(I);
      NEXT I
      PRINT "epoch:";K
   END IF
NEXT K
END

EXTERNAL  FUNCTION SIGMOID(X)
LET SIGMOID=1/(1+EXP(-X))
END FUNCTION

EXTERNAL  FUNCTION DIFFSIGMOID(X)
LET A = 0.1
LET DIFFSIGMOID=A*X*(1-X)
END FUNCTION
 
 

ベイズの定理

 投稿者:しばっち  投稿日:2021年 1月27日(水)19時55分22秒
返信・引用
  ベイズの定理

下記のプログラムはわざわざ投稿するほどのものではありませんが
AI(人口知能)や機械学習、ディープラーニングといったことに興味が
ある方は「ベイズの定理」というキーワードは覚えていても損はないかと思います。

これは迷惑メールフィルタ等に利用されているようです。
ベイズの定理は確率を計算するものですが、更新していくことで精度を上げていく
ことができるものです。

https://ja.wikipedia.org/wiki/ベイズの定理
https://qiita.com/maxima/items/eb4035666fbf407872f1


日本人の0.1%が罹患しているある病気について考えます。
この病気の検査方法では、実際に病気に罹患している人が陽性と判定される確率が95%とし
逆に罹患していない人が陽性と判定される確率は3%であるとします。
ある人がこの病気の検査を受けて陽性という判定を受けた時、本当にこの病気に罹患している確率はいくらでしょうか。

病気に罹患している確率:P(B1) 0.1%
病気に罹患していない確率:P(B2) 1-P(B1)
実際に罹患している人が検査で陽性となる確率:P(A|B1) 95%
実際に罹患していない人が検査で陽性となる確率:P(A|B2) 3%


LET P_B1=.1/100
LET P_B2=1-P_B1
LET P_AB1=95/100
LET P_AB2=3/100
FOR I=1 TO 5
   LET P_B1A=P_B1*P_AB1/(P_B1*P_AB1+P_B2*P_AB2)
   PRINT P_B1A*100;"%"
   LET P_B1=P_B1A !'確率の更新
NEXT I
END

    実行結果

3.07244501940492 %
49.3392530960996 %
93.9902894677677 %
96.7525492946574 %
96.8423355652092 %

計算結果、この病気に罹患している確率はわずか3%程ということです。
これは病気に罹患している確率が0.1%から3%に更新されたことになります。
そして再検査後もまた陽性と判定を受けたとき、49%になるということです。
 

重回帰のソフト

 投稿者:大熊 正  投稿日:2021年 1月10日(日)17時51分32秒
返信・引用
  しばっち 様  大熊正 元記事4889

早速御返事を頂き有難うございます。これから、色いろ勉強してゆきます。
グラフについてのSHIRAISHI様はじめ皆さまに感謝いたします。
10進について、急に物知りになった気がして、十分満足しております。
やってみてまた、疑問等が出てきましたら、その時はまたよろしくお願いいたします。

敬具   大熊正
 

Re: 複数のグラフ

 投稿者:しばっち  投稿日:2021年 1月10日(日)12時33分23秒
返信・引用
  > No.4899[元記事へ]

大熊 正さんへのお返事です。

> どなたか、重回帰の解説と10進でのソフトがあれば,御教授いただきたく
> お願いいたします。   敬具

https://6317.teacup.com/basic/bbs/1113
https://6317.teacup.com/basic/bbs/1121

下記のプログラムは任意の(変数にX1,X2を持つ)回帰式が定義できますが
その回帰式を用いてテストデータを生成しているので
実際のデータで運用する場合は注意(初期値設定や収束誤差等)が必要です。


DIM U(3,3),V(3),W(3)
PUBLIC NUMERIC X1(20),X2(20),Y(20),N
RANDOMIZE
LET N=15
LET A0=RND !'テスト係数
LET B0=RND
LET C0=RND
FOR I=1 TO N
   LET X1(I)=I/5
   LET X2(I)=I^2/10
   LET Y(I)=FF(A0,B0,C0,X1(I),X2(I)) !'テストデータ作成
NEXT I
LET A=1 !'初期値
LET B=1
LET C=1
LET EPS=1E-8 !'収束誤差
DO
   LET U(1,1)=DIFF(A,2,B,0,C,0)
   LET U(1,2)=DIFF(A,1,B,1,C,0)
   LET U(1,3)=DIFF(A,1,B,0,C,1)
   LET U(2,1)=DIFF(A,1,B,1,C,0)
   LET U(2,2)=DIFF(A,0,B,2,C,0)
   LET U(2,3)=DIFF(A,0,B,1,C,1)
   LET U(3,1)=DIFF(A,1,B,0,C,1)
   LET U(3,2)=DIFF(A,0,B,1,C,1)
   LET U(3,3)=DIFF(A,0,B,0,C,2)
   LET V(1)=-DIFF(A,1,B,0,C,0)
   LET V(2)=-DIFF(A,0,B,1,C,0)
   LET V(3)=-DIFF(A,0,B,0,C,1)
   MAT U=INV(U)
   MAT W=U*V
   LET A=A+W(1)
   LET B=B+W(2)
   LET C=C+W(3)
   LET L=L+1
   IF W(1)^2+W(2)^2+W(3)^2<EPS THEN EXIT DO
   IF L>100 THEN
      PRINT "収束しません"
      STOP
   END IF
LOOP
PRINT L
PRINT "A0=";A0,"B0=";B0,"C0=";C0
PRINT " A=";A," B=";B," C=";C !'求めた係数
LET P$="####.########"
FOR I=1 TO N
   PRINT "X1=";
   PRINT USING P$:X1(I);
   PRINT "   X2=";
   PRINT USING P$:X2(I);
   PRINT "   Y=";
   PRINT USING P$:Y(I);
   PRINT "   ^Y=";
   PRINT USING P$:FF(A,B,C,X1(I),X2(I))
NEXT I
END

EXTERNAL FUNCTION FF(A,B,C,X1,X2) !'パラメータA,B,Cを持ち変数X1,X2の任意の回帰式(重回帰式)
LET FF=A+B*X1+C*X2
!'LET FF=A*EXP(B*X1)*EXP(C*X2)
!'LET FF=A+B*LOG(X1)+C*LOG(X2)
!'LET FF=A*B^X1*C^X2
!'LET FF=A*X1^B*X2^C
END FUNCTION

EXTERNAL FUNCTION FUNC(A,B,C)
FOR I=1 TO N
   LET S=S+(Y(I)-FF(A,B,C,X1(I),X2(I)))^2 !'差の2乗和(A=A0,B=B0,C=C0なら最小値S=0)
NEXT I
LET FUNC=S
END FUNCTION

EXTERNAL FUNCTION DIFF(X,M,Y,N,Z,O) !'数値偏微分
LET H=1/1024
IF M>0 THEN
   LET DIFF=(-DIFF(X+2*H,M-1,Y,N,Z,O)+8*DIFF(X+H,M-1,Y,N,Z,O)-8*DIFF(X-H,M-1,Y,N,Z,O)+DIFF(X-2*H,M-1,Y,N,Z,O))/(12*H)
   EXIT FUNCTION
END IF
IF N>0 THEN
   LET DIFF=(-DIFF(X,M,Y+2*H,N-1,Z,O)+8*DIFF(X,M,Y+H,N-1,Z,O)-8*DIFF(X,M,Y-H,N-1,Z,O)+DIFF(X,M,Y-2*H,N-1,Z,O))/(12*H)
   EXIT FUNCTION
END IF
IF O>0 THEN
   LET DIFF=(-DIFF(X,M,Y,N,Z+2*H,O-1)+8*DIFF(X,M,Y,N,Z+H,O-1)-8*DIFF(X,M,Y,N,Z-H,O-1)+DIFF(X,M,Y,N,Z-2*H,O-1))/(12*H)
   EXIT FUNCTION
END IF
IF M=0 OR N=0 OR O=0 THEN LET DIFF=FUNC(X,Y,Z)
END FUNCTION
 

複数のグラフ

 投稿者:大熊 正  投稿日:2021年 1月 8日(金)12時48分1秒
返信・引用
  SHIRAISHI Kazuo 様     大熊正 元記事4897

お忙しい所、すぐに御返事いただき本当に有難うございました。
MATでのソフトでやってみた所、これが私の望んでいたものだと分かりました。
10進BASICがかなりのことができる事が分かり、これからも精進いたします。
此の投稿覧にシバッチさんのロジスチック関連の投稿があり、いじっています。
どなたか、重回帰の解説と10進でのソフトがあれば,御教授いただきたく
お願いいたします。   敬具
 

Re: 複数のグラフ

 投稿者:SHIRAISHI Kazuo  投稿日:2021年 1月 8日(金)08時00分39秒
返信・引用
  > No.4897[元記事へ]

数字キーの1,2を押すことで表示を切り替えます。
配列の大きさは大きめに確保しておいて,
座標を配列にセットし,
配列と有効な座標の個数を副プログラムdisplayに引き渡し
MAT PLOT LINES, LIMIT文で描画します。

100 OPTION ANGLE DEGREES
110 DIM x1(10000),y1(10000),x2(10000),y2(10000)
120 LET i1=0
130 FOR x=-4 TO 4 STEP 0.01
140    LET i1=i1+1
150    LET x1(i1)=x
160    LET y1(i1)=x^3-3*x
170 NEXT x
180 LET i2=0
190 FOR x=-180 TO 540
200    LET i2=i2+1
210    LET x2(i2)=x
220    LET y2(i2)=SIN(x)
230 NEXT x
240 DO
250    CHARACTER INPUT c$
260    SELECT CASE c$
270    CASE "1"
280       CALL DISPLAY(-4,4,-4,4,x1,y1,i1,1)
290    CASE "2"
300       CALL DISPLAY(-180,540,-4,4,x2,y2,i2,90)
310    CASE ELSE
320       EXIT DO
330    END SELECT
340 LOOP
350 SUB DISPLAY(l,r,b,t,xx(),yy(),i,s)
360    CLEAR
370    SET WINDOW l,r,b,t
380    DRAW grid(s,1)
390    MAT PLOT LINES ,LIMIT i: xx, yy
400 END SUB
410 END

 

複数のグラフ

 投稿者:大熊 正  投稿日:2021年 1月 7日(木)15時41分19秒
返信・引用
  SHRAISHI Kazuo 様   元記事No4894
お忙しいところ、回答をいただきまして有難うございます。早速やってみました。
私の希望はもともと標準画面が私には小さいので、出来ましたら、同じ大きさで本のページをめくるようにはできないでしょうか。勝手でもうしわけありませんが、MAT PLOT の例で御教授お願いいたします。
    敬具    大熊正
 

Re: 複数のグラフ

 投稿者:SHIRAISHI Kazuo  投稿日:2021年 1月 6日(水)20時26分43秒
返信・引用
  > No.4894[元記事へ]

複数のグラフを同時に表示するのでなく,
切り替えて表示したいのであれば,
データを配列に入れておいてMAT PLOT文で描く手もあります。


 

Re: 複数のグラフ

 投稿者:SHIRAISHI Kazuo  投稿日:2021年 1月 6日(水)13時45分59秒
返信・引用
  JIS Full BASIC に Viewportに関する規定があります。
十進BASICのヘルプだと,
https://decimalbasic.ninja-web.net/BASICHelp/html/basi8sc4.htm
が該当します。
通常,Viewportの外への描画は無視されます。

100 OPTION ANGLE DEGREES
110 SET VIEWPORT 0.5, 1, 0.5, 1
120 SET WINDOW -4,4,-4,4
130 DRAW GRID
140 FOR x=-4 TO 4 STEP 0.01
150    PLOT LINES:x,x^3-3*x;
160 NEXT x
170 SET VIEWPORT 0,0.5 , 0,0.5
180 SET WINDOW -180,540,-4,4
190 DRAW GRID(90,1)
200 FOR x=-180 TO 540
210    PLOT LINES:x,SIN(x);
220 NEXT x
230 END
 

複数のグラフ

 投稿者:大熊 正  投稿日:2021年 1月 5日(火)19時24分13秒
返信・引用
   10進BASICをコロナの影響で自宅で再び再開しました。
 一つのプラグラムで、グラフを何枚も作りたいのですがどのようにするのですか。
 ①電子回路で、1つ目は周波数特性、・・・何かボタンを押す等したら位相特性。
  プログラムは元のままの名前で、エクセルみたいにやりたい。
  一つのグラフで同時に表示は、以前に教わりました。

 ②コロナでロジスチック曲線や重回帰等を知りました。
  10進BASICで参考にすべきプログラムや解析。解説等があれば教えてください。

  そして、多分理解には同時に何枚ものグラフが必要なので①の成果を反映したい。
 

判定式の否定

 投稿者:しばっち  投稿日:2021年 1月 1日(金)18時16分59秒
返信・引用
  唐突ですが問題です。

IF A < 0 AND B = 0 OR C >= 5 THEN

この判定式の否定文、つまり IF NOT(A < 0 AND B = 0 OR C >= 5) THEN と
同等となる判定式はどうなるでしょう?

これは、IF 判定式 THEN 命令1 ELSE 命令2

命令1が不要になった場合等にIF NOT(判定式) THEN 命令2
以外の書き方を求めます。


IF 判定式 THEN ELSE 命令2
という書き方もできるようですが、ここではあくまでこの判定式を
否定した書き方を模索します。

これには、一定の規則性があります。

まず、
IF A = 0 THEN です。

この否定文は
IF NOT(A = 0) THEN ですがこれと同等の判定式は
IF A <> 0 THEN です。

また、IF A <> 0 THEN の否定文は
IF A = 0 THEN です。

次は
IF A < 0 THEN です。

この否定文は
IF NOT(A < 0) THEN ですが
IF A > 0 THEN ではありません。
これではA = 0 の場合が含まれていません。

IF A < 0 THEN の否定文は
IF A >= 0 THEN となります。

また
IF A >= 0 THEN の否定文は
IF A < 0 THEN です。

そして
IF A > 0 THEN の否定文は
IF A <= 0 THEN です。



※ ここまでのまとめ

A = B  の否定は A <> B  (A >< B)
A <> B の否定は A = B
A < B  の否定は A >= B  (A => B)
A > B  の否定は A <= B  (A =< B)
A <= B の否定は A > B
A >= B の否定は A < B


では次の2項の判定式ではどうなるでしょうか?
IF A = 0 AND B = 0 THEN

この否定文は
IF NOT(A = 0 AND B = 0) THEN ですが、先程の例から
IF A <> 0 AND B <> 0 THEN でしょうか?

A=0とB=0 以外の場合ですから
A=1,B=2 の場合はうまくいきそうです。

ですが IF A = 0 AND B = 0 THEN はA = 0でもB = 1では成り立ちません。
A=0 AND B=0の否定文ではA=0,B=1が成り立たなければなりません。

IF A <> 0 AND B <> 0 THEN ではA = 0の時、この A <> 0が成り立たずこの式は真になりません。
ですが

IF A <> 0 OR B <> 0 THEN ではA = 0でもB = 1なら成立するので真になります。
つまりANDをORに変えればうまくいきそうです。

そして
IF A <> 0 OR B <> 0 THEN の否定文 IF NOT(A <> 0 OR B <> 0) THEN は
IF A = 0 AND B = 0 THEN と同等になります。

次の6パターンを試してみると全て一致しているのが分かります。

FOR M=1 TO 6
   FOR D=0 TO 1
      FOR C=0 TO 1
         FOR B=0 TO 1
            FOR A=0 TO 1
               SELECT CASE M
               CASE 1
                  IF NOT(A = B OR C = D) THEN PRINT "NOT(A = B OR C = D) ";A;B;C;D
                  IF A <> B AND C <> D THEN   PRINT "A <> B AND C <> D   ";A;B;C;D
               CASE 2
                  IF NOT(A = B OR C <> D) THEN PRINT "NOT(A = B OR C <> D) ";A;B;C;D
                  IF A <> B AND C = D THEN     PRINT "A <> B AND C = D     ";A;B;C;D
               CASE 3
                  IF NOT(A < B OR C <> D) THEN PRINT "NOT(A < B OR C <> D) ";A;B;C;D
                  IF A >= B AND C = D THEN     PRINT "A >= B AND C = D     ";A;B;C;D
               CASE 4
                  IF NOT(A > B OR C = D) THEN PRINT "NOT(A > B OR C = D) ";A;B;C;D
                  IF A <= B AND C <> D THEN   PRINT "A <= B AND C <> D   ";A;B;C;D
               CASE 5
                  IF NOT(A <= B OR C < D) THEN PRINT "NOT(A <= B OR C < D) ";A;B;C;D
                  IF A > B AND C >= D THEN     PRINT "A > B AND C >= D     ";A;B;C;D
               CASE 6
                  IF NOT(A >= B OR  C<= D) THEN PRINT "NOT( A>= B OR C <= D) ";A;B;C;D
                  IF A < B AND C > D THEN       PRINT "A < B AND C > D       ";A;B;C;D
               END SELECT
            NEXT A
         NEXT B
      NEXT C
   NEXT D
   PRINT
NEXT M
END


否定文になると

AND は OR に
OR は AND に変わります。


では冒頭の問題を見てみましょう。
IF A < 0 AND B = 0 OR C >= 5 THEN

この否定文 IF NOT(A < 0 AND B = 0 OR C >= 5) THEN と同等の式はどうなるでしょうか?

これまでの例から

A < 0 は A >= 0 に
B = 0 は B <> 0 に
C >= 5 は C < 5 に
AND は OR に
OR を AND に変えて

IF A >= 0 OR B <> 0 AND C < 5 THEN と回答された方...




































































残念ながら間違いなのです。これは引っかけ問題なのです。


下記のプログラムを実行してみてください。

LET A=2
LET B=1
LET C=6
IF NOT(A < 0 AND B = 0 OR C >= 5) THEN PRINT "真 1" ELSE PRINT "偽 1"
IF A > =0 OR B <> 0 AND C < 5 THEN PRINT "真 2" ELSE PRINT "偽 2"
END


実は3項以上では注意点があります。










それはANDとORの優先順位です。

IF A < 0 AND B = 0 OR C >= 5 THEN これを正確に書くと
IF (A < 0 AND B = 0) OR C >= 5 THEN です。


よって正解は...


































IF (A >= 0 OR B <> 0) AND C < 5 THEN
になります。

これを間違えずに答えられた方はかなりのセンスの持ち主なのかもしれません。
チャン、チャン
 

フラクタル画像

 投稿者:しばっち  投稿日:2020年12月22日(火)19時51分7秒
返信・引用
  スライドバーでパラメータを操作できるようにしてみました。


OPTION ARITHMETIC COMPLEX
PUBLIC NUMERIC A,B,C,D,FL,XMIN,XMAX,YMIN,YMAX,X0,Y0
SET POINT STYLE 1
LOCATE VALUE NOWAIT(1),RANGE -1 TO 1,AT 0:AR
LOCATE VALUE NOWAIT(2),RANGE -1 TO 1,AT 0:AI
LOCATE VALUE NOWAIT(3),RANGE -1 TO 1,AT .5:BR
LOCATE VALUE NOWAIT(4),RANGE -1 TO 1,AT .288:BI
LOCATE VALUE NOWAIT(5),RANGE -1 TO 1,AT 0:CR
LOCATE VALUE NOWAIT(6),RANGE -1 TO 1,AT 0:CI
LOCATE VALUE NOWAIT(7),RANGE -1 TO 1,AT .5:DR
LOCATE VALUE NOWAIT(8),RANGE -1 TO 1,AT -.288:DI
LOCATE VALUE NOWAIT(9),RANGE -1 TO 1,AT 0:ZR
LOCATE VALUE NOWAIT(10),RANGE -1 TO 1,AT 0:ZI
LOCATE VALUE NOWAIT(11),RANGE .1 TO 2,AT 1:SCALE
DO
   LOCATE VALUE NOWAIT(1):AR
   LOCATE VALUE NOWAIT(2):AI
   LOCATE VALUE NOWAIT(3):BR
   LOCATE VALUE NOWAIT(4):BI
   LOCATE VALUE NOWAIT(5):CR
   LOCATE VALUE NOWAIT(6):CI
   LOCATE VALUE NOWAIT(7):DR
   LOCATE VALUE NOWAIT(8):DI
   LOCATE VALUE NOWAIT(9):ZR
   LOCATE VALUE NOWAIT(10):ZI
   LOCATE VALUE NOWAIT(11):SCALE
   LET XMIN=1E+10
   LET YMIN=XMIN
   LET XMAX=-1E+10
   LET YMAX=XMAX
   LET X0=0
   LET Y0=0
   LET FL=0
   LET N=10
   LET A=COMPLEX(AR,AI)
   LET B=COMPLEX(BR,BI)
   LET C=COMPLEX(CR,CI)
   LET D=COMPLEX(DR,DI)
   LET Z0=COMPLEX(ZR,ZI)
   CALL DRAW(N,Z0)
   LET XM=(XMAX-XMIN)/2*1.3
   LET YM=(YMAX-YMIN)/2*1.3
   LET X0=X0/2^N
   LET Y0=Y0/2^N
   SET WINDOW -MAX(XM,YM)*SCALE,MAX(XM,YM)*SCALE,-MAX(XM,YM)*SCALE,MAX(XM,YM)*SCALE
   DRAW GRID(MAX(XM,YM)*SCALE/5,MAX(XM,YM)*SCALE/5)
   LET FL=1
   CALL DRAW(16,Z0)
   ASK TEXT HEIGHT HEIGHT
   PLOT TEXT ,AT -MAX(XM,YM)*SCALE,MAX(XM,YM)*SCALE-1.5*HEIGHT:"A="&FORMAT$(A)
   PLOT TEXT ,AT -MAX(XM,YM)*SCALE,MAX(XM,YM)*SCALE-3*HEIGHT:"B="&FORMAT$(B)
   PLOT TEXT ,AT -MAX(XM,YM)*SCALE,MAX(XM,YM)*SCALE-4.5*HEIGHT:"C="&FORMAT$(C)
   PLOT TEXT ,AT -MAX(XM,YM)*SCALE,MAX(XM,YM)*SCALE-6*HEIGHT:"D="&FORMAT$(D)
   PLOT TEXT ,AT -MAX(XM,YM)*SCALE,MAX(XM,YM)*SCALE-7.5*HEIGHT:"Z0="&FORMAT$(Z0)
   SET DRAW MODE EXPLICIT
   WAIT DELAY .3
   SET DRAW MODE HIDDEN
   CLEAR
LOOP
END

EXTERNAL  FUNCTION FORMAT$(Z)
OPTION ARITHMETIC COMPLEX
IF IM(Z)<0 THEN LET SIGN$=" - " ELSE LET SIGN$=" + "
LET FORMAT$=USING$("-%.###",RE(Z))&SIGN$&USING$("%.###",ABS(IM(Z)))&"i"
END FUNCTION

EXTERNAL  SUB DRAW(N,Z)
OPTION ARITHMETIC COMPLEX
IF N>0 THEN
   CALL DRAW(N-1,A*Z+B*CONJ(Z))
   CALL DRAW(N-1,C*(Z-1)+D*(CONJ(Z)-1)+1)
   IF FL=0 THEN
      LET XMIN=MIN(XMIN,RE(Z))
      LET XMAX=MAX(XMAX,RE(Z))
      LET YMIN=MIN(YMIN,IM(Z))
      LET YMAX=MAX(YMAX,IM(Z))
      LET X0=X0+RE(Z)
      LET Y0=Y0+IM(Z)
   ELSE
      SET POINT COLOR 2
      PLOT POINTS:A*Z+B*CONJ(Z)-COMPLEX(X0,Y0)
      SET POINT COLOR 4
      PLOT POINTS:C*(Z-1)+D*(CONJ(Z)-1)+1-COMPLEX(X0,Y0)
   END IF
END IF
END SUB
 

フラクタル画像

 投稿者:しばっち  投稿日:2020年12月22日(火)19時46分6秒
返信・引用
  フラクタル画像
http://souzousha.iinaa.net/www/hata/Index.html

OPTION ARITHMETIC COMPLEX
PUBLIC NUMERIC A,B,C,D,FL,XMIN,XMAX,YMIN,YMAX,X0,Y0
SET POINT STYLE 1
SET TEXT COLOR 4
DO
   LET I=I+1
   LET XMIN=1E+10
   LET YMIN=XMIN
   LET XMAX=-1E+10
   LET YMAX=XMAX
   LET X0=0
   LET Y0=0
   LET FL=0
   LET N=12
   READ IF MISSING THEN EXIT DO:AR,AI,BR,BI,CR,CI,DR,DI
   LET A=COMPLEX(AR,AI)
   LET B=COMPLEX(BR,BI)
   LET C=COMPLEX(CR,CI)
   LET D=COMPLEX(DR,DI)
   CALL DRAW(N,0)
   LET XM=(XMAX-XMIN)/2*1.5
   LET YM=(YMAX-YMIN)/2*1.5
   LET X0=X0/2^N
   LET Y0=Y0/2^N
   SET WINDOW -MAX(XM,YM),MAX(XM,YM),-MAX(XM,YM),MAX(XM,YM)
   LET FL=1
   CALL DRAW(17,0)
   ASK TEXT HEIGHT HEIGHT
   PLOT TEXT ,AT -MAX(XM,YM),MAX(XM,YM)-1.5*HEIGHT:"A="&FORMAT$(A)
   PLOT TEXT ,AT -MAX(XM,YM),MAX(XM,YM)-3*HEIGHT:"B="&FORMAT$(B)
   PLOT TEXT ,AT -MAX(XM,YM),MAX(XM,YM)-4.5*HEIGHT:"C="&FORMAT$(C)
   PLOT TEXT ,AT -MAX(XM,YM),MAX(XM,YM)-6*HEIGHT:"D="&FORMAT$(D)
   !'GSAVE "フラクタル"&USING$("%%%",I)&".png"
   WAIT DELAY 1
   CLEAR
LOOP
DATA 0,0,.5,.288675134594813,0,0,.5,-.288675134594813
DATA 0,0,.4614,.4614,.622,-.196,0,0
DATA .4614,.4614,0,0,0,0,.622,-.196
DATA 0,0,.5,.28867,0,0,.6667,0
DATA 0,0,0,.6667,0,0,.6667,0
DATA 0,.7071,0,0,.5,0,0,0
DATA 0,0,.4,.5,0,0,.4,-.5
DATA .4614,.4614,0,0,0,0,.2896,-.585
DATA .4614,.4614,0,0,.622,-.196,0,0
DATA .1,.1,.5,.3,-.1,-.1,.5,-.3
DATA 0,.2887,.5,.2887,0,-.2887,.5,-.2887
DATA .5,.2887,0,0,.5,-.2887,0,0
DATA .5,.4,0,.4,.5,-.4,0,-.4
DATA .5,-.05,0,0,.5,.05,0,0
DATA 0,0,-.5,-.5,0,0,-.5,.5
DATA .5,-.5,0,0,-.5,-.5,0,0
DATA .3,.6,0,0,-.3,.6,0,0
DATA -.3,.7,0,0,.3,-.6,0,0
DATA -.3,.6,0,0,.3,-.6,0,0
DATA .3,.7,0,0,0,0,.2,.5
DATA .2,.7,0,0,0,0,.2,.6
DATA 0,0,-.5,-.5,0,0,0,.7
DATA .6,.2,0,0,0,0,.67,0
DATA .7,.2,0,0,0,0,.67,0
DATA .67,-.5,0,0,-.25,.5,0,0
DATA .55,-.45,0,0,.8,.2,0,0
DATA .71,-.44,.05,0,.73,.5,.02,0
DATA .71,-.37,0,0,.71,.37,0,0
DATA .8,-.5,0,0,.8,.5,0,0
DATA .1,0,.5,.3,.1,0,.67,0
DATA -.25,.5,0,0,0,0,.75,0
DATA 0,0,.8,0,0,0,-.2,-.4
DATA 0,0,.8,.1,0,0,-.2,-.4
DATA 0,0,.3,.6,0,0,-.3,-.6
DATA .7,.1,0,.3,0,.2,.7,0
DATA -.25,.5,0,0,0,0,0,.7
DATA .1,0,.3,.6,.1,0,.3,-.6
DATA .3,.6,-.1,-.1,.1,.1,-.3,-.6
DATA .3,.6,0,0,0,0,-.3,-.6
DATA .3,.8,0,0,0,0,-.3,-.3
DATA .5,-.5,0,0,-.25,.5,0,0
DATA .5,-.6,0,0,-.1,.5,0,0
DATA 0,0,.5,.7,0,0,.7,0
DATA 0,0,.5,.3,0,0,.5,.65
DATA 0,0,.5,.3,0,0,.5,.85
DATA .8,-.2,.1,.1,.1,.2,.6,-.2
DATA .8,.2,.1,.1,.1,.2,.6,.1
DATA .8,.2,.1,.1,.1,-.2,.6,-.2
DATA .8,.2,0,.2,0,.2,.6,.1
DATA 0,0,-.5,-.5,.5,-.5,0,0
DATA .7,-.6,.2,.4,-.7,-.6,.2,.4
DATA .6,-.6,.2,.5,-.6,-.6,.2,.5
DATA .7,-.5,.2,-.4,-.7,-.5,.2,-.4
DATA -.1,.9,0,0,.1,-.55,0,0
DATA 0,0,-.3,.6,-.3,-.6,0,0
DATA .48,.48,0,0,0,0,.48,-.48
DATA .2,0,0,.7,.2,0,0,-.7
DATA .1,0,0,.7,.1,0,0,-.7
DATA 0,0,0,-.5,.8,0,0,0
DATA .5,-.55,0,0,-.1,.55,.2,0
DATA .5,-.5,.2,0,-.25,.5,0,0
DATA .6,-.6,.22,0,-.1,-.2,.22,0
DATA .7,-.6,0,0,-.1,-.2,0,0
DATA .7,-.5,0,0,-.2,-.4,0,0
DATA .7,-.6,.4,0,-.1,-.2,.4,0
DATA .7,-.6,.2,.4,-.1,-.2,.2,.4
DATA .1,.4,-.2,-.2,.1,-.4,1,.3
DATA 0,.1,.7,-.5,0,0,-.2,-.3
DATA .1,.1,.6,-.5,0,.1,-.2,-.3
DATA .1,.1,.5,.3,-.1,.1,-.5,.3
DATA .1,-.1,.4,.5,-.1,.1,-.4,.5
DATA 0,0,.7,-.7,0,0,-.2,-.4
DATA .4,-.5,0,.1,0,0,-.4,-.5
DATA -.1,.1,.6,-.4,.1,.5,.2,0
DATA 0,-.1,.3,-.5,0,-.1,0,.67
DATA -.5,.5,0,0,0,0,0,.5
DATA .5,-.4,0,0,0,0,.5,.4
DATA -.4,.7,0,0,.2,-.3,0,0
DATA .1,.5,-.2,-.2,.1,-.5,1,.3
DATA .1,0,.7,-.6,.1,0,-.2,-.3
DATA .1,.5,-.1,.1,.1,.5,1,.1
DATA .4,.5,-.2,.2,.1,-.3,.6,.5
DATA .7,-.3,0,0,0,0,.6,.3
DATA .7,-.3,-.1,0,-.1,0,.6,.3
DATA .3,-.6,0,-.1,0,-.1,.6,.3
DATA .5,-.6,0,-.1,0,-.1,.6,.3
DATA .5,-.5,.1,0,.1,0,.5,.5
DATA 0,0,.65,0,0,-.65,0,0
DATA 0,0,.65,.2,.2,-.65,0,0
DATA .5,-.5,0,.5,0,.2,.5,-.5
DATA .5,-.5,0,-.3,0,-.3,.5,-.5
DATA .5,-.5,0,-.2,0,.2,.5,-.5
DATA .5,-.5,0,-.5,0,-.2,.5,-.5
DATA .5,-.5,.2,-.1,.2,-.2,.5,-.5
DATA .5,-.5,.1,.1,.3,.4,.5,-.5
DATA .5,-.5,.2,.2,-.25,.5,.1,.2
DATA .6,-.6,.2,-.1,-.1,.4,.1,-.3
DATA .2,-.6,0,0,0,0,.3,-.6
DATA .2,-.6,0,0,0,0,.5,-.6
DATA .2,-.6,0,0,0,0,.5,-.7
DATA .2,-.6,0,0,0,0,.5,-.8
DATA .2,-.6,0,0,0,0,.5,-.9
DATA .3,-.5,0,0,0,0,.5,-.9
DATA .5,-.5,0,0,0,0,.5,-.9
DATA .3,-.7,0,0,0,0,.5,-.9
DATA .3,-.7,.4,0,0,0,.5,-.8
DATA .72,-.5,0,0,0,0,.3,.4
DATA .72,-.5,.2,0,0,0,.3,.4
DATA 1,-.3,.2,0,0,0,.3,-.3
DATA 1,-.3,.2,0,0,.2,.2,-.4
DATA .19,0,.3,.6,.19,0,.3,-.6
DATA .19,.33,.3,.6,.19,-.33,.3,-.6
DATA 0,.33,.3,.6,0,-.33,.3,-.6
DATA .2,.7,0,.2,-.2,.7,0,.2
DATA 0,0,0,.3,-.3,.9,.3,0
DATA .1,0,0,.3,-.3,.9,.3,0
DATA .3,.4,.6,-.4,-.6,-.8,.3,-.4
DATA 0,0,-.5,-.35,-.5,-.35,0,0
DATA .2,0,-.5,-.5,-.5,-.5,-.2,0
DATA 0,.2,-.5,-.5,-.5,-.5,0,.2
DATA 0,-.3,-.5,-.38,-.5,-.38,0,.2
DATA .7,.5,0,-.3,0,-.6,.2,.3
DATA .2,.2,.3,.3,.2,-.2,.3,-.3
DATA .2,.3,.5,.6,.2,-.3,.5,-.6
DATA .6,-.2,0,0,.8,.4,0,0
DATA .6,-.2,.2,.1,.7,.4,0,0
DATA .5,-.2,.3,.1,.7,.5,.3,-.1
DATA .5,-.3,0,0,0,0,.7,-.3
DATA .5,-.3,.3,-.2,0,0,.7,.3
DATA .3,-.2,.3,-.2,0,0,.9,.2
DATA .3,-.5,.1,.1,.3,.5,.1,-.1
DATA .4,-.5,0,0,.4,.5,0,0
DATA .4,-.5,.1,0,.4,.5,0,0
DATA .4,-.6,0,0,.4,.6,0,0
DATA .4,-.65,0,0,.4,.65,0,0
DATA .2,-.72,.2,0,.2,.72,0,0
DATA .4,-.68,.2,0,.4,.68,.2,0
DATA .4,-.6,0,.2,.4,.6,0,0
DATA .4,-.7,0,0,.4,.7,0,0
DATA .5,-.6,0,.1,.5,.6,0,0
DATA .4,-.6,0,.1,-.4,-.6,0,0
DATA .3,-.6,0,0,-.3,-.6,0,0
DATA .3,-.6,0,.1,-.3,-.6,0,0
DATA .3,-.65,0,.1,-.3,-.65,0,0
DATA .3,-.7,0,.3,-.3,-.7,0,0
DATA .3,-.75,.3,-.3,-.3,-.75,.3,-.3
DATA .2,-.8,.4,-.4,-.2,-.8,.4,-.4
DATA .7,.2,.2,.2,.2,-.2,.9,.3
DATA 0,.1,.5,-.3,0,.1,.67,0
DATA 0,.1,.5,-.3,0,.1,.67,.3
DATA 0,.2,.5,-.3,0,.2,.67,.3
DATA 0,.3,.55,-.3,0,.3,.67,.3
DATA .01,.35,.7,-.35,.01,.35,.7,.35
DATA .1,0,.2,.5,.4,-.7,.1,0
DATA 0,0,.2,.5,.4,-.7,.1,0
DATA 0,0,.2,.5,.4,-.7,.3,0
DATA .1,0,.2,.5,.4,-.7,.3,0
DATA 0,0,.2,.5,.3,-.77,0,0
DATA .1,0,.2,.5,.2,-.8,.2,0
DATA .1,0,.2,.5,.2,-.7,.2,0
DATA 0,0,.1,.4,.5,-.8,0,0
DATA 0,0,.1,.4,.5,-.8,.4,0
DATA 0,.1,.1,.4,.5,-.8,.2,0
DATA 0,.1,.1,.4,.5,-.9,.2,0
DATA 0,.2,.1,.4,.5,-.9,.2,0
DATA .2,.2,.1,.4,.5,-.78,-.1,0
DATA 0,.2,.3,-.5,.5,-.8,0,-.2
DATA .5,.3,.1,0,.1,0,.7,0
DATA .5,-.5,.1,0,.1,0,.6,0
DATA .5,-.66,.1,0,.1,0,.6,0
DATA .5,-.6,0,0,0,0,.5,-.6
DATA .5,-.6,0,0,.1,0,.5,-.6
DATA .5,-.6,0,-.15,0,.1,.5,-.6
DATA .5,-.6,0,-.15,0,-.15,.5,-.6
DATA .5,.3,0,0,0,0,.5,-.3
DATA .5,.3,.2,0,0,0,.5,-.3
DATA .5,.3,.2,.2,0,0,.5,-.3
DATA .5,.3,.2,0,.1,.1,.5,-.3
DATA .5,.3,.1,.2,-.1,-.2,.5,-.3
DATA .3,-.7,0,-.15,0,-.15,.3,-.7
DATA .3,-.7,.1,-.2,.1,-.2,.3,-.7
DATA .2,-.7,.1,-.2,.1,-.2,.2,-.7
DATA .2,-.7,.1,.25,0,.25,.2,-.7
DATA .2,-.8,.1,.25,0,.25,.2,-.7
DATA .2,-.8,.1,.4,0,.4,.2,-.8
DATA .2,-.8,0,.45,0,.45,.2,-.8
DATA .3,-.8,.1,-.2,.1,.2,.3,-.2
DATA .6,-.8,.1,-.2,.1,.2,.3,-.3
DATA -.25,.5,0,0,0,0,.75,0
DATA 0,.5,0,0,0,0,.75,0
DATA -.5,.5,0,0,0,0,0,.5
DATA -.7,.5,0,0,0,0,0,.4
END

EXTERNAL  FUNCTION FORMAT$(Z)
OPTION ARITHMETIC COMPLEX
IF IM(Z)<0 THEN LET SIGN$=" - " ELSE LET SIGN$=" + "
LET FORMAT$=USING$("-%.####",RE(Z))&SIGN$&USING$("%.####",ABS(IM(Z)))&"i"
END FUNCTION

EXTERNAL  SUB DRAW(N,Z)
OPTION ARITHMETIC COMPLEX
IF N>0 THEN
   CALL DRAW(N-1,A*Z+B*CONJ(Z))
   CALL DRAW(N-1,C*(Z-1)+D*(CONJ(Z)-1)+1)
   IF FL=0 THEN
      LET XMIN=MIN(XMIN,RE(Z))
      LET XMAX=MAX(XMAX,RE(Z))
      LET YMIN=MIN(YMIN,IM(Z))
      LET YMAX=MAX(YMAX,IM(Z))
      LET X0=X0+RE(Z)
      LET Y0=Y0+IM(Z)
   ELSE
      PLOT POINTS:Z-COMPLEX(X0,Y0)
   END IF
END IF
END SUB
 

Re: Qt5 版の GetKeyState() に不具合があるようです

 投稿者:SHIRAISHI Kazuo  投稿日:2020年11月24日(火)16時54分43秒
返信・引用
  > No.4889[元記事へ]

ご報告ありがとうございます。
GETKEYSTATEは一応Lazarusのドキュメントに記載はあるのですが,
https://lazarus-ccr.sourceforge.io/docs/lcl/lclintf/getkeystate.html
LCLの実装にGETKEYSTATEが不要だと機能しないようです。
十進BASICのMac版ではGETKEYSTATEが機能しないことを確認しているので,
Qt版でも使えないことを追記しておきます。
http://hp.vector.co.jp/authors/VA008683/basi0000.htm


> ありがとうございます。
>
> では、一つずつ書きます。
>
> 不具合報告です。(私が発見した不具合はこれだけです)
> 「十進BASIC 8.1.0.7 (x86_64) Qt5版」を Fedora30 にインストールしましたが、
> GetKeyState() がうまく動作していないようです。
>
> どのキーを押しても、負の数が戻ってきません。
> プログラムは https://decimalbasic.ninja-web.net/BASICHelp/html/basi16ck.htm に倣って、
> --- ここから ---
> DO
>    FOR k = 8 TO 239
>       IF GetKeyState(k) < 0 THEN PRINT k
>    NEXT k
> LOOP
> END
> --- ここまで ---
> と、しています。
>
> dnf install qt5pas
> は、実施済みです。
>
> gtk2 版は、同じプログラムが思惑通り動作しているので、
> Qt5 とのインタフェース、あるいは Qt5 そのものが
> うまく動作していないのかもしれません。
>
> よろしくお願いいたします。
>
> SHIRAISHI Kazuoさんへのお返事です。
>
> > ふくちんさんへのお返事です。
> >
> > 不具合や疑問点など,気づいた点があれば掲示板に書き込んでください。
> >
> >
 

Qt5 版の GetKeyState() に不具合があるようです

 投稿者:ふくちん  投稿日:2020年11月24日(火)02時29分39秒
返信・引用
  > No.4887[元記事へ]

ありがとうございます。

では、一つずつ書きます。

不具合報告です。(私が発見した不具合はこれだけです)
「十進BASIC 8.1.0.7 (x86_64) Qt5版」を Fedora30 にインストールしましたが、
GetKeyState() がうまく動作していないようです。

どのキーを押しても、負の数が戻ってきません。
プログラムは https://decimalbasic.ninja-web.net/BASICHelp/html/basi16ck.htm に倣って、
--- ここから ---
DO
   FOR k = 8 TO 239
      IF GetKeyState(k) < 0 THEN PRINT k
   NEXT k
LOOP
END
--- ここまで ---
と、しています。

dnf install qt5pas
は、実施済みです。

gtk2 版は、同じプログラムが思惑通り動作しているので、
Qt5 とのインタフェース、あるいは Qt5 そのものが
うまく動作していないのかもしれません。

よろしくお願いいたします。

SHIRAISHI Kazuoさんへのお返事です。

> ふくちんさんへのお返事です。
>
> 不具合や疑問点など,気づいた点があれば掲示板に書き込んでください。
>
>

http://www.rouge.gr.jp/~fuku/toys/decbasic-mazeplay/

 

コロナウィルス感染者数シュミレーション

 投稿者:しばっち  投稿日:2020年11月23日(月)10時52分22秒
返信・引用 編集済
  コロナウィルス感染者数をSIRモデルでシュミレーションしてみました。

http://www.math.twcu.ac.jp/ogita/lec/sim_infection.pdf
https://rad-it21.com/サイエンス/michikoshi-shugo_20200331/
https://wagtail.cds.tohoku.ac.jp/coda/python/p-6-application-sup-ode-sir-model.html
https://ex-gram.com/infection_vs_vaccination2/

Susceptible:未感染者数
Infected   :感染者数
Recovered  :免疫保持者数、回復した人数

このS,I,Rを3元連立微分方程式としてルンゲクッタで解いてグラフ表示しています。
このプログラムではこれらパラメータをスライドバーで与えています。


Sを緑線
Iを赤線
Rを青線でグラフ表示しています。
縦軸を人数、横軸が日数です。


PUBLIC NUMERIC B,G
LOCATE VALUE NOWAIT(1) ,RANGE 10000 TO 10000000,AT 1000000 : N !'人口
LOCATE VALUE NOWAIT(2) ,RANGE 1 TO 10000,AT 10 : I !'初期感染者数
LOCATE VALUE NOWAIT(3) ,RANGE .01 TO 1,AT .2 : BETA !'感染率
LOCATE VALUE NOWAIT(4) ,RANGE 1 TO 30,AT 14 :GAMMA !'回復までの日数
DO
   LOCATE VALUE NOWAIT(1) : N !'人口
   LOCATE VALUE NOWAIT(2) : I !'初期感染者数
   LOCATE VALUE NOWAIT(3) : BETA !'感染率
   LOCATE VALUE NOWAIT(4) :GAMMA !'回復までの日数
   LET N=INT(N)
   LET I=INT(I)
   LET R=0 !'初期回復者数
   LET GAMMA=INT(GAMMA)
   LET S=N-I !'初期未感染者数
   LET T=0 !'経過日数
   LET G=1/GAMMA !'回復率
   LET B=BETA/N !'感染率
   LET H=.5
   LET DAY=180 !'期間(日)
   SET WINDOW -15,DAY,-N/40,N*1.02
   SET COLOR MIX(15) 0,0,0
   DRAW GRID(30,N/5)
   DO
      LET K1=F1(T,S,I,R)
      LET L1=F2(T,S,I,R)
      LET M1=F3(T,S,I,R)

      LET K2=F1(T+H/2,S+H/2*K1,I+H/2*L1,R+H/2*M1)
      LET L2=F2(T+H/2,S+H/2*K1,I+H/2*L1,R+H/2*M1)
      LET M2=F3(T+H/2,S+H/2*K1,I+H/2*L1,R+H/2*M1)

      LET K3=F1(T+H/2,S+H/2*K2,I+H/2*L2,R+H/2*M2)
      LET L3=F2(T+H/2,S+H/2*K2,I+H/2*L2,R+H/2*M2)
      LET M3=F3(T+H/2,S+H/2*K2,I+H/2*L2,R+H/2*M2)

      LET K4=F1(T+H,S+H*K3,I+H*L3,R+H*M3)
      LET L4=F2(T+H,S+H*K3,I+H*L3,R+H*M3)
      LET M4=F3(T+H,S+H*K3,I+H*L3,R+H*M3)

      LET TT=T+H
      LET SS=S+H*(K1+2*K2+2*K3+K4)/6
      LET II=I+H*(L1+2*L2+2*L3+L4)/6
      LET RR=R+H*(M1+2*M2+2*M3+M4)/6
      SET LINE COLOR 3   ! 緑
      PLOT LINES:TT,SS;T,S
      SET LINE COLOR 4   ! 赤
      PLOT LINES:TT,II;T,I
      SET LINE COLOR 2   ! 青
      PLOT LINES:TT,RR;T,R
      LET S=SS
      LET I=II
      LET R=RR
      LET T=TT
   LOOP UNTIL T>=DAY
   SET DRAW MODE EXPLICIT
   WAIT DELAY .5
   SET DRAW MODE HIDDEN
   CLEAR
LOOP
END

EXTERNAL  FUNCTION F1(T,S,I,R) !'dS/dt=f1(t,S,I,R)
LET F1=-B*S*I
END FUNCTION

EXTERNAL  FUNCTION F2(T,S,I,R) !'dI/dt=f2(t,S,I,R)
LET F2=B*S*I-G*I
END FUNCTION

EXTERNAL  FUNCTION F3(T,S,I,R) !'dR/dt=f3(t,S,I,R)
LET F3=G*I
END FUNCTION
 

Re: 不具合報告や質問、要望があるのですが

 投稿者:SHIRAISHI Kazuo  投稿日:2020年11月22日(日)15時00分29秒
返信・引用
  > No.4886[元記事へ]

ふくちんさんへのお返事です。

不具合や疑問点など,気づいた点があれば掲示板に書き込んでください。

 

不具合報告や質問、要望があるのですが

 投稿者:ふくちん  投稿日:2020年11月20日(金)12時52分9秒
返信・引用
  こんにちは。初めまして。

この掲示板は、プログラミングに関する質問や研究結果の公開などに利用できるとありますが、
不具合報告やライセンスに関する質問、要望等もこちらに書いて良いのでしょうか。
ご存じの方いらっしゃいますか?

よろしくお願いいたします。

http://www.rouge.gr.jp/~fuku/toys/decbasic-mazeplay/

 

Re: SET BITMAP SIZE文でエラー

 投稿者:島村1243  投稿日:2020年10月20日(火)18時17分4秒
返信・引用
  > No.4883[元記事へ]

> SHIRAISHI Kazuoさんへのご連絡です。
>
> > ご報告ありがとうございました。
> > 通常の例外状態処理が効かないようです。
> > 仕方ないので,1以下の値を指定されたときはWin32 APIが呼ばれないようにします。
> >
> 十進BASIC Linux32ビット版-version8.1.0.6を
> xubuntu-16.04で使っています。
> しばっちさんが「Windows版でエラー」の書き込みが有りましたので
> Linux版で同様の操作をしてみましたら
>
> SET BITMAP SIZE 0,0
> PRINT "abcd"
> END
> では問題ありませんが
> 以下省略

しばっちさんの問題提起に対してWindows版については白石先生から素早い回答が有った後直ぐに、「Windows版の新version」が出たので、対策を施した新versionと思ってしまいました。
しかし、Linux版の新versionは出なかったので、もしかしたら気が付いておられないのかも知れないと、浅はかな考えで投稿してしまいました。
的外れな投稿になった様で大変失礼致しました。
投稿No.4883は削除をお願い致します。
 

Re: SET BITMAP SIZE文でエラー

 投稿者:しばっち  投稿日:2020年10月18日(日)18時43分23秒
返信・引用 編集済
  > No.4883[元記事へ]

> 十進BASIC Linux32ビット版-version8.1.0.6を
> xubuntu-16.04で使っています。
> しばっちさんが「Windows版でエラー」の書き込みが有りましたので
> Linux版で同様の操作をしてみましたら
>
> SET BITMAP SIZE 0,0
> PRINT "abcd"
> END
> では問題ありませんが
>
> SET BITMAP SIZE 1,1
> PRINT "abcd"
> END
>
> これを実行するとエラーダイアログ
> Invalid floating point operation OK
> が出ました。
>
> 次に下記のように直して
> PRINT "abcd"
> END
>
> 再度実行するとエラーダイアログ
> Internal Error on Compiling Access violation
> Mail
> versin number and current program to kazuo.shiraishi@nifty.com
> が出ました。
>
> 以上報告です。
>

白石先生はもうお気づきかと思いますが SET BITMAP SIZE 1,1では
ウィンドゥ(SET WINDOW)が設定できないことが起因で至極当然の
エラーだと思われます。画像サイズを1ドットとすることに意味はない
と思われます。
 

レンタル掲示板
/175