ハート形の重心 - しばっち
2023/02/26 (Sun) 09:39:49
ハート形の重心を求めます。
但し、このプログラムの計算精度は小数点以下1~2桁程しかありません。
ASK BITMAP SIZE XSIZE,YSIZE
SET WINDOW -1.5,1.5,-1.5,1.5
SET POINT COLOR 3
SET POINT STYLE 1
FOR Y=0 TO YSIZE-1
FOR X=0 TO XSIZE-1
IF F(WORLDX(X),WORLDY(Y))<=0 THEN
PLOT POINTS:WORLDX(X),WORLDY(Y)
LET XX=XX+WORLDX(X)
LET YY=YY+WORLDY(Y)
LET N=N+1
END IF
NEXT X
NEXT Y
DRAW GRID(.1,.1)
SET POINT COLOR 4
SET POINT STYLE 7
PLOT POINTS:XX/N,YY/N ! 重心
END
EXTERNAL FUNCTION F(X,Y)
LET F=(X^2+Y^2-1)^3-X^2*Y^3
END FUNCTION
---------------------------------------------------------------
FOR Z=-3 TO 3 STEP 1/32
FOR Y=-3 TO 3 STEP 1/32
FOR X=-3 TO 3 STEP 1/32
IF HEART(X,Y,Z)<=0 THEN
LET XX=XX+X
LET YY=YY+Y
LET ZZ=ZZ+Z
LET N=N+1
END IF
NEXT X
NEXT Y
NEXT Z
PRINT XX/N;YY/N;ZZ/N
END
EXTERNAL FUNCTION HEART(X,Y,Z)
LET HEART=(X^2+9/4*Y^2+Z^2-1)^3-X^2*Z^3-9/80*Y^2*Z^3
!LET HEART=(2*X^2+Y^2+Z^2-1)^3-X^2*Z^3/10-Y^2*Z^3
END FUNCTION
半球の重心 - しばっち
2023/02/26 (Sun) 09:36:52
半球の重心を求めます。
但し、このプログラムの計算精度は小数点以下1~2桁程しかありません。
FOR Z=0 TO 1 STEP 1/128
FOR Y=-1 TO 1 STEP 1/128
FOR X=-1 TO 1 STEP 1/128
IF X*X+Y*Y+Z*Z<=1 THEN
LET XX=XX+X
LET YY=YY+Y
LET ZZ=ZZ+Z
LET N=N+1
END IF
NEXT X
NEXT Y
NEXT Z
PRINT "半球重心 (";XX/N;",";YY/N;",";ZZ/N;")"
LET XX,YY,ZZ,N=0
FOR Z=0 TO 1 STEP 1/128
FOR Y=0 TO 1 STEP 1/128
FOR X=-1 TO 1 STEP 1/128
IF X*X+Y*Y+Z*Z<=1 THEN
LET XX=XX+X
LET YY=YY+Y
LET ZZ=ZZ+Z
LET N=N+1
END IF
NEXT X
NEXT Y
NEXT Z
PRINT "1/4球重心(";XX/N;",";YY/N;",";ZZ/N;")"
LET XX,YY,ZZ,N=0
FOR Z=0 TO 1 STEP 1/128
FOR Y=0 TO 1 STEP 1/128
FOR X=0 TO 1 STEP 1/128
IF X*X+Y*Y+Z*Z<=1 THEN
LET XX=XX+X
LET YY=YY+Y
LET ZZ=ZZ+Z
LET N=N+1
END IF
NEXT X
NEXT Y
NEXT Z
PRINT "1/8球重心(";XX/N;",";YY/N;",";ZZ/N;")"
END
----------------------------------------------------------------------------
FOR W=0 TO 1 STEP 1/64
FOR Z=-1 TO 1 STEP 1/64
FOR Y=-1 TO 1 STEP 1/64
FOR X=-1 TO 1 STEP 1/64
IF X*X+Y*Y+Z*Z+W*W<=1 THEN
LET XX=XX+X
LET YY=YY+Y
LET ZZ=ZZ+Z
LET WW=WW+W
LET N=N+1
END IF
NEXT X
NEXT Y
NEXT Z
NEXT W
PRINT "半球重心(";XX/N;",";YY/N;",";ZZ/N;",";WW/N;")"
END
扇形の重心 - しばっち
2023/02/26 (Sun) 09:34:56
扇形の重心を求めその位置に線を引きます。
但し、このプログラムの計算精度は小数点以下1~2桁程しかありません。
https://science-log.com/数学/図形の重心を解析的に求める方法/
OPTION ANGLE DEGREES
DIM X(500),Y(500),XX(50),YY(50)
SET BITMAP SIZE 600,600
SET WINDOW -1,1,-1,1
SET AREA COLOR 3
SET LINE COLOR 2
FOR TH=10 TO 360 STEP 10
IF TH<360 THEN LET N=1 ELSE LET N=0
FOR THETA=0 TO TH
LET N=N+1
LET X(N)=COS(THETA)
LET Y(N)=SIN(THETA)
NEXT THETA
MAT PLOT AREA,LIMIT N:X,Y
LET M=M+1
IF M>2 THEN MAT PLOT LINES,LIMIT M-1:XX,YY
CALL JUSIN(XX(M),YY(M))
PRINT "中心角";TH;"°重心座標";XX(M);YY(M)
MAT PLOT LINES,LIMIT M:XX,YY
NEXT TH
DRAW GRID(.1,.1)
END
EXTERNAL SUB JUSIN(XX,YY)
LET XX=0
LET YY=0
FOR Y=PIXELY(-1) TO PIXELY(1)
FOR X=PIXELX(-1) TO PIXELX(1)
IF GETPOINT(WORLDX(X),WORLDY(Y))=3 THEN
LET XX=XX+WORLDY(X)
LET YY=YY+WORLDX(Y)
LET N=N+1
END IF
NEXT X
NEXT Y
LET XX=XX/N
LET YY=YY/N
END SUB
EXTERNAL FUNCTION GETPOINT(X,Y)
ASK PIXEL VALUE(X,Y) C
LET GETPOINT=C
END FUNCTION
---------------------------------------------------------------------------------
OPTION ANGLE DEGREES
DIM X(500),Y(500)
SET BITMAP SIZE 800,800
SET WINDOW -1.5,1.5,-1.5,1.5
SET AREA COLOR 3
SET LINE COLOR 2
SET POINT COLOR 4
SET POINT STYLE 7
LOCATE VALUE NOWAIT(1) ,RANGE 1 TO 360,AT 30: THETA
DO
LOCATE VALUE NOWAIT(1): THETA
LET THETA=INT(THETA)
IF THETA<>TT THEN
MAT X=ZER
MAT Y=ZER
IF THETA<360 THEN LET N=1 ELSE LET N=0
FOR TH=0 TO THETA
LET N=N+1
LET X(N)=COS(TH)
LET Y(N)=SIN(TH)
NEXT TH
MAT PLOT AREA,LIMIT N:X,Y
CALL JUSIN(XX,YY)
! FOR I=1 TO N
! LET X(I)=X(I)-XX
! LET Y(I)=Y(I)-YY
! NEXT I
END IF
LET TT=THETA
CLEAR
MAT PLOT AREA,LIMIT N:X,Y
DRAW GRID(.2,.2)
PLOT POINTS:XX,YY ! 重心
SET DRAW MODE EXPLICIT
WAIT DELAY .1
SET DRAW MODE HIDDEN
CLEAR
LOOP
END
EXTERNAL SUB JUSIN(XX,YY)
ASK BITMAP SIZE XSIZE,YSIZE
!DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
!ASK PIXEL ARRAY (WORLDX(0),WORLDY(0)) M
LET XX=0
LET YY=0
FOR Y=0 TO YSIZE-1
FOR X=0 TO XSIZE-1
! IF M(X,Y)=3 THEN
IF GETPOINT(WORLDX(X),WORLDY(Y))=3 THEN
LET XX=XX+WORLDY(X)
LET YY=YY+WORLDX(Y)
LET N=N+1
END IF
NEXT X
NEXT Y
LET XX=XX/N
LET YY=YY/N
END SUB
EXTERNAL FUNCTION GETPOINT(X,Y)
ASK PIXEL VALUE(X,Y) C
LET GETPOINT=C
END FUNCTION
---------------------------------------------------------------------------------
! 半円の重心
LET R=1 ! 半径R
LET Y=INTEGRAL(0,R,100)
PRINT Y/(.5*PI*R*R),4*R/(3*PI)
FUNCTION F(X)
LET F=2*X*SQR(R*R-X*X)
END FUNCTION
FUNCTION INTEGRAL(A,B,N) !シンプソン則
DIM RR(0 TO 2)
LET RR(0)=1/3
LET RR(1)=4/3
LET RR(2)=1/3
LET H=(B-A)/N/2
LET S=0
FOR K=0 TO N-1
FOR J=0 TO 2
LET S=S+RR(J)*H*F(A+H*(2*K+J))
NEXT J
NEXT K
LET INTEGRAL=S
END FUNCTION
END
ウゴウゴツール - しばっち
2023/02/26 (Sun) 09:31:31
このプログラムは下記ツールの一部を模倣したものです。
https://mclover.hateblo.jp/UgoTool
左ドラッグで線や箱を描きます。
スペースキーでモードを変更します。
DIM XS(5,200),YS(5,200),XE(5,200),YE(5,200)
DIM COL(5,200),WID(5,200),MOV(5,200),NN(10)
DIM MODE$(3)
MAT READ MODE$
DATA "直線","箱","円"
RANDOMIZE
FOR I=0 TO 7
SET COLOR MIX(I) BITAND(I,2)/2,BITAND(I,4)/4,BITAND(I,1)
NEXT I
SET WINDOW 0,PIXELX(1),PIXELY(1),0
CLEAR
LOCATE VALUE NOWAIT(1),RANGE 1 TO 10,AT 3 : MOVE
LOCATE VALUE NOWAIT(2),RANGE 1 TO 15,AT 7 : COLOR
LOCATE VALUE NOWAIT(3),RANGE 1 TO 10,AT 3 : WIDTH
LET MODE=1
LET M=1
LET W=1
DO
CALL GETLOC(XA,YA,XB,YB)
LET NN(MODE)=NN(MODE)+1
LET XS(MODE,NN(MODE))=XA
LET YS(MODE,NN(MODE))=YA
LET XE(MODE,NN(MODE))=XB
LET YE(MODE,NN(MODE))=YB
LET COL(MODE,NN(MODE))=INT(COLOR+.5)
LET WID(MODE,NN(MODE))=INT(WIDTH+.5)
LET MOV(MODE,NN(MODE))=INT(MOVE+.5)
LOOP
SUB GETLOC(XS,YS,XE,YE)
DO
IF GETKEYSTATE(32)<0 THEN
LOCATE CHOICE(MODE$):MODE
END IF
IF GETKEYSTATE(ORD("W"))<0 OR GETKEYSTATE(ORD("w"))<0 THEN
LOCATE CHOICE(5) :W
END IF
IF GETKEYSTATE(ORD("M"))<0 OR GETKEYSTATE(ORD("m"))<0 THEN
LOCATE CHOICE(8) :M
END IF
LOCATE VALUE NOWAIT(1) : MOVE
LOCATE VALUE NOWAIT(2) : COLOR
LOCATE VALUE NOWAIT(3) : WIDTH
SET LINE COLOR INT(COLOR+.5)
SET LINE WIDTH INT(WIDTH+.5)
MOUSE POLL XS,YS,LEFT1,RIGHT1
CALL DISPLAY
! IF RIGHT1=1 THEN STOP
LOOP UNTIL LEFT1=1
SET DRAW MODE XOR
DO
MOUSE POLL XE,YE,LEFT2,RIGHT2
SELECT CASE MODE
CASE 1
PLOT LINES:XS,YS;XE,YE
PLOT LINES:XS,YS;XE,YE
CASE 2
PLOT LINES:XS,YS;XE,YS;XE,YE;XS,YE;XS,YS
PLOT LINES:XS,YS;XE,YS;XE,YE;XS,YE;XS,YS
CASE 3
LET X0=(XS+XE)/2
LET Y0=(YS+YE)/2
LET R=SQR((X0-XS)^2+(Y0-YS)^2)
FOR J=1 TO 2
FOR I=0 TO 10
LET X=X0+R*COS(2*PI/10*I)
LET Y=Y0+R*SIN(2*PI/10*I)
PLOT LINES:X,Y;
NEXT I
PLOT LINES
NEXT J
END SELECT
LOOP WHILE LEFT2=1
SET DRAW MODE OVERWRITE
END SUB
SUB DISPLAY
SET DRAW MODE HIDDEN
CLEAR
FOR I=1 TO NN(1)
SET LINE COLOR COL(1,I)
SET LINE WIDTH WID(1,I)*W
LET X0=M*2*RND*MOV(1,I)-MOV(1,I)
LET X1=M*2*RND*MOV(1,I)-MOV(1,I)
LET Y0=M*2*RND*MOV(1,I)-MOV(1,I)
LET Y1=M*2*RND*MOV(1,I)-MOV(1,I)
PLOT LINES:XS(1,I)+X0,YS(1,I)+Y0;XE(1,I)+X1,YE(1,I)+Y1
NEXT I
FOR I=1 TO NN(2)
SET LINE COLOR COL(2,I)
SET LINE WIDTH WID(2,I)*W
LET X0=M*2*RND*MOV(2,I)-MOV(2,I)
LET X1=M*2*RND*MOV(2,I)-MOV(2,I)
LET Y0=M*2*RND*MOV(2,I)-MOV(2,I)
LET Y1=M*2*RND*MOV(2,I)-MOV(2,I)
PLOT LINES:XS(2,I)+X0,YS(2,I)+Y0;XE(2,I)+X1,YS(2,I)+Y1;XE(2,I)+X0,YE(2,I)+Y0;XS(2,I)+X1,YE(2,I)+Y1;XS(2,I)+X0,YS(2,I)+Y0
NEXT I
FOR I=1 TO NN(3)
SET LINE COLOR COL(3,I)
SET LINE WIDTH WID(3,I)*W
LET X0=(XS(3,I)+XE(3,I))/2
LET Y0=(YS(3,I)+YE(3,I))/2
LET R=SQR((X0-XS(3,I))^2+(Y0-YS(3,I))^2)
FOR J=0 TO 9
LET X=X0+R*COS(2*PI/10*J)+M*2*RND*MOV(3,I)-MOV(3,I)
LET Y=Y0+R*SIN(2*PI/10*J)+M*2*RND*MOV(3,I)-MOV(3,I)
PLOT LINES:X,Y;
IF J=0 THEN
LET XX=X
LET YY=Y
END IF
NEXT J
PLOT LINES : XX,YY
NEXT I
SET DRAW MODE EXPLICIT
WAIT DELAY .1
END SUB
END
パターンマッチング - しばっち
2023/02/26 (Sun) 09:24:08
パターンマッチングを行います。
但し、文字の位置、大きさ、文字種を制限しています。
CALL GINIT(400,40)
LET DATASET$="0123456789"
LET MES$="31415926535897932384"
SET TEXT HEIGHT 32
SET TEXT COLOR 7
SET TEXT JUSTIFY "LEFT" , "TOP"
SET LINE WIDTH 2
DIM P(LEN(DATASET$),0 TO 20,0 TO 39),Q(0 TO 20,0 TO 39)
FOR I=1 TO LEN(DATASET$)
CLEAR
PLOT TEXT ,AT 0,0:DATASET$(I:I)
ASK PIXEL ARRAY (0,0) Q
FOR Y=0 TO 39
FOR X=0 TO 20
LET P(I,X,Y)=Q(X,Y) ! 文字パターンを格納
NEXT X
NEXT Y
NEXT I
CLEAR
LET X=0
FOR I=1 TO LEN(MES$) ! 文字列表示
PLOT TEXT ,AT X,0:MES$(I:I)
LET X=X+20
NEXT I
! パターンマッチング開始
LET X=0
FOR L=1 TO LEN(MES$)
ASK PIXEL ARRAY (X,0) Q
CALL BOX(X,0,X+20,39,2) ! パターンマッチング中の文字
! LET MM=0
LET MM=1E+10
FOR K=1 TO LEN(DATASET$) ! 確率計算
LET S,S1,S2,SS=0
FOR J=0 TO 39
FOR I=0 TO 20
LET SS=SS+ABS(Q(I,J)-P(K,I,J)) ! SS=0の時、同一
! LET S=S+Q(I,J)*P(K,I,J) ! アダマール積
! LET S1=S1+Q(I,J)^2
! LET S2=S2+P(K,I,J)^2
NEXT I
NEXT J
! LET MATCH=S/SQR(S1*S2) ! COSθ
! IF MATCH>MM THEN
! LET MM=MATCH
! LET KK=K
! END IF
LET MATCH=SS
IF MATCH<MM THEN
LET MM=MATCH
LET KK=K
END IF
NEXT K
PRINT DATASET$(KK:KK); ! マッチングした文字
WAIT DELAY 1
CALL BOX(X,0,X+20,39,0)
LET X=X+20
NEXT L
END
EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
FOR I=0 TO 7
SET COLOR MIX(I) BITAND(I,2)/2,BITAND(I,4)/4,BITAND(I,1)
NEXT I
CLEAR
END SUB
EXTERNAL SUB BOX(XS,YS,XE,YE,C)
SET LINE COLOR C
PLOT LINES:XS,YS;XE,YS
PLOT LINES:XE,YS;XE,YE
PLOT LINES:XE,YE;XS,YE
PLOT LINES:XS,YE;XS,YS
END SUB
GPIOについて - 加藤 進
2023/02/04 (Sat) 18:35:57
ラズパイ4にBASICをwebから載せました。走ることも確認済み。そこでラズパイ4のGPIOを使ってLEDのON-OFFするにはどうすればいいのでしょうか?方法があればご教授下さい。自分はIchigoJamやScratch3+ArduinoでLEDのON-OFFはできるレベルです。
Re: GPIOについて - 白石 和夫
2023/02/05 (Sun) 14:30:25
多分,この方法で動くと思います。
Linuxでシェルスクリプトを実行する
https://hp.vector.co.jp/authors/VA008683/ShellScript.htm
手書き数字(文字)認識 - しばっち
2022/11/23 (Wed) 10:15:09
機械学習させて出来上がったCSVファイル(学習済データファイル)を読み込み
このプログラムで実際にマウスで手書きして数字(文字)の認識を行います。(CSVファイルへのパスを指定してください)
もし、機械学習時に設定(活性化関数)を変更した時は下記プログラムでも同様に変更しておいてください。
まず実行して文字データセット(文字種 0-9)を確認してください。マウスで右又は左クリックで手書き文字入力画面になります。
手書き数字(文字)をマウスで描きます。
これは画像サンプル作成時にも行ったようにマウスで1文字ずつ描きます。
失敗した時やはみ出した、一部が欠落、欠損した場合等はESCキーでやり直してください。
右クリック又はスペースキーで手書き数字(文字)認識を始めます。
文字データセットに含まれている文字のみを手書き入力してください。
あくまで文字データセット内に含まれている文字として手書き数字(文字)認識を行います。
手書き数字(文字)認識後はそれが本当に正解したかをあなた自身がY/Nキーで判定してください。
試行回数は10回としています。それだけ繰り返したら正答率を表示して終わります。
この手書き数字(文字)認識プログラムで正答率は6割程度かと予想しておりましたが、試してみたところナント(たまたま ?)全問正解しました。
AI(人工知能)プログラムとしてうまくいったと自負しております。
2進モードで実行してください
LET TESTNUM=10 ! 試行回数
LET SCALE=40 ! 表示倍率
! 学習データ読み込み
!!FILE GETOPENNAME CSVFILE$, "学習済データファイル|*.csv"
!!OPEN #1:NAME CSVFILE$,RECTYPE CSV
OPEN #1:NAME "学習済手書き数字.csv",RECTYPE CSV ! 保存先パスを指定
READ #1:DATASET$,MIDDLE1,IMAGESIZEX,IMAGESIZEY
LET INPUTNUM=IMAGESIZEX*IMAGESIZEY ! 入力系統数
LET OUTPUTNUM=LEN(DATASET$) ! 出力層 出力数
LET DATANUM=OUTPUTNUM ! データ数
DIM X(INPUTNUM,DATANUM),U(MIDDLE1),W1(MIDDLE1,INPUTNUM),B1(MIDDLE1),WY(MIDDLE1,OUTPUTNUM)
DIM BB(OUTPUTNUM),Y(OUTPUTNUM)
MAT READ #1:W1
MAT READ #1:B1
MAT READ #1:WY
MAT READ #1:BB
CLOSE #1
LET XSIZE=IMAGESIZEX*SCALE
LET YSIZE=IMAGESIZEY*SCALE
DIM M(0 TO XSIZE-1,0 TO YSIZE-1),TEMP(0 TO XSIZE-1,0 TO YSIZE-1)
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 1,1,1
SET LINE WIDTH MAX(XSIZE,YSIZE)/MAX(IMAGESIZEX,IMAGESIZEY)
SET LINE COLOR 1
SET TEXT HEIGHT MAX(XSIZE,YSIZE)*.06
SET TEXT JUSTIFY "CENTER","HALF"
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
CLEAR
PLOT TEXT ,AT XSIZE*.5,YSIZE*.4:"文字データセットは"
PLOT TEXT ,AT XSIZE*.5,YSIZE*.6:DATASET$(1:1)&"~"&DATASET$(OUTPUTNUM:OUTPUTNUM)&"です"
DO
MOUSE POLL MX,MY,LEFT2,RIGHT2
LOOP UNTIL LEFT2=1 OR RIGHT2=1
DO
MOUSE POLL PX,PY,LEFT1,RIGHT1
LOOP WHILE LEFT1=1 OR RIGHT1=1
! 手書き文字認識開始
FOR K=1 TO TESTNUM
PRINT K;"回目"
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
CLEAR
PLOT TEXT ,AT XSIZE*.5,YSIZE*.4:"手書き文字を"
PLOT TEXT ,AT XSIZE*.5,YSIZE*.6:"入力してください"
DO
MOUSE POLL PX,PY,LEFT,RIGHT
IF GETKEYSTATE(27)<0 THEN STOP
! IF RIGHT=1 THEN STOP
LOOP UNTIL LEFT=1
CLEAR
DO
IF FL=0 THEN MOUSE POLL MX,MY,LEFT1,RIGHT1
IF LEFT1=1 AND FL=0 THEN LET FL=1
IF LEFT1=1 AND FL=1 THEN
MOUSE POLL PX,PY,LEFT2,RIGHT2
PLOT LINES:PX,PY;
END IF
IF LEFT2=0 AND FL=1 THEN
LET FL=0
LET FG=0
PLOT LINES
END IF
IF FG=0 AND GETKEYSTATE(27)<0 THEN ! やり直し
CLEAR
LET FG=1
END IF
LOOP UNTIL RIGHT2=1 OR RIGHT1=1 OR GETKEYSTATE(32)<0 ! 右クリック 又は スペースキー
ASK PIXEL ARRAY (0,0) M
MAT TEMP=M
CLEAR
SET BITMAP SIZE IMAGESIZEX,IMAGESIZEY
SET WINDOW 0,IMAGESIZEX-1,IMAGESIZEY-1,0
DRAW DISPLAY(M,XSIZE,YSIZE) WITH SCALE(1/SCALE)
ASK PIXEL ARRAY (0,0) M
FOR YY=0 TO IMAGESIZEY-1
FOR XX=0 TO IMAGESIZEX-1
LET X(XX+1+YY*IMAGESIZEX,1)=M(XX,YY)
NEXT XX
NEXT YY
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
DRAW DISPLAY(TEMP,XSIZE,YSIZE) ! 手書き文字再表示
CALL CALC
LET LMAX=0
FOR I=1 TO OUTPUTNUM
IF LMAX<Y(I) THEN
LET LMAX=Y(I)
LET ANSWER$=DATASET$(I:I)
END IF
PRINT "手書き入力文字が「";DATASET$(I:I);"」の確率は";USING$("###.##",Y(I)*100);"%"
NEXT I
PRINT
PRINT "手書き入力文字は"
PRINT "「";ANSWER$;"」ですか? (Y/N) ";
DO
CHARACTER INPUT A$
! INPUT PROMPT "正解ですか (Y/N) ":A$
LOOP UNTIL A$="Y" OR A$="y" OR A$="N" OR A$="n"
IF A$="Y" OR A$="y" THEN LET HIT=HIT+1
PRINT
PRINT
NEXT K
PRINT "正答率は";HIT/TESTNUM*100;"% です"
SUB CALC
FOR I1=1 TO MIDDLE1
LET U(I1)=B1(I1)
FOR J1=1 TO INPUTNUM
LET U(I1)=U(I1)+W1(I1,J1)*X(J1,1)
NEXT J1
LET U(I1)=ACT(U(I1))
NEXT I1
LET YSUM=0
FOR J2=1 TO OUTPUTNUM
LET Y(J2)=BB(J2)
FOR I2=1 TO MIDDLE1
LET Y(J2)=Y(J2)+U(I2)*WY(I2,J2)
NEXT I2
NEXT J2
FOR I2=1 TO OUTPUTNUM
LET YSUM=YSUM+EXP(Y(I2))
NEXT I2
FOR I2=1 TO OUTPUTNUM
LET Y(I2)=EXP(Y(I2))/YSUM ! SOFTMAX関数
NEXT I2
END SUB
END
EXTERNAL FUNCTION ACT(X) ! 活性化関数
LET ACT=SIGMOID(X)
!LET ACT=TANH(X)
!LET ACT=RELU(X)
END FUNCTION
EXTERNAL FUNCTION SIGMOID(X)
LET SIGMOID=1/(1+EXP(-X))
END FUNCTION
EXTERNAL FUNCTION RELU(X)
LET RELU=MAX(0,X)
END FUNCTION
EXTERNAL FUNCTION SOFTSIGN(X)
LET SOFTSIGN=X/(1+ABS(X))
END FUNCTION
EXTERNAL PICTURE DISPLAY(M(,),XSIZE,YSIZE)
MAT PLOT CELLS , IN 0,0; XSIZE-1,YSIZE-1:M
END PICTURE
実行結果
1 回目
手書き入力文字が「0」の確率は 98.80%
手書き入力文字が「1」の確率は .00%
手書き入力文字が「2」の確率は .06%
手書き入力文字が「3」の確率は .12%
手書き入力文字が「4」の確率は .00%
手書き入力文字が「5」の確率は .74%
手書き入力文字が「6」の確率は .04%
手書き入力文字が「7」の確率は .07%
手書き入力文字が「8」の確率は .07%
手書き入力文字が「9」の確率は .11%
手書き入力文字は
「0」ですか? (Y/N) y
2 回目
手書き入力文字が「0」の確率は .00%
手書き入力文字が「1」の確率は 99.76%
手書き入力文字が「2」の確率は .00%
手書き入力文字が「3」の確率は .00%
手書き入力文字が「4」の確率は .12%
手書き入力文字が「5」の確率は .00%
手書き入力文字が「6」の確率は .01%
手書き入力文字が「7」の確率は .10%
手書き入力文字が「8」の確率は .01%
手書き入力文字が「9」の確率は .00%
手書き入力文字は
「1」ですか? (Y/N) y
3 回目
手書き入力文字が「0」の確率は .00%
手書き入力文字が「1」の確率は .00%
手書き入力文字が「2」の確率は 99.97%
手書き入力文字が「3」の確率は .01%
手書き入力文字が「4」の確率は .00%
手書き入力文字が「5」の確率は .00%
手書き入力文字が「6」の確率は .00%
手書き入力文字が「7」の確率は .01%
手書き入力文字が「8」の確率は .00%
手書き入力文字が「9」の確率は .00%
手書き入力文字は
「2」ですか? (Y/N) y
4 回目
手書き入力文字が「0」の確率は .00%
手書き入力文字が「1」の確率は .00%
手書き入力文字が「2」の確率は .01%
手書き入力文字が「3」の確率は 99.83%
手書き入力文字が「4」の確率は .00%
手書き入力文字が「5」の確率は .08%
手書き入力文字が「6」の確率は .00%
手書き入力文字が「7」の確率は .08%
手書き入力文字が「8」の確率は .00%
手書き入力文字が「9」の確率は .00%
手書き入力文字は
「3」ですか? (Y/N) y
5 回目
手書き入力文字が「0」の確率は .00%
手書き入力文字が「1」の確率は .00%
手書き入力文字が「2」の確率は .00%
手書き入力文字が「3」の確率は .00%
手書き入力文字が「4」の確率は 99.97%
手書き入力文字が「5」の確率は .01%
手書き入力文字が「6」の確率は .02%
手書き入力文字が「7」の確率は .00%
手書き入力文字が「8」の確率は .00%
手書き入力文字が「9」の確率は .00%
手書き入力文字は
「4」ですか? (Y/N) y
6 回目
手書き入力文字が「0」の確率は 1.60%
手書き入力文字が「1」の確率は .00%
手書き入力文字が「2」の確率は .00%
手書き入力文字が「3」の確率は .01%
手書き入力文字が「4」の確率は .18%
手書き入力文字が「5」の確率は 90.00%
手書き入力文字が「6」の確率は 8.10%
手書き入力文字が「7」の確率は .02%
手書き入力文字が「8」の確率は .08%
手書き入力文字が「9」の確率は .01%
手書き入力文字は
「5」ですか? (Y/N) y
7 回目
手書き入力文字が「0」の確率は .89%
手書き入力文字が「1」の確率は .00%
手書き入力文字が「2」の確率は .04%
手書き入力文字が「3」の確率は .00%
手書き入力文字が「4」の確率は .36%
手書き入力文字が「5」の確率は .40%
手書き入力文字が「6」の確率は 98.13%
手書き入力文字が「7」の確率は .00%
手書き入力文字が「8」の確率は .17%
手書き入力文字が「9」の確率は .00%
手書き入力文字は
「6」ですか? (Y/N) y
8 回目
手書き入力文字が「0」の確率は .00%
手書き入力文字が「1」の確率は .01%
手書き入力文字が「2」の確率は .00%
手書き入力文字が「3」の確率は .00%
手書き入力文字が「4」の確率は .00%
手書き入力文字が「5」の確率は .02%
手書き入力文字が「6」の確率は .00%
手書き入力文字が「7」の確率は 99.98%
手書き入力文字が「8」の確率は .00%
手書き入力文字が「9」の確率は .00%
手書き入力文字は
「7」ですか? (Y/N) y
9 回目
手書き入力文字が「0」の確率は .00%
手書き入力文字が「1」の確率は .00%
手書き入力文字が「2」の確率は .00%
手書き入力文字が「3」の確率は .01%
手書き入力文字が「4」の確率は .00%
手書き入力文字が「5」の確率は .00%
手書き入力文字が「6」の確率は .00%
手書き入力文字が「7」の確率は .00%
手書き入力文字が「8」の確率は 99.98%
手書き入力文字が「9」の確率は .01%
手書き入力文字は
「8」ですか? (Y/N) y
10 回目
手書き入力文字が「0」の確率は .00%
手書き入力文字が「1」の確率は .00%
手書き入力文字が「2」の確率は .00%
手書き入力文字が「3」の確率は .03%
手書き入力文字が「4」の確率は .00%
手書き入力文字が「5」の確率は .00%
手書き入力文字が「6」の確率は .00%
手書き入力文字が「7」の確率は .24%
手書き入力文字が「8」の確率は .00%
手書き入力文字が「9」の確率は 99.73%
手書き入力文字は
「9」ですか? (Y/N) y
正答率は 100 % です
Re: 手書き数字(文字)認識 - しばっち
2022/11/23 (Wed) 10:17:57
このプログラムは上のプログラムのメッセージ出力を(若干 ?)改良したものです。
メインルーチン等は同じですので計算そのものは上のプログラムと変わらないはずです。
このプログラムの実行には別途キャラ画像ファイルが必要です。下記ツール(Windows,Mac)でキャラ画像を作成しました。
(※画像サイズ400*400 喜,笑,楽,普,悲,怒の6種類のキャラ画像ファイルが必要です)
https://vroid.com/studio
また、下記ツールを使用して機械音声出力(Windows版)できます。☆声優さんの声で読み上げができたらもう言うことなし。
https://www.vector.co.jp/soft/winnt/art/se412443.html
なお、このプログラムではあんまりいじわるすると機嫌を損ねますので
嘘でもYキーを押下してあげてください。(笑)
2進モードで実行してください。
LET TESTNUM=10 ! 試行回数
LET SCALE=40 ! 表示倍率
LET DISPLAYSIZE=800 ! グラフィック画面表示サイズ
LET CHARSIZEX=400 ! キャラ画像サイズ
LET CHARSIZEY=400
! 学習データ読み込み
!!FILE GETOPENNAME CSVFILE$, "学習済データファイル|*.csv"
!!OPEN #1:NAME CSVFILE$,RECTYPE CSV
OPEN #1:NAME "学習済手書き数字.csv",RECTYPE CSV ! 保存先パスを指定
READ #1:DATASET$,MIDDLE1,IMAGESIZEX,IMAGESIZEY
LET INPUTNUM=IMAGESIZEX*IMAGESIZEY ! 入力系統数
LET OUTPUTNUM=LEN(DATASET$) ! 出力層 出力数
LET DATANUM=OUTPUTNUM ! データ数
DIM X(INPUTNUM,DATANUM),U(MIDDLE1),W1(MIDDLE1,INPUTNUM),B1(MIDDLE1),WY(MIDDLE1,OUTPUTNUM)
DIM BB(OUTPUTNUM),Y(OUTPUTNUM)
MAT READ #1:W1
MAT READ #1:B1
MAT READ #1:WY
MAT READ #1:BB
CLOSE #1
LET XSIZE=IMAGESIZEX*SCALE
LET YSIZE=IMAGESIZEY*SCALE
DIM M(0 TO XSIZE-1,0 TO YSIZE-1),IMAGE(6,0 TO CHARSIZEX-1,0 TO CHARSIZEY-1)
DIM MM(0 TO XSIZE-1,0 TO YSIZE-1),TEMP(0 TO CHARSIZEX-1,0 TO CHARSIZEY-1)
CALL INIT
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,1,1,0
SET LINE COLOR 1
SET TEXT HEIGHT .06
SET TEXT JUSTIFY "CENTER","HALF"
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 1,1,1
CLEAR
PLOT TEXT ,AT .5,.4:"文字データセットは"
PLOT TEXT ,AT .5,.6:DATASET$(1:1)&"~"&DATASET$(OUTPUTNUM:OUTPUTNUM)&"です"
DO
MOUSE POLL MX,MY,LEFT2,RIGHT2
LOOP UNTIL LEFT2=1 OR RIGHT2=1
DO
MOUSE POLL PX,PY,LEFT1,RIGHT1
LOOP WHILE LEFT1=1 OR RIGHT1=1
! 手書き文字認識開始
FOR K=1 TO TESTNUM
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 1,1,1
SET BITMAP SIZE XSIZE,YSIZE
SET VIEWPORT 0,1,0,1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET LINE COLOR 1
SET TEXT HEIGHT MAX(XSIZE,YSIZE)*.06
SET TEXT JUSTIFY "CENTER","HALF"
SET LINE WIDTH MAX(XSIZE,YSIZE)/MAX(IMAGESIZEX,IMAGESIZEY)
CLEAR
PLOT TEXT ,AT XSIZE*.5,YSIZE*.4:"手書き文字を"
PLOT TEXT ,AT XSIZE*.5,YSIZE*.6:"ここに入力してね"
DO
MOUSE POLL PX,PY,LEFT,RIGHT
IF GETKEYSTATE(27)<0 THEN STOP
! IF RIGHT=1 THEN STOP
LOOP UNTIL LEFT=1
CLEAR
DO
IF FL=0 THEN MOUSE POLL MX,MY,LEFT1,RIGHT1
IF LEFT1=1 AND FL=0 THEN LET FL=1
IF LEFT1=1 AND FL=1 THEN
MOUSE POLL PX,PY,LEFT2,RIGHT2
PLOT LINES:PX,PY;
END IF
IF LEFT2=0 AND FL=1 THEN
LET FL=0
LET FG=0
PLOT LINES
END IF
IF FG=0 AND GETKEYSTATE(27)<0 THEN ! やり直し
CLEAR
LET FG=1
END IF
LOOP UNTIL RIGHT2=1 OR RIGHT1=1 OR GETKEYSTATE(32)<0 ! 右クリック 又は スペースキー
ASK PIXEL ARRAY (0,0) M
MAT MM=M
CLEAR
SET BITMAP SIZE IMAGESIZEX,IMAGESIZEY
SET WINDOW 0,IMAGESIZEX-1,IMAGESIZEY-1,0
DRAW DISPLAY(M,XSIZE,YSIZE) WITH SCALE(1/SCALE)
ASK PIXEL ARRAY (0,0) M
FOR YY=0 TO IMAGESIZEY-1
FOR XX=0 TO IMAGESIZEX-1
LET X(XX+1+YY*IMAGESIZEX,1)=M(XX,YY)
NEXT XX
NEXT YY
CALL CALC
LET LMAX=0
FOR I=1 TO OUTPUTNUM
IF LMAX<Y(I) THEN
LET LMAX=Y(I)
LET ANSWER$=DATASET$(I:I)
END IF
NEXT I
CLEAR
SET BITMAP SIZE DISPLAYSIZE,DISPLAYSIZE
SET VIEWPORT 0,.5,.5,1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
DRAW DISPLAY(MM,XSIZE,YSIZE) ! 手書き文字再表示
CALL IMAGEDISPLAY("普")
SET COLOR MODE "REGULAR"
SET VIEWPORT 0,1,0,.5
SET WINDOW 0,1,1,0
CALL BOXFULL(0,0,1,1,0)
SET TEXT HEIGHT .06
SET TEXT JUSTIFY "LEFT","TOP"
SET TEXT COLOR 1
CALL WORD(0,0,STR$(K)&"回目 だよね !?")
WAIT DELAY 1
CALL WORD(0,.2,"さぁー はんてい するよー!!")
WAIT DELAY 1.5
CALL BOXFULL(0,0,1,1,0)
SELECT CASE LMAX
CASE 0 TO .2
CALL IMAGEDISPLAY("悲")
CALL WORD(0,0,"えーん、ぜんぜんわかんないよー 「"&ANSWER$&"」かなー")
DO
CHARACTER INPUT A$
LOOP UNTIL A$="Y" OR A$="y" OR A$="N" OR A$="n"
! LET A$=CONFIRM$("正解ですか ?")
IF A$(1:1)="Y" OR A$="y" THEN
CALL IMAGEDISPLAY("喜")
CALL WORD(0,.2,"やったー らっきー らっきー")
LET HIT=HIT+1
LET EMOTION=EMOTION+25
ELSE
CALL IMAGEDISPLAY("悲")
CALL WORD(0,.2,"ふぇーん やっぱりはずれたー")
LET EMOTION=EMOTION-5
END IF
CASE .2 TO .4
CALL IMAGEDISPLAY("悲")
CALL WORD(0,0,"えー、わかんなーい 「"&ANSWER$&"」であってるー")
DO
CHARACTER INPUT A$
LOOP UNTIL A$="Y" OR A$="y" OR A$="N" OR A$="n"
! LET A$=CONFIRM$("正解ですか ?")
IF A$(1:1)="Y" OR A$="y" THEN
CALL IMAGEDISPLAY("喜")
CALL WORD(0,.2,"やったー あたったー あたったー")
LET HIT=HIT+1
LET EMOTION=EMOTION+20
ELSE
CALL IMAGEDISPLAY("悲")
CALL WORD(0,.2,"あーん はずれたー そんなー!!")
LET EMOTION=EMOTION-10
END IF
CASE .4 TO .6
CALL IMAGEDISPLAY("普")
CALL WORD(0,0,"きっとこれはー、たぶん「"&ANSWER$&"」だよねー")
DO
CHARACTER INPUT A$
LOOP UNTIL A$="Y" OR A$="y" OR A$="N" OR A$="n"
! LET A$=CONFIRM$("正解ですか ?")
IF A$(1:1)="Y" OR A$="y" THEN
CALL IMAGEDISPLAY("普")
CALL WORD(0,.2,"やったー えっへん!?")
LET HIT=HIT+1
LET EMOTION=EMOTION+15
ELSE
CALL IMAGEDISPLAY("悲")
CALL WORD(0,.2,"えーん はずれたー はずれたよー")
LET EMOTION=EMOTION-20
END IF
CASE .6 TO .8
CALL IMAGEDISPLAY("楽")
CALL WORD(0,0,"これは「"&ANSWER$&"」だよねー")
DO
CHARACTER INPUT A$
LOOP UNTIL A$="Y" OR A$="y" OR A$="N" OR A$="n"
! LET A$=CONFIRM$("正解ですか ?")
IF A$(1:1)="Y" OR A$="y" THEN
CALL IMAGEDISPLAY("普")
CALL WORD(0,.2,"とうぜんだよねー")
LET HIT=HIT+1
LET EMOTION=EMOTION+10
ELSE
CALL IMAGEDISPLAY("怒")
CALL WORD(0,.2,"うっそだー そんなはずないよー")
LET EMOTION=EMOTION-30
END IF
CASE .8 TO 1
CALL IMAGEDISPLAY("喜")
CALL WORD(0,0,"エッヘン! これは絶対「"&ANSWER$&"」だよねー")
DO
CHARACTER INPUT A$
LOOP UNTIL A$="Y" OR A$="y" OR A$="N" OR A$="n"
! LET A$=CONFIRM$("正解ですか ?")
IF A$(1:1)="Y" OR A$="y" THEN
CALL IMAGEDISPLAY("笑")
CALL WORD(0,.2,"らくしょう! らくしょう!")
LET HIT=HIT+1
LET EMOTION=EMOTION+10
ELSE
CALL IMAGEDISPLAY("怒")
CALL WORD(0,.2,"うそ! うそ! うそ! ぜったいまちがってないもん!!")
LET EMOTION=EMOTION-50
END IF
END SELECT
WAIT DELAY 1
SELECT CASE EMOTION
CASE IS>160
CALL IMAGEDISPLAY("喜")
CALL WORD(0,.4,"きゃはは! きゃはは! イエーイ!! イエーイ!!")
CASE 120 TO 160
CALL IMAGEDISPLAY("喜")
CALL WORD(0,.4,"ぴーす! ぴーす!")
CASE 80 TO 120
CALL IMAGEDISPLAY("笑")
CALL WORD(0,.4,"わーい! わーい!")
CASE 40 TO 80
CALL IMAGEDISPLAY("楽")
CALL WORD(0,.4,"へっへっへっー だ !?")
CASE 0 TO 40
CALL IMAGEDISPLAY("普")
CALL WORD(0,.4,"よしっ がんばるぞー!?")
CASE -10 TO 0
CALL IMAGEDISPLAY("悲")
CALL WORD(0,.4,"やだっ! やだっ! やだっー!")
CASE -20 TO -10
CALL IMAGEDISPLAY("悲")
CALL WORD(0,.4,"ふん! べっー だ !")
CASE -30 TO -20
CALL IMAGEDISPLAY("怒")
CALL WORD(0,.4,"ぷいっ")
CASE -40 TO -30
CALL IMAGEDISPLAY("怒")
CALL WORD(0,.4,"もう しらないよーだっ !!")
CASE -50 TO -40
CALL IMAGEDISPLAY("怒")
CALL WORD(0,.4,"もうっ あんたとは くち きかないよーだっ べーっ!!")
STOP
CASE IS<-50
CALL IMAGEDISPLAY("怒")
CALL WORD(0,.4,"もうっ あんたなんか だいっ 嫌い!!! ふんっ!!")
STOP
END SELECT
WAIT DELAY 1.5
NEXT K
IF HIT=TESTNUM THEN
CALL IMAGEDISPLAY("喜")
CALL WORD(0,.6,"やったー! 全問正解したよー!!!")
ELSE
SELECT CASE EMOTION
CASE 0 TO 100
CALL IMAGEDISPLAY("普")
CALL WORD(0,.6,"正答率は "&USING$("###.#",HIT/TESTNUM*100)&"% だよー")
CASE 100 TO 200
CALL IMAGEDISPLAY("笑")
CALL WORD(0,.6,STR$(TESTNUM)&"回中 "&STR$(HIT)&" 回 あたったよー")
CASE ELSE
END SELECT
END IF
SUB CALC
FOR I1=1 TO MIDDLE1
LET U(I1)=B1(I1)
FOR J1=1 TO INPUTNUM
LET U(I1)=U(I1)+W1(I1,J1)*X(J1,1)
NEXT J1
LET U(I1)=ACT(U(I1))
NEXT I1
LET YSUM=0
FOR J2=1 TO OUTPUTNUM
LET Y(J2)=BB(J2)
FOR I2=1 TO MIDDLE1
LET Y(J2)=Y(J2)+U(I2)*WY(I2,J2)
NEXT I2
NEXT J2
FOR I2=1 TO OUTPUTNUM
LET YSUM=YSUM+EXP(Y(I2))
NEXT I2
FOR I2=1 TO OUTPUTNUM
LET Y(I2)=EXP(Y(I2))/YSUM ! SOFTMAX関数
NEXT I2
END SUB
SUB WORD(X,Y,MES$)
!!LET PATH$="K:\TOOL\softalk\" ! パス指定
SET VIEWPORT 0,1,0,.5
SET COLOR MODE "REGULAR"
SET WINDOW 0,1,1,0
PLOT TEXT ,AT X,Y:MES$
!! EXECUTE PATH$&"softalk.exe" WITH("/NM:女性01","/X:1","/Q:3","/W:"&CHR$(34)&MES$&CHR$(34)),NOQUOTES ! 音声読み上げ
END SUB
SUB INIT
LET CHARNUM=1
LET PATH$=".\data\キャラ"&STR$(CHARNUM)&"\" ! パス指定
SET COLOR MODE "NATIVE"
SET DRAW MODE HIDDEN
FOR I=1 TO 6
READ N$
DATA 喜,笑,楽,普,悲,怒
GLOAD PATH$&N$&".png"
LET CX=PIXELX(1)+1
LET CY=PIXELY(1)+1
SET WINDOW 0,CX-1,CY-1,0
ASK PIXEL ARRAY (0,0) TEMP
FOR YY=0 TO CY-1
FOR XX=0 TO CX-1
LET IMAGE(I,XX,YY)=TEMP(XX,YY)
NEXT XX
NEXT YY
NEXT I
SET DRAW MODE EXPLICIT
END SUB
SUB IMAGEDISPLAY(N$)
SET COLOR MODE "NATIVE"
IF N$="喜" THEN LET CC=1
IF N$="笑" THEN LET CC=2
IF N$="楽" THEN LET CC=3
IF N$="普" THEN LET CC=4
IF N$="悲" THEN LET CC=5
IF N$="怒" THEN LET CC=6
FOR YY=0 TO CHARSIZEY-1
FOR XX=0 TO CHARSIZEX-1
LET TEMP(XX,YY)=IMAGE(CC,XX,YY)
NEXT XX
NEXT YY
SET VIEWPORT .5,1,.5,1
SET WINDOW 0,CHARSIZEX-1,CHARSIZEY-1,0
MAT PLOT CELLS , IN 0,0; CHARSIZEX-1,CHARSIZEY-1:TEMP
END SUB
END
EXTERNAL FUNCTION ACT(X) ! 活性化関数
LET ACT=SIGMOID(X)
!LET ACT=TANH(X)
!LET ACT=RELU(X)
END FUNCTION
EXTERNAL FUNCTION SIGMOID(X)
LET SIGMOID=1/(1+EXP(-X))
END FUNCTION
EXTERNAL FUNCTION RELU(X)
LET RELU=MAX(0,X)
END FUNCTION
EXTERNAL FUNCTION SOFTSIGN(X)
LET SOFTSIGN=X/(1+ABS(X))
END FUNCTION
EXTERNAL PICTURE DISPLAY(M(,),XSIZE,YSIZE)
MAT PLOT CELLS , IN 0,0; XSIZE-1,YSIZE-1:M
END PICTURE
EXTERNAL SUB BOXFULL(X1,Y1,X2,Y2,C)
SET AREA COLOR C
PLOT AREA:X1,Y1;X2,Y1;X2,Y2;X1,Y2;X1,Y1
END SUB
機械学習実行プログラム - しばっち
2022/11/23 (Wed) 10:13:09
このプログラムは入力層256系統(16*16dot)、中間層1層でニューロン数50個、出力層は出力数10個(0-9)からなる
3層ニューラルネットワークです。
このプログラムでは機械学習用の手書き文字画像ファイルを読み込んで機械学習を行います。
このプログラムの実行には大変時間(数時間~半日程)がかかりますのでBASICAcc 又は ParactBASICを使用(2進モード,WIN32 or WIN64)してください。
https://hp.vector.co.jp/authors/VA008683/BASICAccJa.htm
https://hp.vector.co.jp/authors/VA008683/BASICAcc2Ja.htm
まず実行前に各パラメータをチェックしてください。
入力画像サイズは16*16としています。サイズが異なる場合は設定を書き換えてください。
文字データセットは数字(0-9)としています。アルファベットやひらがな漢字記号等異なる場合は設定を修正してください。
文字データセット数は数字なら0-9の10種を1セットとした連番ファイル数です。(アルファベット(A-Z)なら26種で1セット)
文字データセット数が100で文字データセットが数字(0-9)ならば10種*100で総画像ファイル数は1000枚となるはずです。
なお、全画像ファイルを走査しますので1枚でも不足すると途中でエラーが出ます。
中間層のニューロン数は50個としていますが、画像サイズを大きくした場合や文字数を増やした場合などは精度が不足しますので
ニューロン数も増やしてください。その分計算時間もかかります。
学習回数は「MNIST」という手書き数字データセット数が60000文字であることを参考にしています。
文字種(0-9)が10種なので各文字6000回ずつの学習回数を想定しています。(文字データセットがアルファベットなら26種なので6000回*26種で156000回!?)
学習回数は計算時間に直結しますが、回数が足りないと学習が進みませんので文字データセットに合わせてその都度調整(1文字あたり5000回~10000回程度!?)してください。
学習率についても変更可能ですが、大きくしすぎると振動してうまく収束せず、小さくしすぎると収束しきれず学習回数が不足します。
また、中間層の活性化関数にシグモイド関数を使用していますがこれも変更可能です。その時はその微分関数も同時に変更してください。
もし活性化関数を変更した場合、次の手書き文字検証プログラムでも同様に変更してください。
https://qiita.com/kuroitu/items/73cd401afd463a78115a
手書き文字データセットを格納したパスを指定してください。
BASICAcc 及び ParactBASICはコンパイル後にOUTPUTフォルダに実行ファイルを書き出しますので正しく(相対パス指定時)指定しておかないと
画像ファイルが見つからないとエラーが出ます。
学習が終わるとCSVファイル(学習済データファイル)を書き出して終了します。(保存先パスを指定してください。CSVファイル名は自由に設定してください)
なお学習が十分進んだと判断できる場合はスペースキーで強制終了できますが、それ以外の時は学習がまだ不十分ですので手書き文字認識率が低下します。
手書き文字サンプル募集でご協力頂ける方は、このプログラムで生成したCSVファイルを公開して頂いても構いませんが
もし、活性化関数を変更して実行された場合はその旨をお伝えいただくようお願いします。
なお、実際試してみたところ最終的な最大誤差は0.01程度となり出力されたCSVファイルは270Kバイト程のサイズとなりました。
BASICAcc(Win64)による計算時間は10分程でした。
プログラム的にはそんなに難しいところはないかと思います。
配列変数を初期化した後、画像データを読み込み配列変数を更新しているだけです。
下記プログラムについてはニューラルネットワーク、誤差逆伝播法、損失関数、活性化関数、偏微分、連鎖律、最急降下法等についての理解が必要かと思います。
下記プログラムの入力系統数を数千、数万(サンプリング44100Hzで1秒間なら44100系統)にしてニューロン数も数千個以上としてWAVファイルを読み込み
「あ」「い」「う」「え」「お」といった音声信号を学習させれば音声認識(※)すらも可能になるかもしれません。※但し、計算時間も数百倍数千倍(!?)
((※) 十進BASIC上で直接マイクから音声入力させるのは難しいかとは思いますが...理論上の話です)
RANDOMIZE
LET IMAGESIZEX=16 ! 入力画像サイズ
LET IMAGESIZEY=16
LET INPUTNUM=IMAGESIZEX*IMAGESIZEY ! 入力系統数
LET DATASET$="0123456789" ! 文字データセット
LET OUTPUTNUM=LEN(DATASET$) ! 出力層 出力数
LET DATANUM=OUTPUTNUM ! データ数
LET MIDDLE1=50 ! ニューロン数
LET RATE=1/16 ! 学習率η
LET DATASETNUM=50 ! 文字データセット(0-9)のセット数(連番ファイルの最後)
LET EPOCH=INT(6000/DATASETNUM+.5) ! 学習回数 1文字あたり6000回
LET PATH$=".\data\手書き数字\" ! 手書き文字画像保存先パスを指定
DIM X(INPUTNUM,DATANUM),U(MIDDLE1),W1(MIDDLE1,INPUTNUM),B1(MIDDLE1),TEACHER(OUTPUTNUM,DATANUM),WY(MIDDLE1,OUTPUTNUM)
DIM TEMPWY(MIDDLE1,OUTPUTNUM),U_(MIDDLE1),BB(OUTPUTNUM),Y(OUTPUTNUM),ERR(OUTPUTNUM),P(DATASETNUM),PP(DATANUM)
! 初期化
MAT TEACHER=IDN ! 教師データ(ONE-HOT表現)
FOR I=1 TO INPUTNUM
FOR J=1 TO MIDDLE1
LET W1(J,I)=NORMALRND(0,1/MIDDLE1)
NEXT J
NEXT I
FOR I=1 TO MIDDLE1
LET B1(I)=NORMALRND(0,1/MIDDLE1)
NEXT I
FOR I=1 TO OUTPUTNUM
FOR J=1 TO MIDDLE1
LET WY(J,I)=RND
NEXT J
LET BB(I)=RND
NEXT I
FOR I=1 TO DATASETNUM
LET P(I)=I
NEXT I
FOR I=1 TO DATANUM
LET PP(I)=I
NEXT I
PRINT "機械学習開始 ";TIME$
PRINT "学習回数 ";EPOCH;"epoch" ! エポック(学習単位)
FOR I=1 TO EPOCH
FOR J=1 TO DATASETNUM
SWAP P(J),P(INT(RND*DATASETNUM+1))
NEXT J
FOR J=1 TO DATANUM
SWAP PP(J),PP(INT(RND*DATANUM+1))
NEXT J
FOR K=1 TO DATASETNUM
LET L=P(K)
FOR J=1 TO DATANUM
LET NAME$=PATH$&DATASET$(J:J)&"-"&RIGHT$("00000"&STR$(L),5)&".png"
CALL PICTURELOAD(NAME$,SIZEX,SIZEY)
IF SIZEX<>IMAGESIZEX OR SIZEY<>IMAGESIZEY THEN
PRINT "画像サイズが指定サイズと異なっているものが混ざっています"
PRINT "画像ファイル";PATH$&DATASET$(J:J)&"-"&RIGHT$("00000"&STR$(L),5)&".png をチェックしてください"
STOP
END IF
DIM M(0 TO IMAGESIZEX-1,0 TO IMAGESIZEY-1)
ASK PIXEL ARRAY (0,0) M
FOR YY=0 TO IMAGESIZEY-1
FOR XX=0 TO IMAGESIZEX-1
IF M(XX,YY)<>0 AND M(XX,YY)<>1 THEN
PRINT "2値画像ではありません"
PRINT "画像ファイル";PATH$&DATASET$(J:J)&"-"&RIGHT$("00000"&STR$(L),5)&".png をチェックしてください"
STOP
END IF
LET X(XX+1+YY*IMAGESIZEX,J)=M(XX,YY)
NEXT XX
NEXT YY
NEXT J
FOR J=1 TO DATANUM
LET N=PP(J)
CALL CALC
FOR I1=1 TO OUTPUTNUM
LET ERR(I1)=Y(I1)-TEACHER(I1,N)
LET BB(I1)=BB(I1)-RATE*ERR(I1)
LET ERROR=MAX(-TEACHER(I1,N)*LOG(Y(I1)),ERROR)
! LET ERROR=MAX(-(TEACHER(I1,N)*LOG(Y(I1))+(1-TEACHER(I1,N))*LOG(1-Y(I1))),ERROR) ! クロスエントロピー
NEXT I1
MAT TEMPWY=WY
FOR J2=1 TO MIDDLE1
FOR I2=1 TO OUTPUTNUM
LET WY(J2,I2)=WY(J2,I2)-RATE*ERR(I2)*U(J2)
NEXT I2
NEXT J2
! 中間層1
FOR J1=1 TO MIDDLE1
FOR I1=1 TO OUTPUTNUM
LET B1(J1)=B1(J1)-RATE*ERR(I1)*TEMPWY(J1,I1)*DIFFACT(U_(J1))
NEXT I1
NEXT J1
FOR K1=1 TO INPUTNUM
FOR J1=1 TO MIDDLE1
FOR I1=1 TO OUTPUTNUM
LET W1(J1,K1)=W1(J1,K1)-RATE*ERR(I1)*TEMPWY(J1,I1)*DIFFACT(U_(J1))*X(K1,N)
NEXT I1
NEXT J1
NEXT K1
NEXT J
NEXT K
IF GETKEYSTATE(32)<0 THEN EXIT FOR ! 強制終了
PRINT "EPOCH ";I;": 最大誤差";ERROR;TIME$
LET ERROR=0
NEXT I
OPEN #1:NAME "学習済手書き数字.csv",RECTYPE CSV ! ファイル名、保存先を指定
WRITE #1:DATASET$,MIDDLE1,IMAGESIZEX,IMAGESIZEY
MAT WRITE #1:W1
MAT WRITE #1:B1
MAT WRITE #1:WY
MAT WRITE #1:BB
CLOSE #1
SUB CALC
FOR I1=1 TO MIDDLE1
LET U(I1)=B1(I1)
FOR J1=1 TO INPUTNUM
LET U(I1)=U(I1)+W1(I1,J1)*X(J1,N)
NEXT J1
LET U_(I1)=U(I1)
LET U(I1)=ACT(U(I1))
NEXT I1
LET YSUM=0
FOR J2=1 TO OUTPUTNUM
LET Y(J2)=BB(J2)
FOR I2=1 TO MIDDLE1
LET Y(J2)=Y(J2)+U(I2)*WY(I2,J2)
NEXT I2
NEXT J2
FOR I2=1 TO OUTPUTNUM
LET YSUM=YSUM+EXP(Y(I2))
NEXT I2
FOR I2=1 TO OUTPUTNUM
LET Y(I2)=EXP(Y(I2))/YSUM ! SOFTMAX関数
NEXT I2
END SUB
END
EXTERNAL FUNCTION ACT(X) ! 活性化関数
LET ACT=SIGMOID(X)
!LET ACT=TANH(X)
!LET ACT=RELU(X)
END FUNCTION
EXTERNAL FUNCTION DIFFACT(X) ! 活性化関数微分
LET DIFFACT=DIFFSIGMOID(X)
!!LET DIFFACT=DIFFTANH(X)
!!LET DIFFACT=DIFFRELU(X)
END FUNCTION
EXTERNAL FUNCTION SIGMOID(X)
LET SIGMOID=1/(1+EXP(-X))
END FUNCTION
EXTERNAL FUNCTION DIFFSIGMOID(X)
LET DIFFSIGMOID=SIGMOID(X)*(1-SIGMOID(X))
END FUNCTION
EXTERNAL FUNCTION RELU(X)
LET RELU=MAX(0,X)
END FUNCTION
EXTERNAL FUNCTION DIFFRELU(X)
IF X>0 THEN
LET DIFFRELU=1
ELSE
LET DIFFRELU=0
END IF
END FUNCTION
EXTERNAL FUNCTION DIFFTANH(X)
LET DIFFTANH=1/COSH(X)^2
END FUNCTION
EXTERNAL FUNCTION SOFTSIGN(X)
LET SOFTSIGN=X/(1+ABS(X))
END FUNCTION
EXTERNAL FUNCTION DIFFSOFTSIGN(X)
LET DIFFSOFTSIGN=1/(1+ABS(X))^2
END FUNCTION
EXTERNAL FUNCTION NORMALRND(MU,SIGMA) ! 正規分布乱数
LET Z=SQR(-2*LOG(RND))*SIN(2*PI*RND)
LET NORMALRND=MU+SIGMA*Z
END FUNCTION
EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 1,1,1
END SUB
「MNIST」サンプル画像表示 - しばっち
2022/11/23 (Wed) 10:10:28
「THE MNIST DATABASE」が公開している機械学習用データは通常ライブラリーを通して読み込みますが
十進BASIC上からでも読み込みは可能です。
下記URLから学習用画像データ(サイズ28*28 手書き数字60000文字)
train-images-idx3-ubyte.gz 及び そのラベルデータ
train-labels-idx1-ubyte.gz をダウンロード後解凍してください。
http://yann.lecun.com/exdb/mnist/
t10k-images-idx3-ubyte.gz 及び t10k-labels-idx1-ubyte.gz は
検証用の画像データとそのラベルデータです(手書き数字10000文字)
一般的な画像形式のファイルとは異なります。
ファイルへのパスを指定してください。
次々とサンプル画像表示しますので適当なところで中断してください。
OPTION CHARACTER BYTE
LET SCALE=30 ! 表示倍率
SET BITMAP SIZE 28*SCALE,28*SCALE
SET WINDOW 0,28,28,0
SET COLOR MODE "NATIVE"
SET TEXT HEIGHT 5
SET TEXT JUSTIFY "LEFT","TOP"
SET TEXT COLOR COLORINDEX(1,0,0)
CLEAR
OPEN #1:NAME "train-images.idx3-ubyte" ! 学習用画像データ(28*28dot)
OPEN #2:NAME "train-labels.idx1-ubyte" ! 学習用ラベルデータ(正解ラベル)
FOR I=1 TO 8
CHARACTER INPUT #2:A$
NEXT I
FOR I=1 TO 4
CHARACTER INPUT #1:A$
NEXT I
FOR I=1 TO 4
CHARACTER INPUT #1:A$
LET NUM=NUM*256+ORD(A$) ! 60000
NEXT I
FOR I=1 TO 4
CHARACTER INPUT #1:A$
LET XSIZE=XSIZE*256+ORD(A$) ! 28
NEXT I
FOR I=1 TO 4
CHARACTER INPUT #1:A$
LET YSIZE=YSIZE*256+ORD(A$) ! 28
NEXT I
FOR I=1 TO NUM
CHARACTER INPUT #2:LABEL$
FOR Y=0 TO YSIZE-1
FOR X=0 TO XSIZE-1
CHARACTER INPUT #1:A$
LET C=ORD(A$)
SET AREA COLOR COLORINDEX(C/255,C/255,C/255)
PLOT AREA:X,Y;X+1,Y;X+1,Y+1;X,Y+1;X,Y
NEXT X
NEXT Y
PLOT TEXT ,AT 0,0:STR$(ORD(LABEL$)) ! 正解ラベル表示
WAIT DELAY 1
CLEAR
NEXT I
CLOSE #1
CLOSE #2
END
----------------------------------------------------------------------------------------------
また、手書き数字60000文字の各数字(0-9)は6000個ずつ均等とはなっていないようです。
数字によって若干のばらつきがあるようです。
DIM P(0 TO 9)
OPTION CHARACTER BYTE
OPEN #1:NAME "train-labels.idx1-ubyte" ! 学習用ラベルデータ(正解ラベル)
FOR I=1 TO 4
CHARACTER INPUT #1:A$
NEXT I
FOR I=1 TO 4
CHARACTER INPUT #1:A$
LET NUM=NUM*256+ORD(A$)
NEXT I
FOR I=1 TO NUM
CHARACTER INPUT #1:LABEL$
LET N=ORD(LABEL$)
! PRINT I;N
LET P(N)=P(N)+1
NEXT I
CLOSE #1
FOR I=0 TO 9
PRINT I;":";P(I);"/";NUM
NEXT I
END
実行結果
0 : 5923 / 60000
1 : 6742 / 60000
2 : 5958 / 60000
3 : 6131 / 60000
4 : 5842 / 60000
5 : 5421 / 60000
6 : 5918 / 60000
7 : 6265 / 60000
8 : 5851 / 60000
9 : 5949 / 60000
手書き数字(文字)画像サンプル作成ツール - しばっち
2022/11/23 (Wed) 10:08:33
これは手書き数字(文字)認識のために必要な機械学習用の
手書き数字(文字)画像データを作成するツールです。
まず、このツールで機械学習用の手書き文字画像データを作成します。次にその画像データを読み込み機械学習させてCSVファイル(学習済データファイル)を生成します。
そしてCSVファイルを読み込んで手書き数字(文字)認識を行います。機械学習には時間がかかりますので、1度学習させてCSVファイルを生成しておけば手書き文字認識を
いつでも試せます。
入力画像サイズを16*16としていますが想定サイズは10*10~20*20程度でSCALE倍に拡大した
グラフィック画面にマウスで1文字ずつ手書きして手書き数字(文字)画像サンプルを作成していきます。
縮小化した時に太さが1となるようにペンの太さもSCALE倍しています。
表示倍率SCALEはモニターの解像度に合わせて設定してください。(SCALE=40にしています)
左クリックしたままマウスを移動(ドラッグ)させるとラインを描き、左ボタンを離すと止まります。
ESCキーでやり直せます。完成した時は右クリック又はスペースキーでファイルに保存して次へと進みます。
表示された文字を1文字ずつ描いてください。複数の文字を一度に描かないでください。文字認識は1文字ずつです。
制作過程の途中で画像サイズを変更しないでください。文字データセットの中で画像サイズが変わると設定が変わるため使用できなくなります。
文字データセットは数字(0-9)としています。
文字データセットは数字(0-9)の10種を1セットとして
それを6000~10000セット程作成して頂ければ十分かと思います。........というのは冗談です(笑) (1セット分の作業時間をおよそ1分とすると6000セットで100時間!?)
ですが、100~500セット分(1000~5000文字分)は欲しいところです。
作成時の注意点として1文字ずつを大きく描いてください。
描いた手書き文字は10*10~20*20程度に縮小してから保存しますので文字が潰れないよう描いてください。
もし、縮小化を他グラフィックツール等で行わせる時はアンチエイリアシング処理を行わなせないようにしてください。2値画像ではなくなります。
失敗した、はみ出した、一部が欠損、欠落している等はESCキーでやり直せます。
画像内にゴミ(不要な点や線)を含んだものはやり直してください。
また、画像ファイルをJPEG形式では保存しないでください。(PNG形式で保存するようにしています)
JPEG形式固有のノイズ(ブロックノイズ、モスキートノイズ等)が混じることがあります。
画像ファイル名はリネームしないでください。読み込みできなくなります。
複数の種類の文字データセット(アルファベット大文字と小文字等)を1つに合わせることは可能ですが
"C"と"c"や"P"と"p"、"W"と"w"など大きさによる違いは判別できません。
数字の"0 ゼロ"とアルファベット"O オー"なども同じデータセットに含めてしまうと判別できません。
逆に文字種を限定して画像サイズを少し大きくするようにしても構いません。アルファベットの文字データセットをA,B,C,D,Eの5種だけとしても構いません。
(DATASET$="ABCDE"とする)
------------------------------------- 手書き文字サンプル募集のお願い ---------------------------------------
機械学習させるには大量の画像サンプルが必要なことからこの掲示板で手書き文字サンプルを募集したいと思います。
まずは、画像サイズを決めてください。想定サイズは10*10~20*20程度ですが
作成者が自由に決めてもらって構いません。大きくしすぎると学習に時間がかかります。
サイズを大きくしたい時は文字数を減らしてください。
また正方形領域(16*16や20*20等)ではなく、8*16や16*12など長方形領域(縦長、横長)としても構いません。
文字データセットは数字(0-9)だけではなくアルファベットやひらがな漢字記号等でも構いません。
http://code.cside.com/3rdpage/jp/utf-8/
もし、描けるのならイラスト画でもいけるかと思いますが、DATASET$はそのイラスト画のタイトルで1文字としてください。
現状では先頭の1文字をその画像の正解ラベル(文字)とし、ハイフンに続いて連番(5桁)としたファイル名としています。
また、イラストフォントというものもあります。(※OS標準でインストールされているものがあります)
https://www.dafont.com/theme.php?cat=702
想定外の方法(紙に書いてスマホで撮影等)で作成したものは使用できません。
減色(2値化)、ノイズ除去等の処理は有効ですが、ぼかしやブレといった加工処理したものも使えません。
想定している画像サンプルはサイズ10*10~20*20程度で黒を0、白を1とした2値画像のみです。
赤青でも2値画像ですが規定外になります。
もし、ご協力頂ける方は適当なフォルダに格納後、下記URL等にアップロードしてください。(ZIP形式等にアーカイブ圧縮してからアップするとスムーズかもしれません)
アップロード後にサイト上に表示されたURLをこの掲示版にご投稿お願いします。手書き文字サンプル画像を当掲示板利用者みんなで共有できればと考えております。
また、学習済のCSVファイルを公開頂いても構いません。その方がすぐに試せていいのですが、CSVファイル内容物の当掲示板への直接書き込みはサイズが大きすぎて難しいかと思います。
https://gigafile.nu/
手書き文字は人それぞれに癖がありご自分で作成した手書き文字を使って学習させた方が認識率は上がりますが
手書き文字認識を色々と試してみたいという方のためにも宜しくお願いします。
私も色々試してみたいです。その時はこのページへの返信か新規にご投稿お願いします。
なお、機械学習用の手書き数字サンプルデータとしてネット上や多くの書籍で
紹介されている有名なデータセットに「THE MNIST DATABASE」があります。
60000文字分の学習用の手書き数字(0-9)とそのラベルデータが公開されています。
http://yann.lecun.com/exdb/mnist/
その画像サンプルを十進BASIC上で読み込むことは可能なのですが
以下の理由によりサンプルデータは自前で用意することとしました。
★画像サイズが28*28と大きい。
一般的には機械学習専用のライブラリーを使用しますので
マルチスレッドやGPU(CUDA)演算による高速に演算が可能ですが
当方にはそのような環境がありません。
※確かParactBASICはマルチスレッドに対応していたはずなので誰か(4~8スレッド程で)移植してくれないかなー
★サンプルがグレースケール画像になっている。
アンチエイリアシング処理によってグレースケール化(256階調)したものと思われます。
通常アンチエイリアシング処理をした方が階段状のギザギサが目立たずにいいのですが
こちらが想定している画像は黒を0(背景)、白を1(文字)とした2値画像です。
これはマウスで手書きした文字が2値画像であり仕様が異なります。
「MNIST」には学習用サンプルとその検証用テストデータも公開されていて
それを読み込んで学習結果を検証するようになっています。
★収録されているデータの「癖」が強すぎる。
サンプル画像を一度見ればわかるのですが手書き数字として収録されているデータに
一見して判読できないようなものまで含まれている。
なお、巷ではちまちまと時間をかけて画像サンプルを作っていくのではなく
たった1枚の画像から数百、数千枚もの画像サンプルを
一気に生成する(アフィン変換?、幾何学変換?、3次元的に回転!?)方法もあるようです。
(つまりは各文字種毎に一枚ずつ用意できればいい!?)
私が作成した手書き数字データセット(0-9)を下記URLに公開致します。(data.zip 5,814,916 バイト)
作成した文字データセット数はわずか50セット(手書き数字画像ファイル 10種*50セットで500枚)ですが
ご参考までにご利用ください。他に手書き数字(文字)認識検証プログラムで必要なキャラ画像(後述)も一緒に同梱しております。
https://36.gigafile.nu/0303-d5d5c50d73ed1e8109387192634181644
ダウンロード期限:2023年3月3日(金)
ダウンロードパスワード 設定していません
2進モードで実行してください。
LET SCALE=40 ! 表示倍率
LET IMAGESIZEX=16 ! 入力画像サイズ
LET IMAGESIZEY=16
LET XSIZE=IMAGESIZEX*SCALE
LET YSIZE=IMAGESIZEY*SCALE
DIM M(XSIZE,YSIZE)
LET PATH$=".\data\手書き数字\" ! ファイル保存先パス
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 1,1,1
SET LINE WIDTH MAX(XSIZE,YSIZE)/MAX(IMAGESIZEX,IMAGESIZEY)
SET LINE COLOR 1
SET TEXT HEIGHT MAX(XSIZE,YSIZE)*.06
SET TEXT JUSTIFY "CENTER","HALF"
LET DATASET$="0123456789" ! 文字データセット
!!LET DATASET$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
!!LET DATASET$="abcdefghijklmnopqrstuvwxyz"
!!LET DATASET$="あいうえおかがきぎくぐけげこごさざしじすずせぜそぞただちぢつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもやゆよらりるれろわゐゑをん"
!!LET DATASET$="アイウヴエオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモヤユヨラリルレロワヰヱヲン"
!!LET DATASET$="ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ"
!!LET DATASET$="αβγδεζηθικλμνξοπρστυφχψω"
!!LET DATASET$="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
!!LET DATASET$="+-*/!#$%&'()"
!!LET DATASET$="壱弐参肆伍陸漆捌玖拾"
!!LET DATASET$="ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ"
FOR N=1 TO 6000
FOR I=1 TO LEN(DATASET$)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
CLEAR
SET TEXT HEIGHT MAX(XSIZE,YSIZE)*.06
PLOT TEXT ,AT XSIZE*.5,YSIZE*.4:"マウスで文字"
PLOT TEXT ,AT XSIZE*.5,YSIZE*.6:"「"&DATASET$(I:I)&"」を描いてください"
SET TEXT HEIGHT MAX(XSIZE,YSIZE)*.02
PLOT TEXT ,AT XSIZE*.5,YSIZE*.9:PATH$&DATASET$(I:I)&"-"&RIGHT$("00000"&STR$(N),5)&".png"
DO
MOUSE POLL MX,MY,LEFT1,RIGHT1
LOOP UNTIL LEFT1=1
CLEAR
DO
IF FL=0 THEN MOUSE POLL MX,MY,LEFT1,RIGHT1
IF LEFT1=1 AND FL=0 THEN
LET FL=1
END IF
IF LEFT1=1 AND FL=1 THEN
MOUSE POLL PX,PY,LEFT2,RIGHT2
PLOT LINES:PX,PY;
END IF
IF LEFT2=0 AND FL=1 THEN
LET FL=0
LET FG=0
PLOT LINES
END IF
IF FG=0 AND GETKEYSTATE(27)<0 THEN ! やり直し
CLEAR
LET FG=1
END IF
LOOP UNTIL RIGHT2=1 OR RIGHT1=1 OR GETKEYSTATE(32)<0 ! 右クリック 又は スペースキー
ASK PIXEL ARRAY (0,0) M
CLEAR
SET BITMAP SIZE IMAGESIZEX,IMAGESIZEY
SET WINDOW 0,IMAGESIZEX-1,IMAGESIZEY-1,0
DRAW DISPLAY(M,XSIZE,YSIZE) WITH SCALE(1/SCALE)
GSAVE PATH$&DATASET$(I:I)&"-"&RIGHT$("00000"&STR$(N),5)&".png"
NEXT I
NEXT N
END
EXTERNAL PICTURE DISPLAY(M(,),XSIZE,YSIZE)
MAT PLOT CELLS , IN 0,0; XSIZE-1,YSIZE-1:M
END PICTURE
誤差逆伝播法(バックプロパゲーション) - しばっち
2022/10/02 (Sun) 10:18:47
入力層、中間層1層、出力層からなる3層ニューラルネットワークです
X1,X2は入力層からの入力です。
U1=SIGMOID(X1*WEIGHT1+X2*WEIGHT2+BIAS1) 中間層
U2=SIGMOID(X1*WEIGHT3+X2*WEIGHT4+BIAS2)
Y=U1*WEIGHT5+U2*WEIGHT6+BIAS3 出力層
活性化関数はシグモイド関数です。
シグモイド関数の定義は
SIGMOID(X)=1/(1+EXP(-X)) です。
またシグモイド関数の微分は
SIGMOID(X)'=(1-SIGMOID(X))*SIGMOID(X) になります。
損失関数L(誤差関数)は
L=.5*(Y-T)^2 です。
ここでYは予測値でTは教師データです。
損失関数LをYで偏微分すると
∂L/∂Y=Y-T (誤差) になります。
誤差逆伝播法では出力層から入力層へ(逆伝播)向かってこの誤差が伝播していきます。
出力層のWEIGHT5とWEIGHT6及びBIAS3から偏微分していきます。
出力層は
Y=U1*WEIGHT5+U2*WEIGHT6+BIAS3 ですので
∂Y/∂WEIGHT5=U1 ∂Y/∂WEIGHT6=U2 ∂Y/∂BIAS3=1
∂Y/∂U1=WEIGHT5 ∂Y/∂U2=WEIGHT6
次は中間層のWEIGHTとBIASを偏微分していきます。
中間層は
U1=SIGMOID(X1*WEIGHT1+X2*WEIGHT2+BIAS1)
U2=SIGMOID(X1*WEIGHT3+X2*WEIGHT4+BIAS2) ですので
∂U1/∂WEIGHT1=U1*(1-U1)*X1 ∂U1/∂WEIGHT2=U1*(1-U1)*X1
∂U1/∂BIAS1=U1*(1-U1)
∂U2/∂WEIGHT3=U2*(1-U2)*X1 ∂U2/∂WEIGHT4=U2*(1-U2)*X2
∂U2/∂BIAS2=U2*(1-U2)
になります。
これで全部出揃いましたのであとは連鎖律を用いて求めるだけです。
まずは出力層から
∂L/∂WEIGHT5=∂L/∂Y*∂Y/∂WEIGHT5=(Y-T)*U1
∂L/∂WEIGHT6=∂L/∂Y*∂Y/∂WEIGHT6=(Y-T)*U2
∂L/∂BIAS3=∂L/∂Y*∂Y/∂BIAS3=(Y-T)*1
次は中間層です。
∂L/∂WEIGHT1=∂L/∂Y*∂Y/∂U1*∂U1/∂WEIGHT1=(Y-T)*WEIGHT5*U1*(1-U1)*X1
∂L/∂WEIGHT2=∂L/∂Y*∂Y/∂U1*∂U1/∂WEIGHT2=(Y-T)*WEIGHT5*U1*(1-U1)*X2
∂L/∂WEIGHT3=∂L/∂Y*∂Y/∂U2*∂U2/∂WEIGHT3=(Y-T)*WEIGHT6*U2*(1-U2)*X1
∂L/∂WEIGHT4=∂L/∂Y*∂Y/∂U2*∂U2/∂WEIGHT4=(Y-T)*WEIGHT6*U2*(1-U2)*X2
∂L/∂BIAS1=∂L/∂Y*∂Y/∂U2*∂U2/∂BIAS1=(Y-T)*WEIGHT5*U1*(1-U1)
∂L/∂BIAS2=∂L/∂Y*∂Y/∂U2*∂U2/∂BIAS2=(Y-T)*WEIGHT6*U2*(1-U2)
これで全部の偏微分導関数が求められたのでそれを使って最急降下法で係数を更新していくだけです。
偏微分、連鎖律が分かれば下記プログラムは理解できると思います。
※このプログラムは単に連鎖律を使って求めた導関数から係数を更新しているだけです。
よく分からない方はネット検索や文献等で調べてください。
RANDOMIZE
DIM X1(4),X2(4),T(4)
LET RATE=1/32 ! 学習率η
FOR I=1 TO 4
READ X1(I),X2(I) ! 入力データ
! LET T(I)=BITAND(X1(I),X2(I)) ! 教師データ
! LET T(I)=BITOR(X1(I),X2(I))
LET T(I)=BITXOR(X1(I),X2(I))
NEXT I
DATA 0,0
DATA 0,1
DATA 1,0
DATA 1,1
LET WEIGHT1=RND ! 初期化
LET WEIGHT2=RND
LET WEIGHT3=RND
LET WEIGHT4=RND
LET WEIGHT5=RND
LET WEIGHT6=RND
LET BIAS1=RND
LET BIAS2=RND
LET BIAS3=RND
FOR I=1 TO 300000
LET L=INT(RND*4+1)
! 順伝播
LET U1=SIGMOID(X1(L)*WEIGHT1+X2(L)*WEIGHT2+BIAS1) ! 中間層1
LET U2=SIGMOID(X1(L)*WEIGHT3+X2(L)*WEIGHT4+BIAS2)
LET Y=U1*WEIGHT5+U2*WEIGHT6+BIAS3 ! 出力層 Y
!逆伝播 出力層から
LET L_Y=Y-T(L) ! ∂L/∂Y
LET Y_W5=U1
LET Y_W6=U2
LET Y_B3=1
LET TEMPW5=WEIGHT5
LET TEMPW6=WEIGHT6
LET WEIGHT5=WEIGHT5-RATE*L_Y*Y_W5 ! ∂L/∂W5=∂L/∂Y*∂Y/∂W5
LET WEIGHT6=WEIGHT6-RATE*L_Y*Y_W6 ! ∂L/∂W6=∂L/∂Y*∂Y/∂W6
LET BIAS3=BIAS3 -RATE*L_Y*Y_B3 ! ∂L/∂B3=∂L/∂Y*∂Y/∂B3
! 中間層へ
LET Y_U1=TEMPW5
LET Y_U2=TEMPW6
LET U1_W1=(1-U1)*U1*X1(L)
LET U1_W2=(1-U1)*U1*X2(L)
LET U2_W3=(1-U2)*U2*X1(L)
LET U2_W4=(1-U2)*U2*X2(L)
LET U1_B1=(1-U1)*U1
LET U2_B2=(1-U2)*U2
LET WEIGHT1=WEIGHT1-RATE*L_Y*Y_U1*U1_W1 ! ∂L/∂W1=∂L/∂Y*∂Y/∂U1*∂U1/∂W1
LET WEIGHT2=WEIGHT2-RATE*L_Y*Y_U1*U1_W2 ! ∂L/∂W2=∂L/∂Y*∂Y/∂U1*∂U1/∂W2
LET WEIGHT3=WEIGHT3-RATE*L_Y*Y_U2*U2_W3 ! ∂L/∂W3=∂L/∂Y*∂Y/∂U2*∂U2/∂W3
LET WEIGHT4=WEIGHT4-RATE*L_Y*Y_U2*U2_W4 ! ∂L/∂W4=∂L/∂Y*∂Y/∂U2*∂U2/∂W4
LET BIAS1=BIAS1 -RATE*L_Y*Y_U1*U1_B1 ! ∂L/∂B1=∂L/∂Y*∂Y/∂U1*∂U1/∂B1
LET BIAS2=BIAS2 -RATE*L_Y*Y_U2*U2_B2 ! ∂L/∂B2=∂L/∂Y*∂Y/∂U2*∂U2/∂B2
NEXT I
FOR I=1 TO 4 ! 学習データの検証
PRINT X1(I);"-";X2(I);"の時 ";
LET U1=SIGMOID(X1(I)*WEIGHT1+X2(I)*WEIGHT2+BIAS1) ! 中間層
LET U2=SIGMOID(X1(I)*WEIGHT3+X2(I)*WEIGHT4+BIAS2)
LET Y=U1*WEIGHT5+U2*WEIGHT6+BIAS3 ! 出力層
IF Y>.5 THEN PRINT 1; ELSE PRINT 0; ! 予測値
PRINT T(I) ! 正解データ
NEXT I
END
EXTERNAL FUNCTION SIGMOID(X)
LET SIGMOID=1/(1+EXP(-X))
END FUNCTION
ニューラルネットワーク(多層パーセプトロン) - しばっち
2022/10/02 (Sun) 10:15:43
入力層、中間層1層、出力層からなる3層のニューラルネットワークです。(※中間層(隠れ層)1層と出力層で2層と数える場合もあります)
中間層(隠れ層)があればどんな連続関数も近似できます。(※ニューラルネットワークの普遍性定理)
形式ニューロン(中間層がなく入力層と出力層だけのニューラルネットワーク)と違いXORも機械学習できます。
このプログラムでは損失関数(誤差関数)の偏微分を数値微分で求めて
最急降下法(勾配降下法)で係数(WEIGHT,BIAS)を更新しています。
ここでは損失関数Lを自由に設計できます。
損失関数(誤差関数)は教師データと予測値との誤差(ずれ)の大きさを表します。2乗誤差でここでは単純な2次関数です。
その最小値(極小値)L=0となる係数(weight,bias)を最急降下法(勾配降下法)で求めます。(最適化問題)
入力層では入力するデータ数を決めます。
入力が1系統(X1)なら X1*weight1+bias1
入力が2系統(X1,X2)なら X1*weight1+X2*weight2+bias1
入力が3系統(X1,X2,X3)なら X1*weight1+X2*weight2+X3*weight3+bias1
となります。
※入力が画像データ(サイズ 28*28)なら入力は28*28で784系統になります。
以下に損失関数Lの定義例を示します。(Tは教師データ X1,X2...は入力データ W1,W2,W3...はウェイト B1,B2,B3...はバイアス)
FUNCTION L(T,X1,X2,W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,B1,B2,B3,B4,B5) ! 損失関数 L
LET U1=ACT1(X1*W1+X2*W2+B1) !中間層1 ニューロン1
LET U2=ACT1(X1*W3+X2*W4+B2) ! ニューロン2
LET U3=ACT1(X1*W5+X2*W6+B3) ! ニューロン3
LET U4=ACT1(X1*W7+X2*W8+B4) ! ニューロン4
LET Y=ACT2(U1*W9+U2*W10+U3*W11+U4*W12+B5) ! 出力層Y ニューロン5
LET L=.5*(Y-T)^2
END FUNCTION
入力層2系統 中間層1層でニューロン4個 出力層にニューロン1個 3層ニューラルネットワーク
FUNCTION L(T,X1,X2,W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,W13,W14,W15,W16,W17,W18,B1,B2,B3,B4,B5,B6,B7) ! 損失関数 L
LET U1=ACT1(X1*W1+X2*W2+B1) ! 中間層1 ニューロン1
LET U2=ACT1(X1*W3+X2*W4+B2) ! ニューロン2
LET U3=ACT1(X1*W5+X2*W6+B3) ! ニューロン3
LET S1=ACT2(U1*W7+U2*W8+U3*W9+B4) ! 中間層2 ニューロン4
LET S2=ACT2(U1*W10+U2*W11+U3*W12+B5) ! ニューロン5
LET S3=ACT2(U1*W13+U2*W14+U3*W15+B6) ! ニューロン6
LET Y=ACT3(S1*W16+S2*W17+S3*W18+B7) ! 出力層 ニューロン7
LET L=.5*(Y-T)^2
END FUNCTION
入力層2系統 中間層2層で各層にニューロン3個ずつ 出力層にニューロン1個 4層ニューラルネットワーク
FUNCTION L(T,X1,X2,W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,W13,W14,B1,B2,B3,B4,B5,B6,B7) ! 損失関数 L
LET U1=ACT1(X1*W1+X2*W2+B1) ! 中間層1 ニューロン1
LET U2=ACT1(X1*W3+X2*W4+B2) ! ニューロン2
LET S1=ACT2(U1*W5+U2*W6+B3) ! 中間層2 ニューロン3
LET S2=ACT2(U1*W7+U2*W8+B4) ! ニューロン4
LET T1=ACT3(S1*W9+S2*W10+B5) ! 中間層3 ニューロン5
LET T2=ACT3(S1*W11+S2*W12+B6)! ニューロン6
LET Y=ACT4(T1*W13+T2*W14+B7) ! 出力層 ニューロン7
LET L=.5*(Y-T)^2
END FUNCTION
入力層2系統 中間層3層で各層にニューロン2個ずつ 出力層にニューロン1個 5層ニューラルネットワーク
ACTn(X)は活性化関数です。
ここで任意の活性化関数が使用できます。
https://qiita.com/kuroitu/items/73cd401afd463a78115a
出力層の活性化関数はここでは恒等関数 ACT(X)=Xで十分かと思います。
但し、注意点があります。
活性化関数にステップ関数は使えません。
シグモイド関数を中間層で多層化すると勾配消失問題が起きます。
ランプ関数(ReLU)は負数では発火しないので学習ができません。
ニューロンを増やす方と中間層を増やす方ではどちらがいいのかはよくわかりません。(両方増やせば問題ない!?)
最低必要なニューロン数や中間層の数をどうやって求めたらいいかについてはよくわかりません。(試行錯誤するしかない!?)
損失関数を設計して機械学習(ディープランニング)させたい時は
入力データ(範囲 -3~3程度 ?)の正規化などの処理等が必要な場合があります。
また、学習がうまく進まない(停滞期プラトー)や局所最適解や大域最適解に陥るなどの問題が発生することがあります。
入力データ(X1,X2,X3...)と教師データTが揃えば機械学習させることができます。
その場合はニューロン数や中間層の数に活性化関数や学習回数、学習率等を設定してください。
機械学習には教師あり、教師なし、強化学習の3種類があります。
このプログラムは教師あり学習の回帰で分類(2値分類、多値分類 ※手書き文字認識等)とは活性化関数や出力層が異なります。
下記プログラムはオンライン学習です。他にバッチ学習やミニバッチ学習といった手法もあります。
またニューラルネットワークにもいくつか種類があるようです。
なお、詳しいことはネット検索や書籍を参考にしてください。(私もまだまだ勉強中!!です)
※参考文献
https://www.amazon.co.jp/文系プログラマーだからこそ身につけたい-ディープラーニングの動きを理解するための数式入門-中西-達夫/dp/4802612664
RANDOMIZE
DIM T(4),X1(4),X2(4)
LET RATE=1/16 ! 学習率η
FOR I=1 TO 4
READ X1(I),X2(I) ! 入力データ
! LET T(I)=BITAND(X1(I),X2(I)) ! 教師データ AND演算
! LET T(I)=BITAND(BITNOT(BITAND(X1(I),X2(I))),1) ! 教師データ NAND演算
! LET T(I)=BITOR(X1(I),X2(I)) ! 教師データ OR演算
! LET T(I)=BITAND(BITNOT(BITOR(X1(I),X2(I))),1) ! 教師データ NOR演算
LET T(I)=BITXOR(X1(I),X2(I)) ! 教師データ XOR演算
NEXT I
DATA 0,0
DATA 0,1
DATA 1,0
DATA 1,1
LET WEIGHT1=RND ! 係数初期化
LET WEIGHT2=RND
LET WEIGHT3=RND
LET WEIGHT4=RND
LET WEIGHT5=RND
LET WEIGHT6=RND
LET BIAS1=RND
LET BIAS2=RND
LET BIAS3=RND
FOR I=1 TO 30000 ! 学習回数
LET N=INT(RND*4+1)
LET TEMPW1=WEIGHT1-RATE*DIFF(T(N),X1(N),X2(N),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,BIAS1,BIAS2,BIAS3,1) ! weight1=weight1-η*∂L/∂weight1 η:学習率 最急降下法(勾配降下法)
LET TEMPW2=WEIGHT2-RATE*DIFF(T(N),X1(N),X2(N),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,BIAS1,BIAS2,BIAS3,2) ! weight2=weight2-η*∂L/∂weight2
LET TEMPW3=WEIGHT3-RATE*DIFF(T(N),X1(N),X2(N),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,BIAS1,BIAS2,BIAS3,3) ! weight3=weight3-η*∂L/∂weight3
LET TEMPW4=WEIGHT4-RATE*DIFF(T(N),X1(N),X2(N),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,BIAS1,BIAS2,BIAS3,4) ! weight4=weight4-η*∂L/∂weight4
LET TEMPW5=WEIGHT5-RATE*DIFF(T(N),X1(N),X2(N),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,BIAS1,BIAS2,BIAS3,5) ! weight5=weight5-η*∂L/∂weight5
LET TEMPW6=WEIGHT6-RATE*DIFF(T(N),X1(N),X2(N),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,BIAS1,BIAS2,BIAS3,6) ! weight6=weight6-η*∂L/∂weight6
LET TEMPB1=BIAS1-RATE*DIFF(T(N),X1(N),X2(N),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,BIAS1,BIAS2,BIAS3,7) ! bias1=bias1-η*∂L/∂bias1
LET TEMPB2=BIAS2-RATE*DIFF(T(N),X1(N),X2(N),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,BIAS1,BIAS2,BIAS3,8) ! bias2=bias2-η*∂L/∂bias2
LET TEMPB3=BIAS3-RATE*DIFF(T(N),X1(N),X2(N),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,BIAS1,BIAS2,BIAS3,9) ! bias3=bias3-η*∂L/∂bias3
LET WEIGHT1=TEMPW1
LET WEIGHT2=TEMPW2
LET WEIGHT3=TEMPW3
LET WEIGHT4=TEMPW4
LET WEIGHT5=TEMPW5
LET WEIGHT6=TEMPW6
LET BIAS1=TEMPB1
LET BIAS2=TEMPB2
LET BIAS3=TEMPB3
NEXT I
FOR I=1 TO 4 ! 学習データの検証
PRINT X1(I);"-";X2(I);"の時 ";
LET U1=ACT1(X1(I)*WEIGHT1+X2(I)*WEIGHT2+BIAS1) ! 中間層1
LET U2=ACT1(X1(I)*WEIGHT3+X2(I)*WEIGHT4+BIAS2)
LET Y=ACT2(U1*WEIGHT5+U2*WEIGHT6+BIAS3) ! 出力層
IF Y>.5 THEN PRINT 1; ELSE PRINT 0; ! 予測値
PRINT T(I) ! 正解データ
NEXT I
END
EXTERNAL FUNCTION DIFF(T,X1,X2,W1,W2,W3,W4,W5,W6,B1,B2,B3,N) ! 数値偏微分
DIM DELTA(9)
LET H=1/128
LET DELTA(N)=H
LET DIFF=(L(T,X1,X2,W1+DELTA(1),W2+DELTA(2),W3+DELTA(3),W4+DELTA(4),W5+DELTA(5),W6+DELTA(6),B1+DELTA(7),B2+DELTA(8),B3+DELTA(9))-L(T,X1,X2,W1,W2,W3,W4,W5,W6,B1,B2,B3))/H
END FUNCTION
EXTERNAL FUNCTION L(T,X1,X2,W1,W2,W3,W4,W5,W6,B1,B2,B3) ! 損失関数 L
LET U1=ACT1(X1*W1+X2*W2+B1) ! 中間層1
LET U2=ACT1(X1*W3+X2*W4+B2)
LET Y=ACT2(U1*W5+U2*W6+B3) ! 出力層Y
LET L=.5*(Y-T)^2
END FUNCTION
EXTERNAL FUNCTION ACT1(X) ! 活性化関数1
LET ACT1=SIGMOID(X)
!LET ACT1=TANH(X)
!LET ACT1=SOFTSIGN(X)
END FUNCTION
EXTERNAL FUNCTION ACT2(X) ! 活性化関数2
LET ACT2=X ! 恒等関数
END FUNCTION
EXTERNAL FUNCTION SIGMOID(X) ! シグモイド関数
LET SIGMOID=1/(1+EXP(-X))
END FUNCTION
EXTERNAL FUNCTION SOFTSIGN(X)
LET SOFTSIGN=X/(1+ABS(X))
END FUNCTION
Re: ニューラルネットワーク(多層パーセプトロン) - しばっち
2022/10/02 (Sun) 10:17:32
ビット演算だけではおもしろくないので
簡単な関数(y=f(x))を定義してそれを機械学習させてみました。
入力1系統、中間層1層でニューロン6個、出力層からなる3層ニューラルネットワークです。
入力データの範囲等(-3~3程度 ?)に注意する必要があります。
ある程度の学習は進んでいる(学習曲線)ようでまあまあ近似はできているようです。
更にニューロンや中間層を増やしてみるともっといいかもしれません。
(※FUNCTION文では何個まで引数を渡せるのだろうか? 100個位ならいける!?)
RANDOMIZE
LET N=10
DIM XX(N),YY(N),P(N)
LET RATE=1/32 ! 学習率η
LET EPOCH=2000 ! 学習回数(エポック ※学習単位)
SET WINDOW -.1,1,-.1,1
DRAW GRID(.1,.1)
SET LINE COLOR 4
SET LINE WIDTH 3
FOR I=1 TO N
LET P(I)=I
LET XX(I)=(I-1)/(N-1) ! 入力データ 0~1
LET YY(I)=XX(I)^2 ! 教師データ Y=F(X)
PLOT LINES:XX(I),YY(I);
NEXT I
PLOT LINES
PAUSE "機械学習を始めます"
CLEAR
SET TEXT HEIGHT .05
SET TEXT COLOR 4
SET TEXT JUSTIFY "CENTER","HALF"
SET WINDOW 0,1,0,1
PLOT TEXT ,AT .5,.9:"学習曲線"
SET WINDOW -EPOCH/20,EPOCH,-.05,.4
SET LINE COLOR 1
SET LINE WIDTH 1
SET TEXT HEIGHT .01
DRAW GRID(EPOCH/10,.05)
LET WEIGHT1=RND ! 係数初期化
LET WEIGHT2=RND
LET WEIGHT3=RND
LET WEIGHT4=RND
LET WEIGHT5=RND
LET WEIGHT6=RND
LET WEIGHT7=RND
LET WEIGHT8=RND
LET WEIGHT9=RND
LET WEIGHT10=RND
LET WEIGHT11=RND
LET WEIGHT12=RND
LET BIAS1=RND
LET BIAS2=RND
LET BIAS3=RND
LET BIAS4=RND
LET BIAS5=RND
LET BIAS6=RND
LET BIAS7=RND
FOR I=1 TO EPOCH
FOR J=1 TO N
SWAP P(J),P(INT(RND*N+1))
NEXT J
FOR J=1 TO N
LET NN=P(J)
LET TEMPW1=WEIGHT1-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,1) ! 最急降下法(勾配降下法)
LET TEMPW2=WEIGHT2-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,2)
LET TEMPW3=WEIGHT3-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,3)
LET TEMPW4=WEIGHT4-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,4)
LET TEMPW5=WEIGHT5-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,5)
LET TEMPW6=WEIGHT6-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,6)
LET TEMPW7=WEIGHT7-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,7)
LET TEMPW8=WEIGHT8-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,8)
LET TEMPW9=WEIGHT9-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,9)
LET TEMPW10=WEIGHT10-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,10)
LET TEMPW11=WEIGHT11-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,11)
LET TEMPW12=WEIGHT12-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,12)
LET TEMPB1=BIAS1-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,13)
LET TEMPB2=BIAS2-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,14)
LET TEMPB3=BIAS3-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,15)
LET TEMPB4=BIAS4-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,16)
LET TEMPB5=BIAS5-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,17)
LET TEMPB6=BIAS6-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,18)
LET TEMPB7=BIAS7-RATE*DIFF(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7,19)
LET WEIGHT1=TEMPW1
LET WEIGHT2=TEMPW2
LET WEIGHT3=TEMPW3
LET WEIGHT4=TEMPW4
LET WEIGHT5=TEMPW5
LET WEIGHT6=TEMPW6
LET WEIGHT7=TEMPW7
LET WEIGHT8=TEMPW8
LET WEIGHT9=TEMPW9
LET WEIGHT10=TEMPW10
LET WEIGHT11=TEMPW11
LET WEIGHT12=TEMPW12
LET BIAS1=TEMPB1
LET BIAS2=TEMPB2
LET BIAS3=TEMPB3
LET BIAS4=TEMPB4
LET BIAS5=TEMPB5
LET BIAS6=TEMPB6
LET BIAS7=TEMPB7
LET LL=L(YY(NN),XX(NN),WEIGHT1,WEIGHT2,WEIGHT3,WEIGHT4,WEIGHT5,WEIGHT6,WEIGHT7,WEIGHT8,WEIGHT9,WEIGHT10,WEIGHT11,WEIGHT12,BIAS1,BIAS2,BIAS3,BIAS4,BIAS5,BIAS6,BIAS7)
LET ERR=MAX(LL,ERR)
NEXT J
! IF GETKEYSTATE(32)<0 OR ERR<1E-4 THEN EXIT FOR
IF I=1 OR MOD(I,100)=0 THEN
PLOT LINES:I,ERR;
PRINT "EPOCH";I;":最大誤差";ERR
LET ERR=0
END IF
NEXT I
PAUSE "学習した曲線を描きます"
CLEAR
SET WINDOW -.1,1,-.1,1
DRAW GRID(.1,.1)
SET LINE COLOR 2
FOR I=1 TO N ! 学習データの検証
LET U1=ACT1(XX(I)*WEIGHT1+BIAS1) ! 中間層1
LET U2=ACT1(XX(I)*WEIGHT2+BIAS2)
LET U3=ACT1(XX(I)*WEIGHT3+BIAS3)
LET U4=ACT1(XX(I)*WEIGHT4+BIAS4)
LET U5=ACT1(XX(I)*WEIGHT5+BIAS5)
LET U6=ACT1(XX(I)*WEIGHT6+BIAS6)
LET Y=ACT2(U1*WEIGHT7+U2*WEIGHT8+U3*WEIGHT9+U4*WEIGHT10+U5*WEIGHT11+U6*WEIGHT12+BIAS7) ! 出力層
PRINT I;":";"予測値";Y;"正解値";YY(I)
PLOT LINES:XX(I),Y;
NEXT I
PLOT LINES
SET LINE COLOR 4
PAUSE "正解の曲線を描きます"
FOR I=1 TO N
PLOT LINES :XX(I),YY(I);
NEXT I
END
EXTERNAL FUNCTION DIFF(Y,X1,W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,B1,B2,B3,B4,B5,B6,B7,N) ! 数値偏微分
DIM DELTA(19)
LET H=1/128
LET DELTA(N)=H
LET DIFF=(L(Y,X1,W1+DELTA(1),W2+DELTA(2),W3+DELTA(3),W4+DELTA(4),W5+DELTA(5),W6+DELTA(6),W7+DELTA(7),W8+DELTA(8),W9+DELTA(9),W10+DELTA(10),W11+DELTA(11),W12+DELTA(12),B1+DELTA(13),B2+DELTA(14),B3+DELTA(15),B4+DELTA(16),B5+DELTA(17),B6+DELTA(18),B7+DELTA(19))-L(Y,X1,W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,B1,B2,B3,B4,B5,B6,B7))/H
END FUNCTION
EXTERNAL FUNCTION L(T,X1,W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,B1,B2,B3,B4,B5,B6,B7) ! 損失関数 L
LET U1=ACT1(X1*W1+B1) ! 中間層1
LET U2=ACT1(X1*W2+B2)
LET U3=ACT1(X1*W3+B3)
LET U4=ACT1(X1*W4+B4)
LET U5=ACT1(X1*W5+B5)
LET U6=ACT1(X1*W6+B6)
LET Y=ACT2(U1*W7+U2*W8+U3*W9+U4*W10+U5*W11+U6*W12+B7) ! 出力層
LET L=.5*(Y-T)^2
END FUNCTION
EXTERNAL FUNCTION ACT1(X) ! 活性化関数1
!LET ACT1=SIGMOID(X)
!LET ACT1=SOFTSIGN(X)
!LET ACT1=TANH(X)
LET ACT1=RELU(X)
END FUNCTION
EXTERNAL FUNCTION ACT2(X) ! 活性化関数2
LET ACT2=X ! 恒等関数
END FUNCTION
EXTERNAL FUNCTION SIGMOID(X) ! シグモイド関数
LET SIGMOID=1/(1+EXP(-X))
END FUNCTION
EXTERNAL FUNCTION SOFTSIGN(X)
LET SOFTSIGN=X/(1+ABS(X))
END FUNCTION
EXTERNAL FUNCTION RELU(X) ! ランプ関数
LET RELU=MAX(0,X)
END FUNCTION
プログラム コード色分け - SHIRAISHI Kazuo
2022/09/06 (Tue) 17:55:23
入力時にプログラムコードの色分けができるようにしてみました。
Full BASICは予約語を最小限しか持たない言語なので,入力時に文法を確定することが困難です。
動作は不完全ですが,常識的に書かれたプログラムであれば正しく色分けされると思います。
分類は
構造文
宣言文
実行文
内部手続きの引数
文字列定数
注釈
行番号分岐
です。
とりあえずWindows版のみ公開しますが,Linux,MAC(intel)版も追って公開します。
https://osdn.net/projects/decimalbasic/releases/77711/
から,BASIC8120Ja.zipをダウンロードし,適宜のフォルダに展開してください。
BASICを起動したら,「オプション」メニューの「エディタ」を選択し,
「入力時に機能語を彩色する」をチェックしてください。
色の割り当ては変更可能です。
Re: プログラム コード色分け - SHIRAISHI Kazuo
2022/09/07 (Wed) 18:28:49
BASIC8120Ja.zipはデバッグモードを解除しないで公開していました。
BASIC8120Ja_Rev1.zipに改定します。
機械学習 - しばっち
2022/09/04 (Sun) 15:02:37
ここでは X=0なら1、X=1なら0となるNOT演算を教師データありで学習させます。
300回学習させてNOT演算を求めます。
不正解の時は係数(WEIGHT,BIAS)を修正しています。
前半は不正解が目立ちますが、後半ではそれが少なくなります。
このことは「学習が進んでいる」からと言えるかと思います。
学習後は正答率を表示して学習データを検証します。
それが全て正解していれば、学習は成功し間違っていれば失敗したと言えるかと思います。
最後に学習した係数を表示して終わります。
RANDOMIZE
DIM Y(2),X(2)
LET X(1)=0
LET X(2)=1
LET RATE=1/64 ! 学習率
LET N=300 ! 学習回数
LET Y(1)=BITAND(BITNOT(X(1)),1) ! 教師データ(正解データ) NOT演算
LET Y(2)=BITAND(BITNOT(X(2)),1)
LET WEIGHT=RND ! WEIGHT 初期値
LET BIAS=RND ! BIAS 初期値
FOR I=1 TO N
LET M=INT(RND*2+1)
LET XX=X(M)
LET YY=H(XX*WEIGHT+BIAS) ! 予測値
IF M=1 AND YY<>Y(1) THEN ! 正解と違うなら係数修正
LET BIAS=BIAS+RATE
END IF
IF M=2 AND YY<>Y(2) THEN
LET WEIGHT=WEIGHT-RATE
LET BIAS=BIAS-RATE
END IF
PRINT I;":";XX;"の時、予測値";YY;"正解値";Y(M);
IF YY=Y(M) THEN
PRINT "(正解)"
LET HIT=HIT+1
ELSE
PRINT "(不正解)"
LET MISS=MISS+1
END IF
NEXT I
PRINT "正答率";HIT/N
!!PRINT "誤答率";MISS/N
FOR I=1 TO 2 ! 学習データの検証
LET YY=H(X(I)*WEIGHT+BIAS)
PRINT X(I);"の時 NOT演算";YY;
IF YY=Y(I) THEN PRINT "(正解)" ELSE PRINT "(不正解)"
NEXT I
PRINT WEIGHT;BIAS ! 係数表示
END
EXTERNAL FUNCTION H(X) !活性化関数(ステップ関数)
IF X>0 THEN LET H=1 ELSE LET H=0
END FUNCTION
---------------------------------------------------------------------------------------------------------
次はAND演算です。
入力を2系統にし1000回学習させています。
上と同じように学習後は正答率を表示して学習したデータを検証し
最後に係数を表示して終わります。
RANDOMIZE
DIM Y(4),X1(4),X2(4)
FOR I=1 TO 4
READ X1(I),X2(I)
NEXT I
DATA 0,0
DATA 0,1
DATA 1,0
DATA 1,1
LET RATE=1/64 ! 学習率
LET N=1000 ! 学習回数
FOR I=1 TO 4
LET Y(I)=BITAND(X1(I),X2(I)) ! 教師データ(正解データ) AND演算
NEXT I
LET WEIGHT=RND ! WEIGHT 初期値
LET BIAS=RND ! BIAS 初期値
FOR I=1 TO N
LET M=INT(RND*4+1)
LET YY=H(X1(M)*WEIGHT+X2(M)*WEIGHT+BIAS) ! 予測値
IF M=1 AND YY<>Y(1) THEN ! 正解と違うなら係数修正
LET BIAS=BIAS-RATE
END IF
IF M=2 AND YY<>Y(2) THEN
LET BIAS=BIAS-RATE
END IF
IF M=3 AND YY<>Y(3) THEN
LET WEIGHT=WEIGHT-RATE
LET BIAS=BIAS-RATE
END IF
IF M=4 AND YY<>Y(4) THEN
LET WEIGHT=WEIGHT+RATE
LET BIAS=BIAS+RATE
END IF
PRINT I;":";X1(M);"-";X2(M);"の時、予測値";YY;"正解値";Y(M);
IF YY=Y(M) THEN
PRINT "(正解)"
LET HIT=HIT+1
ELSE
PRINT "(不正解)"
LET MISS=MISS+1
END IF
NEXT I
PRINT "正答率";HIT/N
!!PRINT "誤答率";MISS/N
FOR I=1 TO 4 ! 学習データの検証
LET YY=H(X1(I)*WEIGHT+X2(I)*WEIGHT+BIAS)
PRINT X1(I);"-";X2(I);"の時 AND演算";YY;
IF YY=Y(I) THEN PRINT "(正解)" ELSE PRINT "(不正解)"
NEXT I
PRINT WEIGHT;BIAS ! 係数表示
END
EXTERNAL FUNCTION H(X) ! 活性化関数(ステップ関数)
IF X>0 THEN LET H=1 ELSE LET H=0
END FUNCTION
---------------------------------------------------------------------------------------------------------
上のプログラムと非常に似ていますが、次はOR演算を学習させています。
RANDOMIZE
DIM Y(4),X1(4),X2(4)
FOR I=1 TO 4
READ X1(I),X2(I)
NEXT I
DATA 0,0
DATA 0,1
DATA 1,0
DATA 1,1
LET RATE=1/64 ! 学習率
LET N=1000 ! 学習回数
FOR I=1 TO 4
LET Y(I)=BITOR(X1(I),X2(I)) ! 教師データ(正解データ) OR演算
NEXT I
LET WEIGHT=RND ! WEIGHT 初期値
LET BIAS=RND ! BIAS 初期値
FOR I=1 TO N
LET M=INT(RND*4+1)
LET YY=H(X1(M)*WEIGHT+X2(M)*WEIGHT+BIAS) ! 予測値
IF M=1 AND YY<>Y(1) THEN ! 正解と違うなら係数修正
LET BIAS=BIAS-RATE
END IF
IF M=2 AND YY<>Y(2) THEN
LET BIAS=BIAS+RATE
END IF
IF M=3 AND YY<>Y(3) THEN
LET WEIGHT=WEIGHT+RATE
LET BIAS=BIAS+RATE
END IF
IF M=4 AND YY<>Y(4) THEN
LET WEIGHT=WEIGHT+RATE
LET BIAS=BIAS+RATE
END IF
PRINT I;":";X1(M);"-";X2(M);"の時、予測値";YY;"正解値";Y(M);
IF YY=Y(M) THEN
PRINT "(正解)"
LET HIT=HIT+1
ELSE
PRINT "(不正解)"
LET MISS=MISS+1
END IF
NEXT I
PRINT "正答率";HIT/N
!!PRINT "誤答率";MISS/N
FOR I=1 TO 4 ! 学習データの検証
LET YY=H(X1(I)*WEIGHT+X2(I)*WEIGHT+BIAS)
PRINT X1(I);"-";X2(I);"の時 OR演算";YY;
IF YY=Y(I) THEN PRINT "(正解)" ELSE PRINT "(不正解)"
NEXT I
PRINT WEIGHT;BIAS ! 係数表示
END
EXTERNAL FUNCTION H(X) ! 活性化関数(ステップ関数)
IF X>0 THEN LET H=1 ELSE LET H=0
END FUNCTION
---------------------------------------------------------------------------------------------------------
最後にXOR演算ですが残念ながら
このプログラムではXOR演算は求められません(※XORが非線形のため学習に失敗します)
RANDOMIZE
DIM Y(4),X1(4),X2(4)
FOR I=1 TO 4
READ X1(I),X2(I)
NEXT I
DATA 0,0
DATA 0,1
DATA 1,0
DATA 1,1
LET RATE=1/64 ! 学習率
LET N=1000 ! 学習回数
FOR I=1 TO 4
LET Y(I)=BITXOR(X1(I),X2(I)) ! 教師データ(正解データ) XOR演算
NEXT I
LET WEIGHT=RND ! WEIGHT 初期値
LET BIAS=RND ! BIAS 初期値
FOR I=1 TO N
LET M=INT(RND*4+1)
LET YY=H(X1(M)*WEIGHT+X2(M)*WEIGHT+BIAS) ! 予測値
IF M=1 AND YY<>Y(1) THEN ! 正解と違うなら係数修正
LET BIAS=BIAS-RATE
END IF
IF M=2 AND YY<>Y(2) THEN
LET BIAS=BIAS+RATE
END IF
IF M=3 AND YY<>Y(3) THEN
LET WEIGHT=WEIGHT+RATE
LET BIAS=BIAS+RATE
END IF
IF M=4 AND YY<>Y(4) THEN
LET WEIGHT=WEIGHT-RATE
LET BIAS=BIAS-RATE
END IF
PRINT I;":";X1(M);"-";X2(M);"の時、予測値";YY;"正解値";Y(M);
IF YY=Y(M) THEN
PRINT "(正解)"
LET HIT=HIT+1
ELSE
PRINT "(不正解)"
LET MISS=MISS+1
END IF
NEXT I
PRINT "正答率";HIT/N
!!PRINT "誤答率";MISS/N
FOR I=1 TO 4 ! 学習データの検証
LET YY=H(X1(I)*WEIGHT+X2(I)*WEIGHT+BIAS)
PRINT X1(I);"-";X2(I);"の時 XOR演算";YY;
IF YY=Y(I) THEN PRINT "(正解)" ELSE PRINT "(不正解)"
NEXT I
PRINT WEIGHT;BIAS ! 係数表示
END
EXTERNAL FUNCTION H(X) ! 活性化関数(ステップ関数)
IF X>0 THEN LET H=1 ELSE LET H=0
END FUNCTION
---------------------------------------------------------------------------------------------------------
以下は正解データでの検証になります
https://ja.wikipedia.org/wiki/活性化関数
PRINT "NOT"
FOR X=0 TO 1
PRINT X;":";H(-X+.5);BITAND(BITNOT(X),1)
NEXT X
PRINT "AND"
FOR X2=0 TO 1
FOR X1=0 TO 1
PRINT X1;"-";X2;":";H(X1+X2-1.5);BITAND(X1,X2)
NEXT X1
NEXT X2
PRINT "OR"
FOR X2=0 TO 1
FOR X1=0 TO 1
PRINT X1;"-";X2;":";H(X1+X2-.5);BITOR(X1,X2)
NEXT X1
NEXT X2
PRINT "XOR"
FOR X2=0 TO 1
FOR X1=0 TO 1
PRINT X1;"-";X2;":";H(X1+X2-2*H(X1+X2-1.5)-.5);BITXOR(X1,X2)
NEXT X1
NEXT X2
END
EXTERNAL FUNCTION H(X) ! ステップ関数
IF X>0 THEN LET H=1 ELSE LET H=0
END FUNCTION
Re: 機械学習 - しばっち
2022/09/19 (Mon) 14:38:21
プログラムを少し訂正してみました。
上記プログラム同様にビット演算を学習させていますが
XORはやはり失敗します。
また活性化関数を幾つか用意しました。
検証では予測値の50%以下を"0"
50%より大きいと"1"としています。
RANDOMIZE
DIM Y(4),X1(4),X2(4)
FOR I=1 TO 4
READ X1(I),X2(I)
LET Y(I)=BITAND(X1(I),X2(I)) ! 教師データ AND演算
! LET Y(I)=BITAND(BITNOT(BITAND(X1(I),X2(I))),1) ! 教師データ NAND演算
! LET Y(I)=BITOR(X1(I),X2(I)) ! 教師データ OR演算
! LET Y(I)=BITAND(BITNOT(BITOR(X1(I),X2(I))),1) ! 教師データ NOR演算
! LET Y(I)=BITAND(IMP(X1(I),X2(I)),1) ! 教師データ IMP演算
! LET Y(I)=BITXOR(X1(I),X2(I)) ! 教師データ XOR演算(失敗します)
NEXT I
DATA 0,0
DATA 0,1
DATA 1,0
DATA 1,1
LET RATE=1/16 ! 学習率
LET WEIGHT1=RND
LET WEIGHT2=RND
LET BIAS=RND
FOR I=1 TO 1000
LET N=INT(RND*4+1)
LET YY=ACT(X1(N)*WEIGHT1+X2(N)*WEIGHT2+BIAS)
LET ERR=YY-Y(N) ! 誤差
LET BIAS=BIAS-RATE*ERR
LET WEIGHT1=WEIGHT1-RATE*ERR*X1(N)
LET WEIGHT2=WEIGHT2-RATE*ERR*X2(N)
PRINT I;":";X1(N);"-";X2(N);"の時、予測値";YY;" 正解値";Y(N)
NEXT I
FOR I=1 TO 4 ! 学習データの検証
PRINT X1(I);"-";X2(I);"の時 ";
LET YY=ACT(X1(I)*WEIGHT1+X2(I)*WEIGHT2+BIAS)
IF YY>.5 THEN PRINT 1; ELSE PRINT 0; ! 予測値 50%より大きいなら1とする。
PRINT Y(I) ! 正解データ
NEXT I
PRINT WEIGHT1;WEIGHT2;BIAS
END
EXTERNAL FUNCTION ACT(X) ! 活性化関数
!LET ACT=H(X)
LET ACT=SIGMOID(X)
!LET ACT=RELU(X)
!LET ACT=SOFTSIGN(X)
!LET ACT=TANH(X)
END FUNCTION
EXTERNAL FUNCTION H(X) ! ステップ関数
IF X>0 THEN LET H=1 ELSE LET H=0
END FUNCTION
EXTERNAL FUNCTION SIGMOID(X) ! シグモイド関数
LET SIGMOID=1/(1+EXP(-X))
END FUNCTION
EXTERNAL FUNCTION RELU(X) ! ランプ関数
LET RELU=MAX(0,X)
END FUNCTION
EXTERNAL FUNCTION SOFTSIGN(X)
LET SOFTSIGN=X/(1+ABS(X))
END FUNCTION
EXTERNAL FUNCTION IMP(X,Y)
LET IMP=BITOR(BITNOT(X),Y) !'X IMP Y
END FUNCTION
Re: 機械学習 - しばっち
2022/09/19 (Mon) 14:42:19
回帰分析(単回帰)を機械学習と最小2乗法で求めています。
RANDOMIZE
LET N=50
CALL GINIT(800,800)
SET WINDOW -6,6,-6,6
DIM X(N),Y(N),A(2,2),B(2)
LET RATE=1/64
DRAW GRID(1,1)
LET AA=4*RND-2
LET BB=5*RND-2.5
PRINT AA;BB
FOR I=1 TO N
LET X(I)=RND*10-5
LET Y(I)=X(I)*RND*AA+RND*BB
! LET Y(I)=X(I)*AA+BB
CALL CIRCLEFULL(X(I),Y(I),.03,4)
NEXT I
LET WEIGHT=RND
LET BIAS=RND
FOR I=1 TO 300000
LET L=INT(RND*N+1)
LET YY=F(X(L),WEIGHT,BIAS)
LET ERR=Y(L)-YY !誤差
LET WEIGHT=WEIGHT+RATE*ERR*X(L)
LET BIAS=BIAS+RATE*ERR
NEXT I
SET COLOR 2 ! 赤
PLOT LINES:-6,F(-6,WEIGHT,BIAS);6,F(6,WEIGHT,BIAS)
PRINT WEIGHT;BIAS
FOR I=1 TO N
LET YY=F(X(I),BIAS,WEIGHT)
LET S=S+(Y(I)-YY)^2
NEXT I
PRINT "残差平方和 ";S
FOR I=1 TO N ! 最小2乗法
LET A(1,1)=A(1,1)+1
LET A(1,2)=A(1,2)+X(I)
LET A(2,1)=A(2,1)+X(I)
LET A(2,2)=A(2,2)+X(I)*X(I)
LET B(1)=B(1)+Y(I)
LET B(2)=B(2)+Y(I)*X(I)
NEXT I
MAT A=INV(A)
MAT B=A*B
SET LINE COLOR 7 ! 白
PLOT LINES:-6,F(-6,B(2),B(1));6,F(6,B(2),B(1))
PRINT B(2);B(1)
FOR I=1 TO N
LET YY=F(X(I),B(2),B(1))
LET SS=SS+(Y(I)-YY)^2
NEXT I
PRINT "残差平方和" ;SS
END
EXTERNAL FUNCTION F(X,A,B)
LET F=A*X+B
END FUNCTION
EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
FOR I=0 TO 7
SET COLOR MIX(I) BITAND(I,2)/2,BITAND(I,4)/4,BITAND(I,1)
NEXT I
CLEAR
END SUB
EXTERNAL SUB CIRCLEFULL(X,Y,RR,C)
SET COLOR C
DRAW DISK WITH SCALE(RR)*SHIFT(X,Y)
END SUB
k平均法 - しばっち
2022/08/14 (Sun) 15:03:23
k平均法
https://ja.wikipedia.org/wiki/K平均法#:~:text=k平均法(kへ,c-means)とも呼ばれる。
下記プログラムでは明らかに偏りのあるデータを4つのクラスター分け(グループ分け)します。
クラスター初期値が乱数なので、たまに想定通りのクラスター分けにならないことがあります。
(初期値によって結果が変わるため)
※このプログラムでは4つにしかクラスター分け(グループ分け)できません。
RANDOMIZE
LET N=100 ! データ数
DIM X(N),Y(N),P1(N),P2(N),P3(N),P4(N)
CALL GINIT(800,800)
LET MODE=1
SELECT CASE MODE
CASE 0
FOR I=1 TO N
LET X(I)=INT(RND*800)
LET Y(I)=INT(RND*800)
NEXT I
CASE 1 ! 偏りのあるデータ
FOR I=1 TO N/4
LET X(I)=200+INT(150*RND*COS(2*PI*RND))
LET Y(I)=150+INT(150*RND*SIN(2*PI*RND))
NEXT I
FOR I=N/4+1 TO N/2
LET X(I)=600+INT(150*RND*COS(2*PI*RND))
LET Y(I)=200+INT(150*RND*SIN(2*PI*RND))
NEXT I
FOR I=N/2+1 TO N*3/4
LET X(I)=150+INT(150*RND*COS(2*PI*RND))
LET Y(I)=600+INT(150*RND*SIN(2*PI*RND))
NEXT I
FOR I=N*3/4+1 TO N
LET X(I)=600+INT(150*RND*COS(2*PI*RND))
LET Y(I)=650+INT(150*RND*SIN(2*PI*RND))
NEXT I
END SELECT
FOR I=1 TO N
CALL CIRCLEFULL(X(I),Y(I),7,7) ! 各点の描画
NEXT I
PAUSE "色分けを始めます"
LET X1=INT(RND*800) !クラスター各初期値
LET Y1=INT(RND*800)
LET X2=INT(RND*800)
LET Y2=INT(RND*800)
LET X3=INT(RND*800)
LET Y3=INT(RND*800)
LET X4=INT(RND*800)
LET Y4=INT(RND*800)
DO
LET COUNT=COUNT+1 ! 繰り返し数
CLEAR
LET N1=0
LET N2=0
LET N3=0
LET N4=0
FOR I=1 TO N
LET L1=DISTANCE(X1,Y1,X(I),Y(I)) !各点との距離
LET L2=DISTANCE(X2,Y2,X(I),Y(I))
LET L3=DISTANCE(X3,Y3,X(I),Y(I))
LET L4=DISTANCE(X4,Y4,X(I),Y(I))
LET L=MIN(MIN(L1,L2),MIN(L3,L4)) ! 最小値
IF L=L1 THEN !クラスタ分類 1
LET N1=N1+1
LET P1(N1)=I
CALL LINE(X1,Y1,X(I),Y(I),1) !重心と各点を結ぶ
CALL CIRCLEFULL(X(I),Y(I),7,1)
END IF
IF L=L2 THEN !クラスタ分類 2
LET N2=N2+1
LET P2(N2)=I
CALL LINE(X2,Y2,X(I),Y(I),2)
CALL CIRCLEFULL(X(I),Y(I),7,2)
END IF
IF L=L3 THEN !クラスタ分類 3
LET N3=N3+1
LET P3(N3)=I
CALL LINE(X3,Y3,X(I),Y(I),3)
CALL CIRCLEFULL(X(I),Y(I),7,3)
END IF
IF L=L4 THEN !クラスタ分類 4
LET N4=N4+1
LET P4(N4)=I
CALL LINE(X4,Y4,X(I),Y(I),4)
CALL CIRCLEFULL(X(I),Y(I),7,4)
END IF
NEXT I
LET XX1=X1
LET YY1=Y1
LET XX2=X2
LET YY2=Y2
LET XX3=X3
LET YY3=Y3
LET XX4=X4
LET YY4=Y4
CALL AVERAGE(X,Y,P1,N1,X1,Y1) ! 重心の計算
CALL AVERAGE(X,Y,P2,N2,X2,Y2)
CALL AVERAGE(X,Y,P3,N3,X3,Y3)
CALL AVERAGE(X,Y,P4,N4,X4,Y4)
LOOP UNTIL X1=XX1 AND Y1=YY1 AND XX2=X2 AND YY2=Y2 AND XX3=X3 AND YY3=Y3 AND XX4=X4 AND YY4=Y4 ! 重心が変わらなくなるまで
PRINT COUNT;"回" ! 収束までの繰り返し数
PRINT N1;N2;N3;N4 ! 各クラスターのデータ個数(ここでは各クラスター数が均等であること)
PRINT X1;Y1 ! 各クラスターの重心
PRINT X2;Y2
PRINT X3;Y3
PRINT X4;Y4
END
EXTERNAL SUB AVERAGE(X(),Y(),P(),N,XX,YY) ! 重心計算
LET XX=0
LET YY=0
IF N>0 THEN
FOR I=1 TO N
LET XX=XX+X(P(I))
LET YY=YY+Y(P(I))
NEXT I
LET XX=INT(XX/N)
LET YY=INT(YY/N)
ELSE
LET XX=INT(RND*800)
LET YY=INT(RND*800)
END IF
END SUB
EXTERNAL FUNCTION DISTANCE(X1,Y1,X2,Y2) !距離
LET DISTANCE=INT(SQR((X1-X2)^2+(Y1-Y2)^2))
END FUNCTION
EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
FOR I=0 TO 7
SET COLOR MIX(I) BITAND(I,2)/2,BITAND(I,4)/4,BITAND(I,1)
NEXT I
CLEAR
END SUB
EXTERNAL SUB CIRCLEFULL(X,Y,RR,C)
SET COLOR C
DRAW DISK WITH SCALE(RR)*SHIFT(X,Y)
END SUB
EXTERNAL SUB LINE(XS,YS,XE,YE,C)
SET LINE COLOR C
PLOT LINES
PLOT LINES:XS,YS;XE,YE
END SUB
ベンチマークテスト - しばっち
2022/08/14 (Sun) 14:59:42
あくまで目安ですが十進BASICを用いてベンチマークテストをします。
但し、同一機、同一実行環境でも結果に多少ゆれが出ます。
1秒間に何回繰り返せるかテストします。
下記では1秒間を計るためTIME関数も呼び出していますので
TIME関数の精度に左右されます。
Windows版十進BASIC ver. 7.8.6.4 2進モードでの実行結果です。
LET M=10 ! 試行回数
FOR I=1 TO M
LET T=INT(TIME)
LET N=0
DO
LOOP WHILE T=INT(TIME)
DO
LET N=N+1
LOOP WHILE INT(TIME)-T<=1 ! 1秒間
PRINT I;N;"回/秒"
LET SUM=SUM+N
NEXT I
PRINT
PRINT "平均";SUM/M;"回/秒"
END
実行結果
1 6839866 回/秒
2 6899483 回/秒
3 6923341 回/秒
4 6865495 回/秒
5 6894248 回/秒
6 6918505 回/秒
7 6925543 回/秒
8 6938023 回/秒
9 6934770 回/秒
10 6914920 回/秒
平均 6905419.4 回/秒
---------------------------------------------------------------
2分法を用いて1秒間あたりのFORループ回数を計測します。
Windows版十進BASIC ver. 7.8.6.4 2進モードでの実行結果です。
実行結果に多少ゆれが出ます。
LET A=1
LET B=1000000000
DO
LET C=INT((A+B)/2)
LET T=TIME
FOR I=1 TO C ! 空ループ
NEXT I
PRINT A;B
IF TIME-T>=1 THEN LET B=C ELSE LET A=C
LOOP UNTIL ABS(A-B)<=1
PRINT A;"回/秒"
END
実行結果
1 1000000000
1 500000000
1 250000000
125000000 250000000
125000000 187500000
125000000 156250000
140625000 156250000
140625000 148437500
144531250 148437500
144531250 146484375
144531250 145507812
145019531 145507812
145263671 145507812
145263671 145385741
145324706 145385741
145324706 145355223
145324706 145339964
145324706 145332335
145324706 145328520
145324706 145326613
145324706 145325659
145324706 145325182
145324944 145325182
145324944 145325063
145324944 145325003
145324944 145324973
145324944 145324958
145324951 145324958
145324951 145324954
145324952 145324954
145324953 回/秒
---------------------------------------------------------------
グラフィック性能のベンチマークです。
1秒あたりの描画回数を求めています。
Windows版十進BASIC ver. 7.8.6.4 グラフィックサイズ 1001*1001
2進モードでの実行結果です。
実行結果に多少ゆれが出ます。
OPTION ANGLE DEGREES
RANDOMIZE
LET N=10000 ! 描画回数
LET M=5 ! 試行回数
LET S=0
FOR J=1 TO M
LET T=TIME
FOR I=1 TO N
SET COLOR INT(RND*256)
PLOT LINES:RND,RND;RND,RND
NEXT I
LET P=TIME-T
PRINT P;"秒";N/P;"ライン/秒"
LET S=S+N/P
WAIT DELAY 1
CLEAR
NEXT J
PRINT "平均";S/M;"ライン/秒"
PRINT
CLEAR
WAIT DELAY 2
LET S=0
FOR J=1 TO M
LET T=TIME
FOR I=1 TO N
SET COLOR INT(RND*256)
DRAW DISK WITH SCALE(.3*RND)*SHIFT(RND,RND)
NEXT I
LET P=TIME-T
PRINT P;"秒";N/P;"個/秒"
LET S=S+N/P
WAIT DELAY 1
CLEAR
NEXT J
PRINT "平均";S/M;"個/秒"
PRINT
CLEAR
WAIT DELAY 2
LET S=0
FOR J=1 TO M
LET T=TIME
FOR I=1 TO N
SET COLOR INT(RND*256)
DRAW TRIANGLE WITH SCALE(.3*RND)*ROTATE(RND*360)*SHIFT(RND,RND)
NEXT I
LET P=TIME-T
PRINT P;"秒";N/P;"ポリゴン/秒"
LET S=S+N/P
WAIT DELAY 1
CLEAR
NEXT J
PRINT "平均";S/M;"ポリゴン/秒"
END
EXTERNAL PICTURE TRIANGLE
PLOT AREA: 1,0;-.5,.866025403784439;-.5,-.866025403784439
END PICTURE
実行結果
.480000000003201 秒 20833.3333331944 ライン/秒
.239999999997963 秒 41666.6666670204 ライン/秒
.349999999998545 秒 28571.4285715474 ライン/秒
.25 秒 40000 ライン/秒
.259999999994761 秒 38461.5384623134 ライン/秒
平均 33906.5934068151 ライン/秒
2.34999999999854 秒 4255.31914893881 個/秒
2.33999999999651 秒 4273.50427351065 個/秒
2.33000000000175 秒 4291.84549355902 個/秒
2.31000000000495 秒 4329.00432899506 個/秒
2.37999999999738 秒 4201.68067227353 個/秒
平均 4270.27078345541 個/秒
.92000000000553 秒 10869.565217326 ポリゴン/秒
.810000000004948 秒 12345.6790122703 ポリゴン/秒
.799999999995634 秒 12500.0000000682 ポリゴン/秒
.790000000000873 秒 12658.2278480873 ポリゴン/秒
.759999999994761 秒 13157.8947369328 ポリゴン/秒
平均 12306.2733629369 ポリゴン/秒
ニュートン法 - しばっち
2022/08/14 (Sun) 14:56:13
2変数ニュートン法
DIM A(2,2),B(2)
LET X=10 ! 初期値 x
LET Y=10 ! 初期値 y
LET EPS=1E-8
DO
LET A(1,1)=DF(X,1,Y,0) !∂f/∂x
LET A(1,2)=DF(X,0,Y,1) !∂f/∂y
LET A(2,1)=DG(X,1,Y,0) !∂g/∂x
LET A(2,2)=DG(X,0,Y,1) !∂g/∂y
LET B(1)=F(X,Y)
LET B(2)=G(X,Y)
MAT A=INV(A)
MAT B=A*B
LET X=X-B(1)
LET Y=Y-B(2)
PRINT X,Y
LOOP UNTIL ABS(F(X,Y))<EPS AND ABS(G(X,Y))<EPS
PRINT X,Y
END
EXTERNAL FUNCTION DF(X,M,Y,N)
LET H=1/256
IF M>0 THEN
LET DF=(DF(X+H,M-1,Y,N)-DF(X-H,M-1,Y,N))/(2*H)
EXIT FUNCTION
END IF
IF N>0 THEN
LET DF=(DF(X,M,Y+H,N-1)-DF(X,M,Y-H,N-1))/(2*H)
EXIT FUNCTION
END IF
IF M=0 OR N=0 THEN LET DF=F(X,Y)
END FUNCTION
EXTERNAL FUNCTION DG(X,M,Y,N)
LET H=1/256
IF M>0 THEN
LET DG=(DG(X+H,M-1,Y,N)-DG(X-H,M-1,Y,N))/(2*H)
EXIT FUNCTION
END IF
IF N>0 THEN
LET DG=(DG(X,M,Y+H,N-1)-DG(X,M,Y-H,N-1))/(2*H)
EXIT FUNCTION
END IF
IF M=0 OR N=0 THEN LET DG=G(X,Y)
END FUNCTION
EXTERNAL FUNCTION F(X,Y)
LET F=X*X+Y*Y-5
END FUNCTION
EXTERNAL FUNCTION G(X,Y)
LET G=2*X*X+3*Y*Y-14
END FUNCTION
----------------------------------------------------------------------------
3変数ニュートン法
DIM A(3,3),B(3)
LET X=10 ! 初期値 x
LET Y=10 ! 初期値 y
LET Z=10 ! 初期値 z
LET EPS=1E-8
DO
LET A(1,1)=DF(X,1,Y,0,Z,0) !∂f/∂x
LET A(1,2)=DF(X,0,Y,1,Z,0) !∂f/∂y
LET A(1,3)=DF(X,0,Y,0,Z,1) !∂f/∂z
LET A(2,1)=DG(X,1,Y,0,Z,0) !∂g/∂x
LET A(2,2)=DG(X,0,Y,1,Z,0) !∂g/∂y
LET A(2,3)=DG(X,0,Y,0,Z,1) !∂g/∂z
LET A(3,1)=DH(X,1,Y,0,Z,0) !∂h/∂x
LET A(3,2)=DH(X,0,Y,1,Z,0) !∂h/∂y
LET A(3,3)=DH(X,0,Y,0,Z,1) !∂h/∂z
LET B(1)=F(X,Y,Z)
LET B(2)=G(X,Y,Z)
LET B(3)=H(X,Y,Z)
MAT A=INV(A)
MAT B=A*B
LET X=X-B(1)
LET Y=Y-B(2)
LET Z=Z-B(3)
PRINT X,Y,Z
LOOP UNTIL ABS(F(X,Y,Z))<EPS AND ABS(G(X,Y,Z))<EPS AND ABS(H(X,Y,Z))<EPS
PRINT X,Y,Z
END
EXTERNAL FUNCTION DF(X,N,Y,M,Z,L)
LET Δ=1/256
IF N>0 THEN
LET DF=(DF(X+Δ,N-1,Y,M,Z,L)-DF(X-Δ,N-1,Y,M,Z,L))/(2*Δ)
EXIT FUNCTION
END IF
IF M>0 THEN
LET DF=(DF(X,N,Y+Δ,M-1,Z,L)-DF(X,N,Y-Δ,M-1,Z,L))/(2*Δ)
EXIT FUNCTION
END IF
IF L>0 THEN
LET DF=(DF(X,N,Y,M,Z+Δ,L-1)-DF(X,N,Y,M,Z-Δ,L-1))/(2*Δ)
EXIT FUNCTION
END IF
IF N=0 OR M=0 OR L=0 THEN LET DF=F(X,Y,Z)
END FUNCTION
EXTERNAL FUNCTION DG(X,N,Y,M,Z,L)
LET Δ=1/256
IF N>0 THEN
LET DG=(DG(X+Δ,N-1,Y,M,Z,L)-DG(X-Δ,N-1,Y,M,Z,L))/(2*Δ)
EXIT FUNCTION
END IF
IF M>0 THEN
LET DG=(DG(X,N,Y+Δ,M-1,Z,L)-DG(X,N,Y-Δ,M-1,Z,L))/(2*Δ)
EXIT FUNCTION
END IF
IF L>0 THEN
LET DG=(DG(X,N,Y,M,Z+Δ,L-1)-DG(X,N,Y,M,Z-Δ,L-1))/(2*Δ)
EXIT FUNCTION
END IF
IF N=0 OR M=0 OR L=0 THEN LET DG=G(X,Y,Z)
END FUNCTION
EXTERNAL FUNCTION DH(X,N,Y,M,Z,L)
LET Δ=1/256
IF N>0 THEN
LET DH=(DH(X+Δ,N-1,Y,M,Z,L)-DH(X-Δ,N-1,Y,M,Z,L))/(2*Δ)
EXIT FUNCTION
END IF
IF M>0 THEN
LET DH=(DH(X,N,Y+Δ,M-1,Z,L)-DH(X,N,Y-Δ,M-1,Z,L))/(2*Δ)
EXIT FUNCTION
END IF
IF L>0 THEN
LET DH=(DH(X,N,Y,M,Z+Δ,L-1)-DH(X,N,Y,M,Z-Δ,L-1))/(2*Δ)
EXIT FUNCTION
END IF
IF N=0 OR M=0 OR L=0 THEN LET DH=H(X,Y,Z)
END FUNCTION
EXTERNAL FUNCTION F(X,Y,Z)
LET F=X*X+5*Y*Y+Z*Z-30
END FUNCTION
EXTERNAL FUNCTION G(X,Y,Z)
LET G=2*X*X+3*Y*Y+2*Z*Z-32
END FUNCTION
EXTERNAL FUNCTION H(X,Y,Z)
LET H=X*X+6*Y*Y+4*Z*Z-61
END FUNCTION
----------------------------------------------------------------------------
f(x,y,z)の最小値(極小値)を求める
LET X=10 ! 初期値 x
LET Y=10 ! 初期値 y
LET Z=10 ! 初期値 z
DO
LET X=X-DIFF(X,1,Y,0,Z,0)/DIFF(X,2,Y,0,Z,0)
LET Y=Y-DIFF(X,0,Y,1,Z,0)/DIFF(X,0,Y,2,Z,0)
LET Z=Z-DIFF(X,0,Y,0,Z,1)/DIFF(X,0,Y,0,Z,2)
LOOP UNTIL ABS(DIFF(X,1,Y,0,Z,0))<1E-8 AND ABS(DIFF(X,0,Y,1,Z,0))<1E-8 AND ABS(DIFF(X,0,Y,0,Z,1))<1E-8
PRINT X,Y,Z
END
EXTERNAL FUNCTION DIFF(X,N,Y,M,Z,L)
LET H=1/256
IF N>0 THEN
LET DIFF=(DIFF(X+H,N-1,Y,M,Z,L)-DIFF(X-H,N-1,Y,M,Z,L))/(2*H)
EXIT FUNCTION
END IF
IF M>0 THEN
LET DIFF=(DIFF(X,N,Y+H,M-1,Z,L)-DIFF(X,N,Y-H,M-1,Z,L))/(2*H)
EXIT FUNCTION
END IF
IF L>0 THEN
LET DIFF=(DIFF(X,N,Y,M,Z+H,L-1)-DIFF(X,N,Y,M,Z-H,L-1))/(2*H)
EXIT FUNCTION
END IF
IF N=0 OR M=0 OR L=0 THEN LET DIFF=F(X,Y,Z)
END FUNCTION
EXTERNAL FUNCTION F(X,Y,Z) ! f(x,y,z)=0で最小値(極小値)
LET F=(X+Y-Z+2)^2+(2*X-3*Y+5*Z-7)^2+(3*X+2*Y+4*Z-13)^2
!!LET F=(X*Y-2)^2+(Y*Z-3)^2+(X*Z-1)^2
END FUNCTION
最急降下法 - しばっち
2022/08/14 (Sun) 14:54:40
最急降下法
f(x,y,z)の最小値(極小値)となるx,y,zを求める。
LET X=10 ! 初期値 x
LET Y=10 ! 初期値 y
LET Z=10 ! 初期値 z
LET ALPHA=1/512
DO
LET X=X-ALPHA*DIFF(X,1,Y,0,Z,0)
LET Y=Y-ALPHA*DIFF(X,0,Y,1,Z,0)
LET Z=Z-ALPHA*DIFF(X,0,Y,0,Z,1)
LOOP UNTIL ABS(DIFF(X,1,Y,0,Z,0))<1E-8 AND ABS(DIFF(X,0,Y,1,Z,0))<1E-8 AND ABS(DIFF(X,0,Y,0,Z,1))<1E-8
PRINT X,Y,Z
END
EXTERNAL FUNCTION DIFF(X,N,Y,M,Z,L)
LET H=1/256
IF N>0 THEN
LET DIFF=(DIFF(X+H,N-1,Y,M,Z,L)-DIFF(X-H,N-1,Y,M,Z,L))/(2*H)
EXIT FUNCTION
END IF
IF M>0 THEN
LET DIFF=(DIFF(X,N,Y+H,M-1,Z,L)-DIFF(X,N,Y-H,M-1,Z,L))/(2*H)
EXIT FUNCTION
END IF
IF L>0 THEN
LET DIFF=(DIFF(X,N,Y,M,Z+H,L-1)-DIFF(X,N,Y,M,Z-H,L-1))/(2*H)
EXIT FUNCTION
END IF
IF N=0 OR M=0 OR L=0 THEN LET DIFF=F(X,Y,Z)
END FUNCTION
EXTERNAL FUNCTION F(X,Y,Z) ! f(x,y,z)=0で最小値(極小値)
LET F=(X+Y-Z+2)^2+(2*X-3*Y+5*Z-7)^2+(3*X+2*Y+4*Z-13)^2
!!LET F=(X*Y-2)^2+(Y*Z-3)^2+(X*Z-1)^2
END FUNCTION
モンテカルロ法 - しばっち
2022/08/14 (Sun) 14:53:07
モンテカルロ法により面積、体積を求めます
RANDOMIZE
DIM X(10)
LET N=1000000
LET R=.5
LET C=0
FOR I=1 TO N
FOR J=1 TO 2
LET X(J)=RND
NEXT J
IF X(1)*X(1)+X(2)*X(2)<=1 THEN LET C=C+1
NEXT I
PRINT C/N;PI*R^2
LET C=0
FOR I=1 TO N
FOR J=1 TO 3
LET X(J)=RND
NEXT J
IF X(1)*X(1)+X(2)*X(2)+X(3)*X(3)<=1 THEN LET C=C+1
NEXT I
PRINT C/N;4/3*PI*R^3
LET C=0
FOR I=1 TO N
FOR J=1 TO 4
LET X(J)=RND
NEXT J
IF X(1)*X(1)+X(2)*X(2)+X(3)*X(3)+X(4)*X(4)<=1 THEN LET C=C+1
NEXT I
PRINT C/N;1/2*PI^2*R^4
LET C=0
FOR I=1 TO N
FOR J=1 TO 5
LET X(J)=RND
NEXT J
IF X(1)*X(1)+X(2)*X(2)+X(3)*X(3)+X(4)*X(4)+X(5)*X(5)<=1 THEN LET C=C+1
NEXT I
PRINT C/N;8/15*PI^2*R^5
LET C=0
FOR I=1 TO N
FOR J=1 TO 6
LET X(J)=RND
NEXT J
IF X(1)*X(1)+X(2)*X(2)+X(3)*X(3)+X(4)*X(4)+X(5)*X(5)+X(6)*X(6)<=1 THEN LET C=C+1
NEXT I
PRINT C/N;1/6*PI^3*R^6
END
星型 - しばっち
2022/08/14 (Sun) 14:50:06
星型を描きます
SET WINDOW -1,1,1,-1
FOR I=2 TO 179
IF GCD(I,360)>1 AND I/GCD(I,360)>1 THEN
CALL POLY(0,0,.8,1,90,90+360*I/GCD(360,I),I)
WAIT DELAY .5
CLEAR
END IF
NEXT I
END
EXTERNAL FUNCTION GCD(M,N)
DO WHILE N<>0
LET T=MOD(M,N)
LET M=N
LET N=T
LOOP
LET GCD=M
END FUNCTION
EXTERNAL SUB POLY(X,Y,R,C,S,E,ST)
SET LINE COLOR C
PLOT LINES
FOR TH=S TO E STEP ST
LET X1=X+R*COS(TH*PI/180)
LET Y1=Y-R*SIN(TH*PI/180)
PLOT LINES: X1,Y1;
NEXT TH
END SUB
画像3D回転 - しばっち
2022/07/18 (Mon) 10:50:12
OPTION ANGLE DEGREES
DIM M(4,4)
FILE GETNAME N$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(N$,XSIZE,YSIZE)
DIM T(XSIZE,YSIZE)
SET WINDOW -1,1,1,-1
ASK PIXEL ARRAY (-1,-1) T
LOCATE VALUE NOWAIT(1),RANGE -1 TO 1,AT .5:X0
LOCATE VALUE NOWAIT(2),RANGE -1 TO 1,AT .5:Y0
LOCATE VALUE NOWAIT(3),RANGE -1 TO 1,AT .5:Z0
LOCATE VALUE NOWAIT(4),RANGE 1 TO 50,AT 10:THETA
LOCATE VALUE NOWAIT(5),RANGE 1/20 TO 1,AT 1/10:W
LOCATE VALUE NOWAIT(6),RANGE 1/10 TO 3,AT 1:S
DO
LET TH=MOD(TH+THETA,360)
LOCATE VALUE NOWAIT(1):X0 !原点と点(X0,Y0,Z0)を通る回転軸
LOCATE VALUE NOWAIT(2):Y0
LOCATE VALUE NOWAIT(3):Z0
LOCATE VALUE NOWAIT(4):THETA
LOCATE VALUE NOWAIT(5):WAITTIME
LOCATE VALUE NOWAIT(6):SCALE
LET SS=SQR(X0*X0+Y0*Y0+Z0*Z0)
IF SS>0 THEN
LET X=X0/SS
LET Y=Y0/SS
LET Z=Z0/SS
END IF
MAT M=IDN
LET M(1,1)=X*X*(1-COS(TH))+COS(TH) ! ロドリゲスの回転公式
LET M(1,2)=X*Y*(1-COS(TH))+Z*SIN(TH)
LET M(1,3)=X*Z*(1-COS(TH))-Y*SIN(TH)
LET M(2,1)=Y*X*(1-COS(TH))-Z*SIN(TH)
LET M(2,2)=Y*Y*(1-COS(TH))+COS(TH)
LET M(2,3)=Y*Z*(1-COS(TH))+X*SIN(TH)
LET M(3,1)=Z*X*(1-COS(TH))+Y*SIN(TH)
LET M(3,2)=Z*Y*(1-COS(TH))-X*SIN(TH)
LET M(3,3)=Z*Z*(1-COS(TH))+COS(TH)
DRAW TEST(T) WITH M*SCALE(SCALE)
SET DRAW MODE EXPLICIT
WAIT DELAY WAITTIME
SET DRAW MODE HIDDEN
CLEAR
LOOP
END
EXTERNAL PICTURE TEST(T(,))
MAT PLOT CELLS, IN -1,-1; 1,1:T
END PICTURE
EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
!SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB
MAT PLOT CELLでフリーズ - しばっち
2022/07/18 (Mon) 10:48:23
Windows版十進BASIC ver. 7.8.6.4にて
MAT PLOT CELLS文で一瞬フリーズしたようになります。
RANDOMIZE
LET XSIZE=800
LET YSIZE=800
SET BITMAP SIZE XSIZE,YSIZE
DIM T(XSIZE,YSIZE)
OPTION ANGLE DEGREES
LET ZTH=0 ! z軸のまわりの回転角
LET XTH=0 ! x軸のまわりの回転角初期値
LET YTH=0 ! y軸のまわりの回転角初期値
DIM M(4,4),POINT(4),ROTX(4,4),ROTY(4,4)
LET XS=-1
LET XE=1
LET YS=-1
LET YE=1
SET WINDOW XS,XE,YE,YS
SET DRAW MODE HIDDEN
FOR I=1 TO 300
SET COLOR INT(RND*256)
DRAW DISK WITH SCALE(RND*.2)*SHIFT(XS+RND*(XE-XS),YS+RND*(YE-YS))
NEXT I
ASK PIXEL ARRAY (XS,YS) T
CLEAR
DO
LET XTH=MOD(XTH+5,360) ! フリーズする
LET YTH=MOD(YTH+6,360)
! LET XTH=MOD(XTH+SQR(50),360) ! フリーズしない
! LET YTH=MOD(YTH+SQR(60),360)
MAT M=ROTATE(ZTH)
MAT ROTX=IDN ! x軸のまわりの回転
LET ROTX(2,2)=COS(XTH)
LET ROTX(2,3)=SIN(XTH)
LET ROTX(3,2)=-SIN(XTH)
LET ROTX(3,3)=COS(XTH)
MAT ROTY=IDN ! y軸のまわりの回転
LET ROTY(1,1)=COS(YTH)
LET ROTY(1,3)=-SIN(YTH)
LET ROTY(3,1)=SIN(YTH)
LET ROTY(3,3)=COS(YTH)
MAT M=M*ROTX*ROTY
DRAW TEST(T,XS,XE,YS,YE) WITH M
SET DRAW MODE EXPLICIT
WAIT DELAY .1
SET DRAW MODE HIDDEN
CLEAR
LOOP
END
EXTERNAL PICTURE TEST(T(,),XS,XE,YS,YE)
MAT PLOT CELLS, IN XS,YS;XE,YE:T
END PICTURE
Re: MAT PLOT CELLでフリーズ - SHIRAISHI Kazuo
2022/07/22 (Fri) 17:18:29
ご報告ありがとうございました。
変換行列の逆行列が求まらないとき順方向の変換で描画するので遅くなります。
次の570~610行のように逆行列が存在しないときは描画しないことにすれば速くなります。
100 RANDOMIZE
110 LET XSIZE=801
120 LET YSIZE=801
130 SET BITMAP SIZE XSIZE,YSIZE
140 DIM T(XSIZE,YSIZE)
150 OPTION ANGLE DEGREES
160 LET ZTH=0 ! z軸のまわりの回転角
170 LET XTH=0 ! x軸のまわりの回転角初期値
180 LET YTH=0 ! y軸のまわりの回転角初期値
190 DIM M(4,4),POINT(4),ROTX(4,4),ROTY(4,4)
200 LET XS=-1
210 LET XE=1
220 LET YS=-1
230 LET YE=1
240 SET WINDOW XS,XE,YE,YS
250 SET DRAW MODE HIDDEN
260 FOR I=1 TO 300
270 SET COLOR INT(RND*256)
280 DRAW DISK WITH SCALE(RND*.2)*SHIFT(XS+RND*(XE-XS),YS+RND*(YE-YS))
290 NEXT I
300 ASK PIXEL ARRAY (XS,YS) T
310 CLEAR
320 DO
330 LET XTH=MOD(XTH+5,360) ! フリーズする
340 LET YTH=MOD(YTH+6,360)
350 ! LET XTH=MOD(XTH+SQR(50),360) ! フリーズしない
360 ! LET YTH=MOD(YTH+SQR(60),360)
370 MAT M=ROTATE(ZTH)
380 MAT ROTX=IDN ! x軸のまわりの回転
390 LET ROTX(2,2)=COS(XTH)
400 LET ROTX(2,3)=SIN(XTH)
410 LET ROTX(3,2)=-SIN(XTH)
420 LET ROTX(3,3)=COS(XTH)
430 MAT ROTY=IDN ! y軸のまわりの回転
440 LET ROTY(1,1)=COS(YTH)
450 LET ROTY(1,3)=-SIN(YTH)
460 LET ROTY(3,1)=SIN(YTH)
470 LET ROTY(3,3)=COS(YTH)
480 MAT M=M*ROTX*ROTY
490 DRAW TEST(T,XS,XE,YS,YE) WITH M
500 SET DRAW MODE EXPLICIT
510 WAIT DELAY .1
520 SET DRAW MODE HIDDEN
530 CLEAR
540 LOOP
550 END
560 EXTERNAL PICTURE TEST(T(,),XS,XE,YS,YE)
570 DIM m(4,4)
580 MAT m=TRANSFORM
590 IF m(1,1)*m(2,2)-m(1,2)*m(2,1)<>0 THEN
600 MAT PLOT CELLS, IN XS,YS;XE,YE:T
610 END IF
620 END PICTURE
Re: MAT PLOT CELLでフリーズ - しばっち
2022/07/24 (Sun) 16:17:02
OPTION ANGLE DEGREES
FILE GETNAME N$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(N$,XSIZE,YSIZE)
DIM T(XSIZE,YSIZE)
LET ZTH=0 ! z軸のまわりの回転角
LET XTH=0 ! x軸のまわりの回転角初期値
LET YTH=0 ! y軸のまわりの回転角初期値
DIM M(4,4),ROTX(4,4),ROTY(4,4)
LET XS=-1
LET XE=1
LET YS=-1
LET YE=1
SET WINDOW XS,XE,YE,YS
ASK PIXEL ARRAY (XS,YS) T
LOCATE VALUE NOWAIT(1),RANGE -50 TO 50,AT 10:XTHETA
LOCATE VALUE NOWAIT(2),RANGE -50 TO 50,AT 10:YTHETA
LOCATE VALUE NOWAIT(3),RANGE -50 TO 50,AT 10:ZTHETA
LOCATE VALUE NOWAIT(4),RANGE 1/20 TO 1,AT 1/10:WAITTIME
LOCATE VALUE NOWAIT(5),RANGE 1/10 TO 3,AT 1:SCALE
LOCATE VALUE NOWAIT(6),RANGE -3 TO 3,AT 0:XMOVE
LOCATE VALUE NOWAIT(7),RANGE -3 TO 3,AT 0:YMOVE
LOCATE VALUE NOWAIT(8),RANGE -3 TO 3,AT 0:ZMOVE
DO
LOCATE VALUE NOWAIT(1):XTHETA
LOCATE VALUE NOWAIT(2):YTHETA
LOCATE VALUE NOWAIT(3):ZTHETA
LOCATE VALUE NOWAIT(4):WAITTIME
LOCATE VALUE NOWAIT(5):SCALE
LOCATE VALUE NOWAIT(6):XMOVE
LOCATE VALUE NOWAIT(7):YMOVE
LOCATE VALUE NOWAIT(8):ZMOVE
LET XTH=MOD(XTH+XTHETA,360)
LET YTH=MOD(YTH+YTHETA,360)
LET ZTH=MOD(ZTH+ZTHETA,360)
IF ABS(ABS(XTH)-90)<1E-3 OR ABS(ABS(YTH)-90)<1E-3 OR ABS(ABS(XTH)-270)<1E-3 OR ABS(ABS(YTH)-270)<1E-3 THEN
CLEAR
ELSE
MAT M=ROTATE(ZTH)
MAT ROTX=IDN ! x軸のまわりの回転
LET ROTX(2,2)=COS(XTH)
LET ROTX(2,3)=SIN(XTH)
LET ROTX(3,2)=-SIN(XTH)
LET ROTX(3,3)=COS(XTH)
MAT ROTY=IDN ! y軸のまわりの回転
LET ROTY(1,1)=COS(YTH)
LET ROTY(1,3)=-SIN(YTH)
LET ROTY(3,1)=SIN(YTH)
LET ROTY(3,3)=COS(YTH)
LET M(4,1)=XMOVE
LET M(4,2)=YMOVE
LET M(4,3)=ZMOVE
LET M(4,4)=1
MAT M=M*ROTX*ROTY
DRAW TEST(T,XS,XE,YS,YE) WITH M*SCALE(SCALE)
END IF
SET DRAW MODE EXPLICIT
WAIT DELAY WAITTIME
SET DRAW MODE HIDDEN
CLEAR
LOOP
END
EXTERNAL PICTURE TEST(T(,),XS,XE,YS,YE)
DIM M(4,4)
MAT M=TRANSFORM
IF DET(M)<>0 THEN
MAT PLOT CELLS, IN XS,YS;XE,YE:T
ELSE
CLEAR
END IF
END PICTURE
EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
!SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB
MAT PLOT CELLでエラー - しばっち
2022/07/18 (Mon) 10:46:49
Windows版十進BASIC ver. 7.8.6.4にて
SET WINDOW文でMAT PLOT CELLSの挙動が
おかしくなるようです。
Exception raised
MAT PLOT CELLS, IN 0,0;1,1:T
EXTYPE 11085
とエラー表示されます。
RANDOMIZE
LET XSIZE=800
LET YSIZE=800
SET BITMAP SIZE XSIZE,YSIZE
DIM T(XSIZE,YSIZE)
OPTION ANGLE DEGREES
SET WINDOW 0,1,0,1 ! 異常
!!SET WINDOW 0,1,1,0 ! 正常
FOR I=1 TO 100
SET COLOR INT(RND*256)
DRAW DISK WITH SCALE(RND*.2)*SHIFT(RND,RND)
NEXT I
ASK PIXEL ARRAY (0,0) T
CLEAR
WAIT DELAY .1
MAT PLOT CELLS, IN 0,0;1,1:T
END
Re: MAT PLOT CELLでエラー - SHIRAISHI Kazuo
2022/07/19 (Tue) 07:52:31
ご報告ありがとうございました。
調べてみます。
Re: MAT PLOT CELLでエラー - SHIRAISHI Kazuo
2022/07/20 (Wed) 18:13:17
ASK PIXEL ARRAY には,左上の頂点を指定することになっています。
SET WINDOW 0,1,0,1 を実行すると左上頂点は(0,1)なので
ASK PIXEL ARRAY (0,1) T
とすべきところなのだと思います。
白石先生に質問です - 名無しさん
2022/06/19 (Sun) 11:59:08
十進bのステートメント、
(Character) input #1,if missing exit~
はMicrosoft basicの
While not eof(n)
に相当する訳ですが、
この両者は全く同じ機能なのでしょうか、それともeofだけでなく、全ての例外に反応して終了してしまうコマンドなのでしょーか?
教えて下さい。
予告:
この次はもっと混み入った質問をします
Re: 白石先生に質問です - SHIRAISHI Kazuo
2022/06/19 (Sun) 19:08:29
十進BASICはFull BASICの中核ファイルのみを対象としているので,
INPUT #n で EXIT... が実行されるのはINPUT文を実行しようとしたときファイルの終わりが検出された場合です。
実行途中のエラーは対象外です。
Re: Re: 白石先生に質問です - 名無しさん
2022/06/30 (Thu) 10:16:37
ご回答ありがとうございました。
掲示板の構造が、縦一列でなく、ツリー構造になっているので、長い間気付かないでいました。
参考になりました
formula x^2 - 2 y^2 = 1 - たろさ
2022/06/12 (Sun) 10:03:13
DECLARE EXTERNAL FUNCTION LLOG
OPTION ARITHMETIC DECIMAL_HIGH
!formula x^2 - 2 y^2 = 1
LET s=2*SQR(2)
FOR n=1 TO 200
LET x=(1/2)*((3-s)^n+(3 + s)^n)
LET y=(3+s)^n/s-(3-s)^n/s
!PRINT x;y
PRINT ROUND(LLOG(x-y*SQR(2))/LLOG(3-2*SQR(2)))/n;ROUND(x);ROUND(y)
NEXT n
END
EXTERNAL FUNCTION LLOG(X)
OPTION ARITHMETIC DECIMAL_HIGH
IF X<=0 THEN
CAUSE EXCEPTION 3004
ELSEIF X<1 THEN
LET LLOG=-LLOG(1/X)
ELSEIF X>3 THEN
LET LLOG=2*LLOG(SQR(X))
ELSE ! 1<=x<=3
LET H=(X-1)/(X+1) ! 0<=h<=0.5
LET T=0
LET N=1
LET K=H
LET H2=H^2
DO
LET T=T+K/N
LET N=N+2
LET K=K*H2
LOOP UNTIL K<=1E-120
LET LLOG=2*T
END IF
END FUNCTION
!1000桁モードで利用する指数関数
EXTERNAL FUNCTION LEXP(x)
OPTION ARITHMETIC DECIMAL_HIGH
FUNCTION s(y,n)
LET t=y*x/n
IF ABS(t)<=EPS(0) THEN
LET s=y+t
ELSE
LET s=y+s(t,n+1)
END IF
END FUNCTION
LET LEXP=s(1,1)
END FUNCTION
計算結果
1 3 2
1 17 12
1 99 70
1 577 408
1 3363 2378
1 19601 13860
1 114243 80782
1 665857 470832
1 3880899 2744210
1 22619537 15994428
1 131836323 93222358
1 768398401 543339720
1 4478554083 3166815962
1 26102926097 18457556052
1 152139002499 107578520350
Pythagorean Triples a,b,c, b-a=1 - たろさ
2022/06/08 (Wed) 14:09:38
!Pythagorean Triples a,b,c, b-a=1
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
FOR n=1 TO z
LET G=(((-1)*(3 - 2*SQR(2))^n - (3 + 2*SQR(2))^n)/2)*(-1)
LET W(n)=G
NEXT n
LET x= W(1)
FOR n=2 TO z
LET WR(n)= ROUND(x)
LET x=x+W(n)
NEXT n
FOR n=2 TO 400
LET a=WR(n)
LET b=a+1
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
!PRINT a;TAB(35);b;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
3 4 5 1
20 21 29 1
119 120 169 1
696 697 985 1
4059 4060 5741 1
23660 23661 33461 1
137903 137904 195025 1
803760 803761 1136689 1
4684659 4684660 6625109 1
27304196 27304197 38613965 1
159140519 159140520 225058681 1
927538920 927538921 1311738121 1
5406093003 5406093004 7645370045 1
31509019100 31509019101 44560482149 1
183648021599 183648021600 259717522849 1
1070379110496 1070379110497 1513744654945 1
6238626641379 6238626641380 8822750406821 1
36361380737780 36361380737781 51422757785981 1
211929657785303 211929657785304 299713796309065 1
1235216565974040 1235216565974041 1746860020068409 1
7199369738058939 7199369738058940 10181446324101389 1
41961001862379596 41961001862379597 59341817924539925 1
244566641436218639 244566641436218640 345869461223138161 1
1425438846754932240 1425438846754932241 2015874949414289041 1
8308066439093374803 8308066439093374804 11749380235262596085 1
48422959787805316580 48422959787805316581 68480406462161287469 1
282229692287738524679 282229692287738524680 399133058537705128729 1
1644955193938625831496 1644955193938625831497 2326317944764069484905 1
9587501471344016464299 9587501471344016464300 13558774610046711780701 1
55880053634125472954300 55880053634125472954301 79026329715516201199301 1
325692820333408821261503 325692820333408821261504 460599203683050495415105 1
ピタゴラスイッチ 的思考 だれかがどこかで♪
https://www.nhk.or.jp/minna/songs/MIN202206_01/
Re: Pythagorean Triples a,b,c, b-a=1 - たろさ
2022/06/08 (Wed) 14:35:36
的思考 段取りオン♪
高精度計算サイト
(((-(3 - 2 sqrt(2))^n - (3 + 2 sqrt(2))^n)/2)*(-1))
変数 1,1,100
計算結果
1 3
2 17
3 99
4 577
5 3363
6 19601
7 114243
8 665857
https://oeis.org/A114336
https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
DATA 3
DATA 20
DATA 119
DATA 696
DATA 4059
DATA 23660
DATA 137903
DATA 803760
DATA 4684659
DATA 27304196
DATA 159140519
DATA 927538920
DATA 5406093003
DATA 31509019100
(n+1) - n
3
17 数 17 素数 (7th)
99 3^2*11
577 数 577 素数 (106th)
3363 3*19*59
19601 17*1153
114243 3*113*337
665857 数 665857 素数 (54014th)
3880899 3^3*11*73*179
22619537 17*241*5521
131836323 3*43*89*11483
768398401 97*577*13729
4478554083 3*22307*66923
26102926097 17*1535466241
(n+1) - n ~
formula
Pythagorean Triples a,b,c, b-a=7 - たろさ
2022/06/10 (Fri) 02:39:25
!Pythagorean Triples a,b,c, b-a=7
!https://oeis.org/A058529
!https://oeis.org/A117474
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
FOR n=1 TO z
LET G=(((-1)*(3 - 2*SQR(2))^n - (3 + 2*SQR(2))^n)/2)*(-1)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET cc=cc+1
! PRINT n;WR(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
LET WR(n)=(WR(cc)+WR(cc+2))*2
LET cc=cc+2
! PRINT n;WR(n)
NEXT n
LET a=5
FOR n=1 TO 400
LET a=a+WR(n)
!PRINT n;a
LET b=a+7
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
!PRINT a;TAB(35);b;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
5 12 13 1
8 15 17 1
48 55 73 1
65 72 97 1
297 304 425 1
396 403 565 1
1748 1755 2477 1
2325 2332 3293 1
10205 10212 14437 1
13568 13575 19193 1
59496 59503 84145 1
79097 79104 111865 1
346785 346792 490433 1
461028 461035 651997 1
2021228 2021235 2858453 1
2687085 2687092 3800117 1
11780597 11780604 16660285 1
15661496 15661503 22148705 1
68662368 68662375 97103257 1
91281905 91281912 129092113 1
400193625 400193632 565959257 1
532029948 532029955 752403973 1
2332499396 2332499403 3298652285 1
3100897797 3100897804 4385331725 1
13594802765 13594802772 19225954453 1
18073356848 18073356855 25559586377 1
79236317208 79236317215 112057074433 1
105339243305 105339243312 148972186537 1
461823100497 461823100504 653116492145 1
613962102996 613962103003 868273532845 1
2691702285788 2691702285795 3806641878437 1
3578433374685 3578433374692 5060669010533 1
15688390614245 15688390614252 22186734778477 1
20856638145128 20856638145135 29495740530353 1
91438641399696 91438641399703 129313766792425 1
121561395496097 121561395496104 171913774171585 1
532943457783945 532943457783952 753695865976073 1
708511734831468 708511734831475 1001986904499157 1
3106222105303988 3106222105303995 4392861429064013 1
4129509013492725 4129509013492732 5840007652823357 1
これが初めて出来た時
ピタゴラスイッチ 的思考 だれかがどこかで♪ ~【4K】Michael Jackson - Captain EO 1986 Disneyland
https://youtu.be/znJvyrxflH8?t=678
初めて 見た時の感動が ♪ ~ 別物
formula x^2 - 2 y^2 = 1
Pythagorean Triples a,b,c,は 1通りです。
Pythagorean Triples a,b,c, b-a=17 - たろさ
2022/06/10 (Fri) 02:50:45
!Pythagorean Triples a,b,c, b-a=17
!https://oeis.org/A114336
!https://oeis.org/A117473
!https://oeis.org/A058529
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(((-1)*(3 - 2*SQR(2))^n - (3 + 2*SQR(2))^n)/2)*(-1)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*7
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*3
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=7
FOR n=1 TO 400
LET a=a+WZ(n)
!PRINT n;a
LET b=a+17
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
!PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
7 24 25 1
28 45 53 1
88 105 137 1
207 224 305 1
555 572 797 1
1248 1265 1777 1
3276 3293 4645 1
7315 7332 10357 1
19135 19152 27073 1
42676 42693 60365 1
111568 111585 157793 1
248775 248792 351833 1
650307 650324 919685 1
1450008 1450025 2050633 1
3790308 3790325 5360317 1
8451307 8451324 11951965 1
22091575 22091592 31242217 1
49257868 49257885 69661157 1
128759176 128759193 182092985 1
287095935 287095952 406014977 1
750463515 750463532 1061315693 1
1673317776 1673317793 2366428705 1
4374021948 4374021965 6185801173 1
9752810755 9752810772 13792557253 1
25493668207 25493668224 36053491345 1
56843546788 56843546805 80388914813 1
148587987328 148587987345 210135146897 1
331308470007 331308470024 468540931625 1
866034255795 866034255812 1224757390037 1
1931007273288 1931007273305 2730856674937 1
5047617547476 5047617547493 7138409193325 1
11254735169755 11254735169772 15916599117997 1
29419671029095 29419671029112 41605697769913 1
65597403745276 65597403745293 92768738033045 1
171470408627128 171470408627145 242495777426153 1
382329687301935 382329687301952 540695829080273 1
999402780733707 999402780733724 1413368966787005 1
2228380720066368 2228380720066385 3151406236448593 1
5824946275775148 5824946275775165 8237718023295877 1
12987954633096307 12987954633096324 18367741589611285 1
ピタゴラスイッチ 的思考 だれかがどこかで♪ ~【4K】Michael Jackson - Captain EO 1986 Disneyland
https://youtu.be/znJvyrxflH8?t=678
言葉の意味では、無限はありますが、実在するとは?
可能性は否定できませんが肯定も不可
Pythagorean Triples a,b,c, b-a=23 - たろさ
2022/06/10 (Fri) 02:57:40
!Pythagorean Triples a,b,c, b-a=23
!https://oeis.org/A114336
!https://oeis.org/A117476
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(((-1)*(3 - 2*SQR(2))^n - (3 + 2*SQR(2))^n)/2)*(-1)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*7
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*5
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=12
FOR n=1 TO 400
LET a=a+WZ(n)
!PRINT n;a
LET b=a+23
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
!PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
12 35 37 1
33 56 65 1
133 156 205 1
252 275 373 1
832 855 1193 1
1525 1548 2173 1
4905 4928 6953 1
8944 8967 12665 1
28644 28667 40525 1
52185 52208 73817 1
167005 167028 236197 1
304212 304235 430237 1
973432 973455 1376657 1
1773133 1773156 2507605 1
5673633 5673656 8023745 1
10334632 10334655 14615393 1
33068412 33068435 46765813 1
60234705 60234728 85184753 1
192736885 192736908 272571133 1
351073644 351073667 496493125 1
1123352944 1123352967 1588660985 1
2046207205 2046207228 2893773997 1
6547380825 6547380848 9259394777 1
11926169632 11926169655 16866150857 1
38160932052 38160932075 53967707677 1
69510810633 69510810656 98303131145 1
222418211533 222418211556 314546851285 1
405138694212 405138694235 572952636013 1
1296348337192 1296348337215 1833313400033 1
2361321354685 2361321354708 3339412684933 1
7555671811665 7555671811688 10685333548913 1
13762789433944 13762789433967 19463523473585 1
44037682532844 44037682532867 62278687893445 1
80215415249025 80215415249048 113441728156577 1
256670423385445 256670423385468 362986793811757 1
467529702060252 467529702060275 661186845465877 1
1495984857779872 1495984857779895 2115642074977097 1
2724962797112533 2724962797112556 3853679344638685 1
8719238723293833 8719238723293856 12330865656050825 1
15882247080614992 15882247080615015 22460889222366233 1
初めて 見た時の感動が ♪ ~ 別物
formula x^2 - 2 y^2 = 1
Pythagorean Triples a,b,c,は 1通りです。
Pythagorean Triples a,b,c, b-a=31 - たろさ
2022/06/10 (Fri) 03:02:21
!Pythagorean Triples a,b,c, b-a=31
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(((-1)*(3 - 2*SQR(2))^n - (3 + 2*SQR(2))^n)/2)*(-1)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*17
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*4
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=9
FOR n=1 TO 400
LET a=a+WZ(n)
!PRINT n;a
LET b=a+31
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
!PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
9 40 41 1
60 91 109 1
140 171 221 1
429 460 629 1
893 924 1285 1
2576 2607 3665 1
5280 5311 7489 1
15089 15120 21361 1
30849 30880 43649 1
88020 88051 124501 1
179876 179907 254405 1
513093 513124 725645 1
1048469 1048500 1482781 1
2990600 2990631 4229369 1
6111000 6111031 8642281 1
17430569 17430600 24650569 1
35617593 35617624 50370905 1
101592876 101592907 143674045 1
207594620 207594651 293583149 1
592126749 592126780 837393701 1
1209950189 1209950220 1711127989 1
3451167680 3451167711 4880688161 1
7052106576 7052106607 9973184785 1
20114879393 20114879424 28446735265 1
41102689329 41102689360 58127980721 1
117238108740 117238108771 165799723429 1
239564029460 239564029491 338794699541 1
683313773109 683313773140 966351605309 1
1396281487493 1396281487524 1974640216525 1
3982644529976 3982644530007 5632309908425 1
8138124895560 8138124895591 11509046599609 1
23212553406809 23212553406840 32827507845241 1
47432467885929 47432467885960 67079639381129 1
135292675910940 135292675910971 191332737163021 1
276456682420076 276456682420107 390968789687165 1
788543502058893 788543502058924 1115168915132885 1
1611307626634589 1611307626634620 2278733098741861 1
4595968336442480 4595968336442511 6499680753634289 1
9391389077387520 9391389077387551 13281429802764001 1
26787266516596049 26787266516596080 37882915606672849 1
Pythagorean Triples a,b,c, b-a=41 - たろさ
2022/06/10 (Fri) 03:07:05
!Pythagorean Triples a,b,c, b-a=41
!https://oeis.org/A058529
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(((-1)*(3 - 2*SQR(2))^n - (3 + 2*SQR(2))^n)/2)*(-1)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*14
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=36
FOR n=1 TO 400
LET a=a+WZ(n)
!PRINT n;a
LET b=a+41
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
!PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
36 77 85 1
39 80 89 1
319 360 481 1
336 377 505 1
1960 2001 2801 1
2059 2100 2941 1
11523 11564 16325 1
12100 12141 17141 1
67260 67301 95149 1
70623 70664 99905 1
392119 392160 554569 1
411720 411761 582289 1
2285536 2285577 3232265 1
2399779 2399820 3393829 1
13321179 13321220 18839021 1
13987036 13987077 19780685 1
77641620 77641661 109801861 1
81522519 81522560 115290281 1
452528623 452528664 639972145 1
475148160 475148201 671961001 1
2637530200 2637530241 3730031009 1
2769366523 2769366564 3916475725 1
15372652659 15372652700 21740213909 1
16141051060 16141051101 22826893349 1
89598385836 89598385877 126711252445 1
94076939919 94076939960 133044884369 1
522217662439 522217662480 738527300761 1
548320588536 548320588577 775442412865 1
3043707588880 3043707588921 4304452552121 1
3195846591379 3195846591420 4519609592821 1
17740027870923 17740027870964 25088188011965 1
18626758959820 18626758959861 26342215144061 1
103396459636740 103396459636781 146224675519669 1
108564707167623 108564707167664 153533681271545 1
602638729949599 602638729949640 852259865106049 1
632761484046000 632761484046041 894859872485209 1
3512435920060936 3512435920060977 4967334515116625 1
3688004197108459 3688004197108500 5215625553639709 1
20471976790416099 20471976790416140 28951747225593701 1
21495263698604836 21495263698604877 30398893449353045 1
だれかがどこかで♪ ピタゴラスイッチ
Pythagorean Triples a,b,c, b-a=47 - たろさ
2022/06/10 (Fri) 03:41:47
!Pythagorean Triples a,b,c, b-a=47
!https://oeis.org/A058529
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(1/2)*((3 - 2*SQR(2))^n + (3 + 2*SQR(2))^n)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*23
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*7
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=16
FOR n=1 TO 40
LET a=a+WZ(n)
!PRINT n;a
LET b=a+47
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
!PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
16 63 65 1
85 132 157 1
225 272 353 1
616 663 905 1
1428 1475 2053 1
3705 3752 5273 1
8437 8484 11965 1
21708 21755 30733 1
49288 49335 69737 1
126637 126684 179125 1
287385 287432 406457 1
738208 738255 1044017 1
1675116 1675163 2369005 1
4302705 4302752 6084977 1
9763405 9763452 13807573 1
25078116 25078163 35465845 1
56905408 56905455 80476433 1
146166085 146166132 206710093 1
331669137 331669184 469051025 1
851918488 851918535 1204794713 1
1933109508 1933109555 2733829717 1
4965344937 4965344984 7022058185 1
11266988005 11266988052 15933927277 1
28940151228 28940151275 40927554397 1
65668818616 65668818663 92869733945 1
168675562525 168675562572 238543268197 1
382745923785 382745923832 541284476393 1
983113224016 983113224063 1390332054785 1
2230806724188 2230806724235 3154837124413 1
5730003781665 5730003781712 8103449060513 1
13002094421437 13002094421484 18387738270085 1
33396909466068 33396909466115 47230362308293 1
75781759804528 75781759804575 107171592496097 1
194651453014837 194651453014884 275278724789245 1
441688464405825 441688464405872 624641816706497 1
1134511808623048 1134511808623095 1604441986427177 1
2574349026630516 2574349026630563 3640679307742885 1
6612419398723545 6612419398723592 9351373193773817 1
15004405695377365 15004405695377412 21219434029750813 1
38540004583718316 38540004583718363 54503797176215725 1
Pythagorean Triples a,b,c, b-a=49 - たろさ
2022/06/10 (Fri) 03:57:01
!Pythagorean Triples a,b,c, b-a=49
!https://oeis.org/A058529
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(1/2)*((3 - 2*SQR(2))^n + (3 + 2*SQR(2))^n)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*31
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*5
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=11
FOR n=1 TO 40
LET a=a+WZ(n)
!PRINT n;a
LET b=a+49
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
!PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
11 60 61 1
104 153 185 1
204 253 325 1
731 780 1069 1
1311 1360 1889 1
4380 4429 6229 1
7760 7809 11009 1
25647 25696 36305 1
45347 45396 64165 1
149600 149649 211601 1
264420 264469 373981 1
872051 872100 1233301 1
1541271 1541320 2179721 1
5082804 5082853 7188205 1
8983304 8983353 12704345 1
29624871 29624920 41895929 1
52358651 52358700 74046349 1
172666520 172666569 244187369 1
305168700 305168749 431573749 1
1006374347 1006374396 1423228285 1
1778653647 1778653696 2515396145 1
5865579660 5865579709 8295182341 1
10366753280 10366753329 14660803121 1
34187103711 34187103760 48347865761 1
60421866131 60421866180 85449422581 1
199257042704 199257042753 281792012225 1
352164443604 352164443653 498035732365 1
1161355152611 1161355152660 1642404207589 1
2052564795591 2052564795640 2902764971609 1
6768873873060 6768873873109 9572633233309 1
11963224330040 11963224330089 16918554097289 1
39451888085847 39451888085896 55793395192265 1
69726781184747 69726781184796 98608559612125 1
229942454642120 229942454642169 325187737920281 1
406397462778540 406397462778589 574732803575461 1
1340202839766971 1340202839767020 1895333032329421 1
2368657995486591 2368657995486640 3349788261840641 1
7811274583959804 7811274583959853 11046810456056245 1
13805550510141104 13805550510141153 19523996767468385 1
45527444663991951 45527444663992000 64385529704008049 1
Pythagorean Triples a,b,c, b-a=71 - たろさ
2022/06/10 (Fri) 04:18:34
!Pythagorean Triples a,b,c, b-a=71
!https://oeis.org/A058529
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(1/2)*((3 - 2*SQR(2))^n + (3 + 2*SQR(2))^n)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*49
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*6
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=13
FOR n=1 TO 40
LET a=a+WZ(n)
!PRINT n;a
LET b=a+71
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
!PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
13 84 85 1
160 231 281 1
280 351 449 1
1113 1184 1625 1
1809 1880 2609 1
6660 6731 9469 1
10716 10787 15205 1
38989 39060 55189 1
62629 62700 88621 1
227416 227487 321665 1
365200 365271 516521 1
1325649 1325720 1874801 1
2128713 2128784 3010505 1
7726620 7726691 10927141 1
12407220 12407291 17546509 1
45034213 45034284 63688045 1
72314749 72314820 102268549 1
262478800 262478871 371201129 1
421481416 421481487 596064785 1
1529838729 1529838800 2163518729 1
2456573889 2456573960 3474120161 1
8916553716 8916553787 12609911245 1
14317962060 14317962131 20248656181 1
51969483709 51969483780 73495948741 1
83451198613 83451198684 118017816925 1
302900348680 302900348751 428365781201 1
486389229760 486389229831 687858245369 1
1765432608513 1765432608584 2496698738465 1
2834884180089 2834884180160 4009131655289 1
10289695302540 10289695302611 14551826649589 1
16522915850916 16522915850987 23366931686365 1
59972739206869 59972739206940 84814261159069 1
96302610925549 96302610925620 136192458462901 1
349546739938816 349546739938887 494333740304825 1
561292749702520 561292749702591 793787819091041 1
2037307700426169 2037307700426240 2881188180669881 1
3271453887289713 3271453887289784 4626534456083345 1
11874299462618340 11874299462618411 16792795343714461 1
19067430574035900 19067430574035971 26965418917409029 1
69208489075284013 69208489075284084 97875583881616885 1
Pythagorean Triples a,b,c, b-a=73 - たろさ
2022/06/10 (Fri) 04:35:30
!Pythagorean Triples a,b,c, b-a=73
!https://oeis.org/A058529
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(1/2)*((3 - 2*SQR(2))^n + (3 + 2*SQR(2))^n)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*17
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*18
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=44
FOR n=1 TO 40
LET a=a+WZ(n)
!PRINT n;a
LET b=a+73
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
!PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
44 117 125 1
95 168 193 1
455 528 697 1
744 817 1105 1
2832 2905 4057 1
4515 4588 6437 1
16683 16756 23645 1
26492 26565 37517 1
97412 97485 137813 1
154583 154656 218665 1
567935 568008 803233 1
901152 901225 1274473 1
3310344 3310417 4681585 1
5252475 5252548 7428173 1
19294275 19294348 27286277 1
30613844 30613917 43294565 1
112455452 112455525 159036077 1
178430735 178430808 252339217 1
655438583 655438656 926930185 1
1039970712 1039970785 1470740737 1
3820176192 3820176265 5402545033 1
6061393683 6061393756 8572105205 1
22265618715 22265618788 31488340013 1
35328391532 35328391605 49961890493 1
129773536244 129773536317 183527495045 1
205908955655 205908955728 291199237753 1
756375598895 756375598968 1069676630257 1
1200125342544 1200125342617 1697233536025 1
4408480057272 4408480057345 6234532286497 1
6994843099755 6994843099828 9892201978397 1
25694504744883 25694504744956 36337517088725 1
40768933256132 40768933256205 57655978334357 1
149758548412172 149758548412245 211790570245853 1
237618756437183 237618756437256 336043668027745 1
872856785728295 872856785728368 1234405904386393 1
1384943605367112 1384943605367185 1958606029832113 1
5087382165957744 5087382165957817 7194644856072505 1
8072042875765635 8072042875765708 11415592510964933 1
29651436210018315 29651436210018388 41933463232048637 1
47047313649226844 47047313649226917 66534949035957485 1
Pythagorean Triples a,b,c, b-a=79 - たろさ
2022/06/10 (Fri) 04:52:37
!Pythagorean Triples a,b,c, b-a=79
!https://oeis.org/A058529
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(1/2)*((3 - 2*SQR(2))^n + (3 + 2*SQR(2))^n)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*47
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*9
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=20
FOR n=1 TO 40
LET a=a+WZ(n)
!PRINT n;a
LET b=a+79
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
!PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
20 99 101 1
161 240 289 1
341 420 541 1
1140 1219 1669 1
2184 2263 3145 1
6837 6916 9725 1
12921 13000 18329 1
40040 40119 56681 1
75500 75579 106829 1
233561 233640 330361 1
440237 440316 622645 1
1361484 1361563 1925485 1
2566080 2566159 3629041 1
7935501 7935580 11222549 1
14956401 14956480 21151601 1
46251680 46251759 65409809 1
87172484 87172563 123280565 1
269574737 269574816 381236305 1
508078661 508078740 718531789 1
1571196900 1571196979 2222008021 1
2961299640 2961299719 4187910169 1
9157606821 9157606900 12950811821 1
17259719337 17259719416 24408929225 1
53374444184 53374444263 75482862905 1
100597016540 100597016619 142265665181 1
311089058441 311089058520 439946365609 1
586322380061 586322380140 829185061861 1
1813159906620 1813159906699 2564195330749 1
3417337263984 3417337264063 4832844705985 1
10567870381437 10567870381516 14945225618885 1
19917701204001 19917701204080 28167883174049 1
61594062382160 61594062382239 87107158382561 1
116088869960180 116088869960259 164174454338309 1
358996503911681 358996503911760 507697724676481 1
676615518557237 676615518557316 956878842855805 1
2092384961088084 2092384961088163 2959079189676325 1
3943604241383400 3943604241383479 5577098602796521 1
12195313262616981 12195313262617060 17246777413381469 1
22985009929743321 22985009929743400 32505712773923321 1
71079494614613960 71079494614614039 100521585290612489 1
Pythagorean Triples a,b,c, b-a=89 - たろさ
2022/06/10 (Fri) 05:07:07
!Pythagorean Triples a,b,c, b-a=89
!https://oeis.org/A058529
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(1/2)*((3 - 2*SQR(2))^n + (3 + 2*SQR(2))^n)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*23
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*21
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=51
FOR n=1 TO 40
LET a=a+WZ(n)
!PRINT n;a
LET b=a+89
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
!PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
51 140 149 1
120 209 241 1
540 629 829 1
931 1020 1381 1
3367 3456 4825 1
5644 5733 8045 1
19840 19929 28121 1
33111 33200 46889 1
115851 115940 163901 1
193200 193289 273289 1
675444 675533 955285 1
1126267 1126356 1592845 1
3936991 3937080 5567809 1
6564580 6564669 9283781 1
22946680 22946769 32451569 1
38261391 38261480 54109841 1
133743267 133743356 189141605 1
223003944 223004033 315375265 1
779513100 779513189 1102398061 1
1299762451 1299762540 1838141749 1
4543335511 4543335600 6425246761 1
7575570940 7575571029 10713475229 1
26480500144 26480500233 37449082505 1
44153663367 44153663456 62442709625 1
154339665531 154339665620 218269248269 1
257346409440 257346409529 363942782521 1
899557493220 899557493309 1272166407109 1
1499924793451 1499924793540 2121213985501 1
5243005293967 5243005294056 7414729194385 1
8742202351444 8742202351533 12363341130485 1
30558474270760 30558474270849 43216208759201 1
50953289315391 50953289315480 72058832797409 1
178107840330771 178107840330860 251882523360821 1
296977533541080 296977533541169 419989655653969 1
1038088567714044 1038088567714133 1468078931405725 1
1730911911931267 1730911911931356 2447879101126405 1
6050423565953671 6050423565953760 8556591065073529 1
10088493938046700 10088493938046789 14267284951104461 1
35264452828008160 35264452828008249 49871467459035449 1
58800051716349111 58800051716349200 83155830605500361 1
Pythagorean Triples a,b,c, b-a=97 - たろさ
2022/06/10 (Fri) 09:40:21
!Pythagorean Triples a,b,c, b-a=97
!https://oeis.org/A058529
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(1/2)*((3 - 2*SQR(2))^n + (3 + 2*SQR(2))^n)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*71
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*7
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=15
FOR n=1 TO 40
LET a=a+WZ(n)
!PRINT n;a
LET b=a+97
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
!PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
15 112 113 1
228 325 397 1
368 465 593 1
1575 1672 2297 1
2387 2484 3445 1
9416 9513 13385 1
14148 14245 20077 1
55115 55212 78013 1
82695 82792 117017 1
321468 321565 454693 1
482216 482313 682025 1
1873887 1873984 2650145 1
2810795 2810892 3975133 1
10922048 10922145 15446177 1
16382748 16382845 23168773 1
63658595 63658692 90026917 1
95485887 95485984 135037505 1
371029716 371029813 524715325 1
556532768 556532865 787056257 1
2162519895 2162519992 3058265033 1
3243710915 3243711012 4587300037 1
12604089848 12604089945 17824874873 1
18905732916 18905733013 26736743965 1
73462019387 73462019484 103890984205 1
110190686775 110190686872 155833163753 1
428168026668 428168026765 605521030357 1
642238387928 642238388025 908262238553 1
2495546140815 2495546140912 3529235197937 1
3743239640987 3743239641084 5293740267565 1
14545108818416 14545108818513 20569890157265 1
21817199458188 21817199458285 30854179366837 1
84775106769875 84775106769972 119890105745653 1
127159957108335 127159957108432 179831335933457 1
494105531801028 494105531801125 698770744316653 1
741142543192016 741142543192113 1048133836233905 1
2879858084036487 2879858084036584 4072734360154265 1
4319695302043955 4319695302044052 6108971681469973 1
16785042972418088 16785042972418185 23737635416608937 1
25177029269071908 25177029269072005 35605696252585933 1
97830399750472235 97830399750472332 138353078139499357 1
Pythagorean Triples a,b,c, b-a=103 - たろさ
2022/06/13 (Mon) 20:40:10
!Pythagorean Triples a,b,c, b-a=103
!https://oeis.org/A058529
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(1/2)*((3 - 2*SQR(2))^n + (3 + 2*SQR(2))^n)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*7
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
!LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*33
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=84
FOR n=1 TO 40
LET a=a+WZ(n)
!PRINT n;a
LET b=a+103
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
!PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
84 187 205 1
105 208 233 1
765 868 1157 1
884 987 1325 1
4712 4815 6737 1
5405 5508 7717 1
27713 27816 39265 1
31752 31855 44977 1
161772 161875 228853 1
185313 185416 262145 1
943125 943228 1333853 1
1080332 1080435 1527893 1
5497184 5497287 7774265 1
6296885 6296988 8905213 1
32040185 32040288 45311737 1
36701184 36701287 51903385 1
186744132 186744235 264096157 1
213910425 213910528 302515097 1
1088424813 1088424916 1539265205 1
1246761572 1246761675 1763187197 1
6343804952 6343805055 8971495073 1
7266659213 7266659316 10276608085 1
36974405105 36974405208 52289705233 1
42353193912 42353194015 59896461313 1
215502625884 215502625987 304766736325 1
246852504465 246852504568 349102159793 1
1256041350405 1256041350508 1776310712717 1
1438761833084 1438761833187 2034716497445 1
7320745476752 7320745476855 10353097539977 1
8385718494245 8385718494348 11859196824877 1
42668431510313 42668431510416 60342274527145 1
48875549132592 48875549132695 69120464451817 1
248689843585332 248689843585435 351700549622893 1
284867576301513 284867576301616 402863589886025 1
1449470630001885 1449470630001988 2049861023210213 1
1660329908676692 1660329908676795 2348061074864333 1
8448133936426184 8448133936426287 11947465589638385 1
9677111875758845 9677111875758948 13685502859299973 1
49239332988555425 49239332988555528 69634932514620097 1
56402341345876584 56402341345876687 79764956080935505 1
Pythagorean Triples a,b,c, b-a=113 - たろさ
2022/06/13 (Mon) 20:42:59
!Pythagorean Triples a,b,c, b-a=113
!https://oeis.org/A058529
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(1/2)*((3 - 2*SQR(2))^n + (3 + 2*SQR(2))^n)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*41
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
!LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*22
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=52
FOR n=1 TO 40
LET a=a+WZ(n)
!PRINT n;a
LET b=a+113
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
!PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
52 165 173 1
175 288 337 1
615 728 953 1
1312 1425 1937 1
3864 3977 5545 1
7923 8036 11285 1
22795 22908 32317 1
46452 46565 65773 1
133132 133245 188357 1
271015 271128 383353 1
776223 776336 1097825 1
1579864 1579977 2234345 1
4524432 4524545 6398593 1
9208395 9208508 13022717 1
26370595 26370708 37293733 1
53670732 53670845 75901957 1
153699364 153699477 217363805 1
312816223 312816336 442389025 1
895825815 895825928 1266889097 1
1823226832 1823226945 2578432193 1
5221255752 5221255865 7383970777 1
10626544995 10626545108 15028204133 1
30431708923 30431709036 43036935565 1
61936043364 61936043477 87590792605 1
177368998012 177368998125 250837642613 1
360989715415 360989715528 510516551497 1
1033782279375 1033782279488 1461988920113 1
2104002249352 2104002249465 2975508516377 1
6025324678464 6025324678577 8521095878065 1
12263023780923 12263023781036 17342534546765 1
35118165791635 35118165791748 49664586348277 1
71474140436412 71474140436525 101079698764213 1
204683670071572 204683670071685 289466422211597 1
416581818837775 416581818837888 589135658038513 1
1192983854638023 1192983854638136 1687133946921305 1
2428016772590464 2428016772590577 3433734249466865 1
6953219457756792 6953219457756905 9833337259316233 1
14151518816705235 14151518816705348 20013269838762677 1
40526332891902955 40526332891903068 57312889608976093 1
82481096127641172 82481096127641285 116645884783109197 1
Pythagorean Triples a,b,c, b-a=119 - たろさ
2022/06/13 (Mon) 20:45:20
!Pythagorean Triples a,b,c, b-a=119
!https://oeis.org/A058529 (1, 7, 17, 23, 31, 41, 47, 49, 71, 73, 79)
!https://oeis.org/A001541 (1, 3, 17, 99, 577, 3363, 19601, 114243)
!https://oeis.org/A054490 (1, 11, 65, 379, 2209, 12875, 75041, 437371)
!https://oeis.org/A005319 (0, 4, 24, 140, 816, 4756, 27720, 161564)
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
LET z1=2000
DIM W(z1)
DIM WR(z1)
DIM WZ(z1)
DIM W1(z1)
DIM W0(z1)
DIM W2(z1)
!FORMULA 1
LET cc=2
LET sq2=2*SQR(2)
FOR n=1 TO z
LET G=(1/2)*((3-sq2)^n + (3+sq2)^n)
LET W(cc)=ROUND(G)
LET W0(n)=ROUND(G)
!PRINT cc;W(cc)
LET cc=cc+4
NEXT n
!FORMULA 2
LET cc=1
LET sq4=4*SQR(2)
FOR n=0 TO z
LET G2=(3-sq2)^(n-1)/sq4-(11*(3-sq2)^n)/sq4-(3+sq2)^(n-1)/sq4+(11*(3+sq2)^n)/sq4
LET W1(cc)=ROUND(G2)
!PRINT cc;W1(cc)
LET cc=cc+1
NEXT n
!FORMULA 3
LET cc=1
FOR n=0 TO z
LET G3=(3+sq2)^n/SQR(2)-(3-sq2)^n/SQR(2)^n
LET W2(cc)=ROUND(G3)
!PRINT cc;W2(cc)
LET cc=cc+1
NEXT n
!s1
LET cc=1
FOR n=1 TO z STEP 4
LET WZ(n)=W1(cc+1)*3-(4*W2(cc))
!PRINT cc;W1(cc);WZ(n);n
LET cc=cc+1
NEXT n
!s2
LET cc=2
FOR n=2 TO z STEP 4
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*41
!PRINT cc;WR(n);WZ(n);n
LET cc=cc+4
NEXT n
!s3
LET cc=3
FOR n=3 TO z STEP 4
LET WZ(n)=(W0(cc)-W0(cc-1))-W1(cc-2)
!PRINT n;WZ(n);cc;W0(cc);W0(cc-1)
LET cc=cc+1
NEXT n
!s4
LET cc=2
FOR n=4 TO z STEP 4
!LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+4))*11
! PRINT n;WZ(n);cc;WR(cc);WR(cc+4)
LET cc=cc+4
NEXT n
!FOR n=1 TO z STEP 1
! PRINT n;WZ(n)
!NEXT n
LET a=24
FOR n=1 TO 400
!LET a=a
!PRINT n;a
LET b=a+119
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
!PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
LET a=a+WZ(n)
NEXT n
END
計算結果
24 143 145 1
57 176 185 1
180 299 349 1
261 380 461 1
481 600 769 1
660 779 1021 1
1357 1476 2005 1
1824 1943 2665 1
3100 3219 4469 1
4141 4260 5941 1
8200 8319 11681 1
10921 11040 15529 1
18357 18476 26045 1
24424 24543 34625 1
48081 48200 68081 1
63940 64059 90509 1
107280 107399 151801 1
142641 142760 201809 1
280524 280643 396805 1
372957 373076 527525 1
625561 625680 884761 1
831660 831779 1176229 1
1635301 1635420 2312749 1
2174040 2174159 3074641 1
3646324 3646443 5156765 1
4847557 4847676 6855565 1
9531520 9531639 13479689 1
12671521 12671640 17920321 1
21252621 21252740 30055829 1
28253920 28254039 39957161 1
55554057 55554176 78565385 1
73855324 73855443 104447285 1
123869640 123869759 175178209 1
164676201 164676320 232887401 1
323793060 323793179 457912621 1
430460661 430460780 608763389 1
721965457 721965576 1021013425 1
959803524 959803643 1357367245 1
1887204541 1887204660 2668910341 1
2508908880 2508908999 3548133049 1
Pythagorean Triples a,b,c, b-a=127 - たろさ
2022/06/13 (Mon) 20:48:20
!Pythagorean Triples a,b,c, b-a=127
!https://oeis.org/A058529
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(1/2)*((3 - 2*SQR(2))^n + (3 + 2*SQR(2))^n)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*97
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
!LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*8
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=17
FOR n=1 TO 40
LET a=a+WZ(n)
!PRINT n;a
LET b=a+127
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
!PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
17 144 145 1
308 435 533 1
468 595 757 1
2117 2244 3085 1
3045 3172 4397 1
12648 12775 17977 1
18056 18183 25625 1
74025 74152 104777 1
105545 105672 149353 1
431756 431883 610685 1
615468 615595 870493 1
2516765 2516892 3559333 1
3587517 3587644 5073605 1
14669088 14669215 20745313 1
20909888 20910015 29571137 1
85498017 85498144 120912545 1
121872065 121872192 172353217 1
498319268 498319395 704729957 1
710322756 710322883 1004548165 1
2904417845 2904417972 4107467197 1
4140064725 4140064852 5854935773 1
16928188056 16928188183 23940073225 1
24130065848 24130065975 34125066473 1
98664710745 98664710872 139532972153 1
140640330617 140640330744 198895463065 1
575060076668 575060076795 813257759693 1
819711918108 819711918235 1159247711917 1
3351695749517 3351695749644 4740013586005 1
4777631178285 4777631178412 6756590808437 1
19535114420688 19535114420815 27626823756337 1
27846075151856 27846075151983 39380297138705 1
113858990774865 113858990774992 161020928952017 1
162298819733105 162298819733232 229525192023793 1
663618830228756 663618830228883 938498749955765 1
945946843247028 945946843247155 1337770855004053 1
3867853990597925 3867853990598052 5469971570782573 1
5513382239749317 5513382239749444 7797099938000525 1
22543505113359048 22543505113359175 31881330674739673 1
32134346595249128 32134346595249255 45444828772999097 1
131393176689556617 131393176689556744 185818012477655465 1
Pythagorean Triples a,b,c, b-a=137 - たろさ
2022/06/13 (Mon) 20:50:58
!Pythagorean Triples a,b,c, b-a=137
!https://oeis.org/A058529
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(1/2)*((3 - 2*SQR(2))^n + (3 + 2*SQR(2))^n)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*7
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
!LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*45
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=115
FOR n=1 TO 40
LET a=a+WZ(n)
!PRINT n;a
LET b=a+137
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
!PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
115 252 277 1
136 273 305 1
1036 1173 1565 1
1155 1292 1733 1
6375 6512 9113 1
7068 7205 10093 1
37488 37625 53113 1
41527 41664 58825 1
218827 218964 309565 1
242368 242505 342857 1
1275748 1275885 1804277 1
1412955 1413092 1998317 1
7435935 7436072 10516097 1
8235636 8235773 11647045 1
43340136 43340273 61292305 1
48001135 48001272 67883953 1
252605155 252605292 357237733 1
279771448 279771585 395656673 1
1472291068 1472291205 2082134093 1
1630627827 1630627964 2306056085 1
8581141527 8581141664 12135566825 1
9503995788 9503995925 13440679837 1
50014558368 50014558505 70731266857 1
55393347175 55393347312 78338022937 1
291506208955 291506209092 412252034317 1
322856087536 322856087673 456587457785 1
1699022695636 1699022695773 2402780939045 1
1881743178315 1881743178452 2661186723773 1
9902629965135 9902629965272 14004433599953 1
10967602982628 10967602982765 15510532884853 1
57716757095448 57716757095585 81623820660673 1
63923874717727 63923874717864 90402010585345 1
336397912607827 336397912607964 475738490364085 1
372575645324008 372575645324145 526901530627217 1
1960670718551788 1960670718551925 2772807121523837 1
2171529997226595 2171529997226732 3071007173177957 1
11427626398703175 11427626398703312 16161104238778937 1
12656604338035836 12656604338035973 17899141508440525 1
66605087673667536 66605087673667673 94193818311149785 1
73768096030988695 73768096030988832 104323841877465193 1
Pythagorean Triples a,b,c, b-a=151 - たろさ
2022/06/13 (Mon) 20:53:36
!Pythagorean Triples a,b,c, b-a=151
!https://oeis.org/A058529
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
DIM W(z)
DIM WR(z)
DIM WZ(z)
FOR n=1 TO z
LET G=(1/2)*((3 - 2*SQR(2))^n + (3 + 2*SQR(2))^n)
LET W(n)=ROUND(G)
! PRINT n;W(n)
NEXT n
LET cc=1
FOR n=2 TO z STEP 2
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*31
LET cc=cc+1
!PRINT n;WR(n);WZ(n)
NEXT n
LET cc=2
FOR n=3 TO z STEP 2
!LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+2))*39
LET cc=cc+2
!PRINT n;WR(n);WZ(n)
NEXT n
LET a=96
FOR n=1 TO 40
LET a=a+WZ(n)
!PRINT n;a
LET b=a+151
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
!PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
NEXT n
END
計算結果
96 247 265 1
189 340 389 1
969 1120 1481 1
1496 1647 2225 1
6020 6171 8621 1
9089 9240 12961 1
35453 35604 50245 1
53340 53491 75541 1
207000 207151 292849 1
311253 311404 440285 1
1206849 1207000 1706849 1
1814480 1814631 2566169 1
7034396 7034547 9948245 1
10575929 10576080 14956729 1
40999829 40999980 57982621 1
61641396 61641547 87174205 1
238964880 238965031 337947481 1
359272749 359272900 508088501 1
1392789753 1392789904 1969702265 1
2093995400 2093995551 2961356801 1
8117773940 8117774091 11480266109 1
12204699953 12204700104 17260052305 1
47313854189 47313854340 66911894389 1
71134204620 71134204771 100598957029 1
275765351496 275765351647 389991100225 1
414600528069 414600528220 586333689869 1
1607278255089 1607278255240 2273034706961 1
2416468964096 2416468964247 3417403182185 1
9367904179340 9367904179491 13248217141541 1
14084213256809 14084213256960 19918085403241 1
54600146821253 54600146821404 77216268142285 1
82088810577060 82088810577211 116091109237261 1
318232976748480 318232976748631 450049391712169 1
478448650205853 478448650206004 676628570020325 1
1854797713669929 1854797713670080 2623080082130729 1
2788603090658360 2788603090658511 3943680310884689 1
10810553305271396 10810553305271547 15288431101072205 1
16253169893744609 16253169893744760 22985453295287809 1
63008522117958749 63008522117958900 89107506524302501 1
94730416271809596 94730416271809747 133969039460842165 1
Pythagorean Triples a,b,c, b-a=161 - たろさ
2022/06/13 (Mon) 20:56:12
!Pythagorean Triples a,b,c, b-a=161
!https://oeis.org/A058529 (1, 7, 17, 23, 31, 41, 47, 49, 71, 73, 79)
!https://oeis.org/A001541 (1, 3, 17, 99, 577, 3363, 19601, 114243)
!https://oeis.org/A054490 (1, 11, 65, 379, 2209, 12875, 75041, 437371)
!https://oeis.org/A005319 (0, 4, 24, 140, 816, 4756, 27720, 161564)
!https://oeis.org/A001653 (1, 5, 29, 169, 985, 5741, 33461, 195025)
!https://oeis.org/A114336
!https://ajc.maths.uq.edu.au/pdf/11/ocr-ajc-v11-p263.pdf
!calculation formula x^2 - 2 y^2 = 1
OPTION ARITHMETIC DECIMAL_HIGH
SET BITMAP SIZE 640,640 ! デフォルト
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 4
LET z=400
LET z1=2000
DIM W(z1)
DIM WR(z1)
DIM WZ(z1)
DIM W1(z1)
DIM W0(z1)
DIM W2(z1)
DIM W3(z1)
!FORMULA 1
LET cc=2
LET sq2=2*SQR(2)
FOR n=1 TO z
LET G=(1/2)*((3-sq2)^n + (3+sq2)^n)
LET W(cc)=ROUND(G)
LET W0(n)=ROUND(G)
!PRINT cc;W(cc)
LET cc=cc+4
NEXT n
!FORMULA 2
LET cc=1
LET sq4=4*SQR(2)
FOR n=0 TO z
LET G2=(3-sq2)^(n-1)/sq4-(11*(3-sq2)^n)/sq4-(3+sq2)^(n-1)/sq4+(11*(3+sq2)^n)/sq4
LET W1(cc)=ROUND(G2)
!PRINT cc;W1(cc)
LET cc=cc+1
NEXT n
!FORMULA 3
LET cc=1
FOR n=0 TO z
LET G3=(3+sq2)^n/SQR(2)-(3-sq2)^n/SQR(2)^n
LET W2(cc)=ROUND(G3)
!PRINT cc;W2(cc)
LET cc=cc+1
NEXT n
!FORMULA 4
LET cc=1
FOR n=0 TO z
LET G4=(3-sq2)^n/sq4-(3-sq2)^(n+1)/sq4-(3+sq2)^n/sq4+(3+sq2)^(n+1)/sq4
LET W3(cc)=ROUND(G4)
!PRINT cc;W3(cc)
LET cc=cc+1
NEXT n
!s1
LET cc=1
FOR n=1 TO z STEP 4
LET WZ(n)=W1(cc+1)*3-(4*W2(cc))+(8*W3(cc))
!PRINT cc;W1(cc);WZ(n);n
LET cc=cc+1
NEXT n
!s2
LET cc=2
FOR n=2 TO z STEP 4
LET WR(n)=W(cc)
LET WZ(n)=W(cc)*73
!PRINT cc;WR(n);WZ(n);n
LET cc=cc+4
NEXT n
!s3
LET cc=3
FOR n=3 TO z STEP 4
LET WZ(n)=(W0(cc)-W0(cc-1))-W1(cc-2)+(8*W3(cc-1))
!PRINT n;WZ(n);cc;W0(cc);W0(cc-1)
LET cc=cc+1
NEXT n
!s4
LET cc=2
FOR n=4 TO z STEP 4
!LET WR(n)=(WR(cc)+WR(cc+2))*2
LET WZ(n)=(WR(cc)+WR(cc+4))*9
! PRINT n;WZ(n);cc;WR(cc);WR(cc+4)
LET cc=cc+4
NEXT n
!FOR n=1 TO z STEP 1
! PRINT n;WZ(n)
!NEXT n
LET a=19
FOR n=1 TO 400
!LET a=a
!PRINT n;a
LET b=a+161
LET c=SQR(a^2+b^2)
LET x=(b/c)
LET y=(a/c)
PRINT a;TAB(310);b;TAB(621);c ;TAB(930);ROUND(x^2+y^2)
!PRINT a;TAB(35);b ;TAB(70);c ;TAB(103);ROUND(x^2+y^2) !出力 40
PLOT POINTS:x,y
LET a=a+WZ(n)
NEXT n
END
計算結果
19 180 181 1
60 221 229 1
279 440 521 1
400 561 689 1
580 741 941 1
799 960 1249 1
2040 2201 3001 1
2739 2900 3989 1
3783 3944 5465 1
5056 5217 7265 1
12283 12444 17485 1
16356 16517 23245 1
22440 22601 31849 1
29859 30020 42341 1
71980 72141 101909 1
95719 95880 135481 1
131179 131340 185629 1
174420 174581 246781 1
419919 420080 593969 1
558280 558441 789641 1
764956 765117 1081925 1
1016983 1017144 1438345 1
2447856 2448017 3461905 1
3254283 3254444 4602365 1
4458879 4459040 6305921 1
5927800 5927961 8383289 1
14267539 14267700 20177461 1
18967740 18967901 26824549 1
25988640 25988801 36753601 1
34550139 34550300 48861389 1
83157700 83157861 117602861 1
110552479 110552640 156344929 1
151473283 151473444 214215685 1
201373356 201373517 284785045 1
484678983 484679144 685439705 1
644347456 644347617 911245025 1
882851380 882851541 1248540509 1
1173690319 1173690480 1659848881 1
2824916520 2824916681 3995035369 1
3755532579 3755532740 5311125221 1
色名 - しばっち
2022/06/05 (Sun) 09:17:04
十進BASICでは色の設定にRGBによる指定と色名による指定 (SET LINE COLOR "RED")
ができますが、残念ながら10数個程しか定義されていません。
そこで色名を定義してみました。(サイトによって定義がまちまちなようですが...)
但し、パレットモード(REGULAR)では定義の仕方が異なるため
下記のプログラムはフルカラーモード用(NATIVE)です。
https://www.i-iro.com/dic/
https://irononamae.web.fc2.com/jis/
https://fromkato.com/color/ja
https://ja.wikipedia.org/wiki/JIS慣用色名
https://irocore.com/
https://www.fortune-factory.net/colors/index_2.html
http://bkclass.web.fc2.com/doc_color.html
https://kotonohaweb.net/color-name-japanese/
PRINT COLORNAME("GOLD")
!SET COLOR MODE "NATIVE"
!SET COLOR COLORNAME("SILVER")
!PLOT AREA:0,0;1,0;1,1;0,1
END
EXTERNAL FUNCTION COLORNAME(NAME$)
!SET COLOR MODE "NATIVE"
RESTORE
DO
READ IF MISSING THEN EXIT DO:N$,COL$
IF LCASE$(NAME$)=LCASE$(N$) THEN
!LET COLORNAME=COLORINDEX(BVAL(COL$(1:2),16)/255,BVAL(COL$(3:4),16)/255,BVAL(COL$(5:6),16)/255)
LET COLORNAME=65536*BVAL(COL$(5:6),16)+256*BVAL(COL$(3:4),16)+BVAL(COL$(1:2),16)
EXIT FUNCTION
END IF
LOOP
LET COLORNAME=-1
DATA White,FFFFFF,Red,FF0000,Green,00FF00,Blue,0000FF,Magenta,FF00FF,Cyan,00FFFF,Yellow,FFFF00,Black,000000
DATA Aquamarine,70DB93,Baker Chocolate,5C3317,Blue Violet,9F5F9F,Brass,B5A642,Bright Gold,D9D919,Brown,A62A2A
DATA Bronze,8C7853,Bronze II,A67D3D,Cadet Blue,5F9F9F,Cool Copper,D98719,Copper,B87333,Coral,FF7F00,Corn Flower Blue,42426F
DATA Dark Brown,5C4033,Dark Green,2F4F2F,Dark Green Copper,4A766E,Dark Olive Green,4F4F2F,Dark Orchid,9932CD,Dark Purple,871F78
DATA Dark Slate Blue,6B238E,Dark Slate Grey,2F4F4F,Dark Tan,97694F,Dark Turquoise,7093DB,Dark Wood,855E42,Dim Grey,545454
DATA Dusty Rose,856363,Feldspar,D19275,Firebrick,8E2323,Forest Green,238E23,Gold,CD7F32,Goldenrod,DBDB70,Grey,C0C0C0
DATA Green Copper,527F76,Green Yellow,93DB70,Hunter Green,215E21,Indian Red,4E2F2F,Khaki,9F9F5F,Light Blue,C0D9D9
DATA Light Grey,A8A8A8,Light Steel Blue,8F8FBD,Light Wood,E9C2A6,Lime Green,32CD32,Mandarian Orange,E47833,Maroon,8E236B
DATA Medium Aquamarine,32CD99,Medium Blue,3232CD,Medium Forest Green,6B8E23,Medium Goldenrod,EAEAAE,Medium Orchid,9370DB
DATA Medium Sea Green,426F42,Medium Slate Blue,7F00FF,Medium Spring Green,7FFF00,Medium Turquoise,70DBDB,Medium Violet Red,DB7093
DATA Medium Wood,A68064,Midnight Blue,2F2F4F,Navy Blue,23238E,Neon Blue,4D4DFF,Neon Pink,FF6EC7,New Midnight Blue,00009C
DATA New Tan,EBC79E,Old Gold,CFB53B,Orange,FF7F00,Orange Red,FF2400,Orchid,DB70DB,Pale Green,8FBC8F,Pink,BC8F8F
DATA Plum,EAADEA,Quartz,D9D9F3,Rich Blue,5959AB,Salmon,6F4242,Scarlet,8C1717,Sea Green,238E68,Semi Sweet Chocolate,6B4226
DATA Sienna,8E6B23,Silver,E6E8FA,Sky Blue,3299CC,Slate Blue,007FFF,Spicy Pink,FF1CAE,Spring Green,00FF7F,Steel Blue,236B8E
DATA Summer Sky,38B0DE,Tan,DB9370,Thistle,D8BFD8,Turquoise,ADEAEA,Very Dark Brown,5C4033,Very Light Grey,CDCDCD
DATA Violet,4F2F4F,Violet Red,CC3299,Wheat,D8D8BF,Yellow Green,99CC32
!
DATA aliceblue,f0f8ff,antiquewhite,faebd7,aqua,00ffff,aquamarine,7fffd4,azure,f0ffff
DATA beige,f5f5dc,bisque,ffe4c4,black,000000,blanchedalmond,ffebcd,blue,0000ff
DATA blueviolet,8a2be2,brown,a52a2a,burlywood,deb887,cadetblue,5f9ea0,chartreuse,7fff00
DATA chocolate,d2691e,coral,ff7f50,cornflowerblue,6495ed,cornsilk,fff8dc,crimson,dc143c
DATA cyan,00ffff,darkblue,00008b,darkcyan,008b8b,darkgoldenrod,b8860b,darkgray,a9a9a9
DATA darkgreen,006400,darkkhaki,bdb76b,darkmagenta,8b008b,darkolivegreen,556b2f,darkorange,ff8c00
DATA darkorchid,9932cc,darkred,8b0000,darksalmon,e9967a,darkseagreen,8fbc8f,darkslateblue,483d8b
DATA darkslategray,2f4f4f,darkturquoise,00ced1,darkviolet,9400d3,deeppink,ff1493,deepskyblue,00bfff
DATA dimgray,696969,dodgerblue,1e90ff,firebrick,b22222,floralwhite,fffaf0,forestgreen,228b22
DATA fuchsia,ff00ff,gainsboro,dcdcdc,ghostwhite,f8f8ff,gold,ffd700,goldenrod,daa520
DATA gray,808080,green,008000,greenyellow,adff2f,honeydew,f0fff0,hotpink,ff69b4
DATA indianred,cd5c5c,indigo,4b0082,ivory,fffff0,khaki,f0e68c,lavender,e6e6fa
DATA lavenderblush,fff0f5,lawngreen,7cfc00,lemonchiffon,fffacd,lightblue,add8e6,lightcoral,f08080
DATA lightcyan,e0ffff,lightgoldenrodyellow,fafad2,lightgreen,90ee90,lightgrey,d3d3d3,lightpink,ffb6c1
DATA lightsalmon,ffa07a,lightseagreen,20b2aa,lightskyblue,87cefa,lightslategray,778899,lightsteelblue,b0c4de
DATA lightyellow,ffffe0,lime,00ff00,limegreen,32cd32,linen,faf0e6,magenta,ff00ff
DATA maroon,800000,mediumaquamarine,66cdaa,mediumblue,0000cd,mediumorchid,ba55d3,mediumpurple,9370db
DATA mediumseagreen,3cb371,mediumslateblue,7b68ee,mediumspringgreen,00fa9a,mediumturquoise,48d1cc,mediumvioletred,c71585
DATA midnightblue,191970,mintcream,f5fffa,mistyrose,ffe4e1,moccasin,ffe4b5,navajowhite,ffdead
DATA navy,000080,oldlace,fdf5e6,olive,808000,olivedrab,6b8e23,orange,ffa500
DATA orangered,ff4500,orchid,da70d6,palegoldenrod,eee8aa,palegreen,98fb98,paleturquoise,afeeee
DATA palevioletred,db7093,papayawhip,ffefd5,peachpuff,ffdab9,peru,cd853f,pink,ffc0cb
DATA plum,dda0dd,powderblue,b0e0e6,purple,800080,red,ff0000,rosybrown,bc8f8f
DATA royalblue,4169e1,saddlebrown,8b4513,salmon,fa8072,sandybrown,f4a460,seagreen,2e8b57
DATA seashell,fff5ee,sienna,a0522d,silver,c0c0c0,skyblue,87ceeb,slateblue,6a5acd
DATA slategray,708090,snow,fffafa,springgreen,00ff7f,steelblue,4682b4,tan,d2b48c
DATA teal,008080,thistle,d8bfd8,tomato,ff6347,turquoise,40e0d0,violet,ee82ee
DATA wheat,f5deb3,white,ffffff,whitesmoke,f5f5f5,yellow,ffff00,yellowgreen,9acd32
!
DATA black,000000,aliceblue,f0f8ff,darkcyan,008b8b,lightyellow,ffffe0,coral,ff7f50,dimgray,696969,lavender,e6e6fa,teal,008080,lightgoldenrodyellow,fafad2
DATA tomato,ff6347,gray,808080,lightsteelblue,b0c4de,darkslategray,2f4f4f,lemonchiffon,fffacd,orangered,ff4500,darkgray,a9a9a9,lightslategray,778899,darkgreen,006400
DATA wheat,f5deb3,red,ff0000,silver,c0c0c0,slategray,708090,green,00ff00,burlywood,deb887,crimson,dc143c,lightgray,d3d3d3,steelblue,4682b4,forestgreen,228b22
DATA tan,d2b48c,mediumvioletred,c71585,gainsboro,dcdcdc,royalblue,4169e1,seagreen,2e8b57,khaki,f0e68c,deeppink,ff1493,whitesmoke,f5f5f5,midnightblue,191970
DATA mediumseagreen,3cb371,yellow,ffff00,hotpink,ff69b4,white,ffffff,navy,000080,mediumaquamarine,66cdaa,gold,ffd700,palevioletred,db7093,snow,fffafa,darkblue,00008b
DATA darkseagreen,8fbc8f,orange,ffa500,pink,ffc0cb,ghostwhite,f8f8ff,mediumblue,0000cd,aquamarine,7fffd4,sandybrown,f4a460,lightpink,ffb6c1,floralwhite,fffaf0
DATA blue,0000ff,palegreen,98fb98,darkorange,ff8c00,thistle,d8bfd8,linen,faf0e6,dodgerblue,1e90ff,lightgreen,90ee90,goldenrod,daa520,magenta,ff00ff,antiquewhite,faebd7
DATA cornflowerblue,6495ed,springgreen,00ff7,fperu,cd853f,fuchsia,ff00ff,papayawhip,ffefd5,deepskyblue,00bfff,mediumspringgreen,00fa9a,darkgoldenrod,b8860b
DATA violet,ee82ee,blanchedalmond,ffebcd,lightskyblue,87cefa,lawngreen,7cfc00,chocolate,d2691e,plum,dda0dd,bisque,ffe4c4,skyblue,87ceeb,chartreuse,7fff00
DATA sienna,a0522d,orchid,da70d6,moccasin,ffe4b5,lightblue,add8e6,greenyellow,adff2f,saddlebrown,8b4513,mediumorchid,ba55d3,navajowhite,ffdead,powderblue,b0e0e6
DATA lime,00ff00,maroon,800000,darkorchid,9932cc,peachpuff,ffdab9,paleturquoise,afeeee,limegreen,32cd32,darkred,8b0000,darkviolet,9400d3,mistyrose,ffe4e1
DATA lightcyan,e0ffff,yellowgreen,9acd32,brown,a52a2a,darkmagenta,8b008b,lavenderblush,fff0f5,cyan,00ffff,darkolivegreen,556b2f,firebrick,b22222,purple,800080
DATA seashell,fff5ee,aqua,00ffff,olivedrab,6b8e23,indianred,cd5c5c,indigo,4b0082,oldlace,fdf5e6,turquoise,40e0d0,olive,808000,rosybrown,bc8f8f,darkslateblue,483d8b
DATA ivory,fffff0,mediumturquoise,48d1cc,darkkhaki,bdb76b,darksalmon,e9967a,blueviolet,8a2be2,honeydew,f0fff0,darkturquoise,00ced1,palegoldenrod,eee8aa,lightcoral,f08080
DATA mediumpurple,9370db,mintcream,f5fffa,lightseagreen,20b2aa,cornsilk,fff8dc,salmon,fa8072,slateblue,6a5acd,azure,f0ffff,cadetblue,5f9ea0,beige,f5f5dc,lightsalmon,ffa07a
DATA mediumslateblue,7b68ee
END FUNCTION
----------------------------------------------------------------------------------------
次のプログラムは下記サイトを参考にしたものですが、例えば"青"を"0000FF"と定義されていません。
wikipediaでも"青"を"0000FF"だとはしていないようです。
https://www.colordic.org/w
https://ja.wikipedia.org/wiki/日本の色の一覧
PRINT COLORNAME("青")
!SET COLOR MODE "NATIVE"
!SET COLOR COLORNAME("金色")
!PLOT AREA:0,0;1,0;1,1;0,1
!!!PRINT COLORNAME("どどめ色") ! 未定義
!!!PRINT COLORNAME("糞色") ! ばばいろ http://fkblog.net/web_color/875B4E_000802.html
END
EXTERNAL FUNCTION COLORNAME(NAME$)
!SET COLOR MODE "NATIVE"
RESTORE
DO
READ IF MISSING THEN EXIT DO:N$,H$,COL$
IF NAME$=N$ OR NAME$=H$ THEN
!LET COLORNAME=COLORINDEX(BVAL(COL$(1:2),16)/255,BVAL(COL$(3:4),16)/255,BVAL(COL$(5:6),16)/255)
LET COLORNAME=65536*BVAL(COL$(5:6),16)+256*BVAL(COL$(3:4),16)+BVAL(COL$(1:2),16)
EXIT FUNCTION
END IF
LOOP
LET COLORNAME=-1
DATA 桜色,さくらいろ,fef4f4
DATA 小豆色,あずきいろ,96514d
DATA 黄金,こがね,e6b422
DATA 萌葱色,もえぎいろ,006e54
DATA 古代紫,こだいむらさき,895b8a
DATA 薄桜,うすざくら,fdeff2
DATA 枯茶,からちゃ,8d6449
DATA 櫨染,はじぞめ,d9a62e
DATA 花緑青,はなろくしょう,00a381
DATA 茄子紺,なすこん,824880
DATA 桜鼠,さくらねず,e9dfe5
DATA 飴色,あめいろ,deb068
DATA 黄朽葉色,きくちばいろ,d3a243
DATA 翡翠色,ひすいいろ,38b48b
DATA 二藍,ふたあい,915c8b
DATA 鴇鼠,ときねず,e4d2d8
DATA 駱駝色,らくだいろ,bf794e
DATA 山吹茶,やまぶきちゃ,c89932
DATA 青緑,あおみどり,00a497
DATA 京紫,きょうむらさき,9d5b8b
DATA 虹色,にじいろ,f6bfbc
DATA 土色,つちいろ,bc763c
DATA 芥子色,からしいろ,d0af4c
DATA 水浅葱,みずあさぎ,80aba9
DATA 蒲葡,えびぞめ,7a4171
DATA 珊瑚色,さんごいろ,f5b1aa
DATA 黄唐茶,きがらちゃ,b98c46
DATA 豆がら茶,まめがらちゃ,8b968d
DATA 錆浅葱,さびあさぎ,5c9291
DATA 若紫,わかむらさき,bc64a4
DATA 一斤染,いっこんぞめ,f5b199
DATA 桑染,くわぞめ,b79b5b
DATA 麹塵,きくじん,6e7955
DATA 青碧,せいへき,478384
DATA 紅紫,べにむらさき,b44c97
DATA 宍色,ししいろ,efab93
DATA 櫨色,はじいろ,b77b57
DATA 山鳩色,やまばといろ,767c6b
DATA 御召茶,おめしちゃ,43676b
DATA 梅紫,うめむらさき,aa4c8f
DATA 紅梅色,こうばいいろ,f2a0a1
DATA 黄橡,きつるばみ,b68d4c
DATA 利休鼠,りきゅうねずみ,888e7e
DATA 湊鼠,みなとねずみ,80989b
DATA 菖蒲色,あやめいろ,cc7eb1
DATA 薄紅,うすべに,f0908d
DATA 丁字染,ちょうじぞめ,ad7d4c
DATA 海松茶,みるちゃ,5a544b
DATA 高麗納戸,こうらいなんど,2c4f54
DATA 紅藤色,べにふじいろ,cca6bf
DATA 甚三紅,じんざもみ,ee827c
DATA 香染,こうぞめ,ad7d4c
DATA 藍海松茶,あいみるちゃ,56564b
DATA 浅紫,あさむらさき,c4a3bf
DATA 桃色,ももいろ,f09199
DATA 枇杷茶,びわちゃ,ae7c4f
DATA 藍媚茶,あいこびちゃ,555647
DATA 錆鼠,さびねず,47585c
DATA 紫水晶,むらさきすいしょう,e7e7eb
DATA 鴇色,ときいろ,f4b3c2
DATA 芝翫茶,しかんちゃ,ad7e4e
DATA 千歳茶,せんさいちゃ,494a41
DATA 錆鉄御納戸,さびてつおなんど,485859
DATA 薄梅鼠,うすうめねず,dcd6d9
DATA 撫子色,なでしこいろ,eebbcb
DATA 焦香,こがれこう,ae7c58
DATA 岩井茶,いわいちゃ,6b6f59
DATA 藍鼠,あいねず,6c848d
DATA 暁鼠,あかつきねず,d3cfd9
DATA 灰梅,はいうめ,e8d3c7
DATA 胡桃色,くるみいろ,a86f4c
DATA 仙斎茶,せんさいちゃ,474b42
DATA 錆御納戸,さびおなんど,53727d
DATA 牡丹鼠,ぼたんねず,d3ccd6
DATA 灰桜,はいざくら,e8d3d1
DATA 渋紙色,しぶかみいろ,946243
DATA 黒緑,くろみどり,333631
DATA 舛花色,ますはないろ,5b7e91
DATA 霞色,かすみいろ,c8c2c6
DATA 淡紅藤,あわべにふじ,e6cde3
DATA 朽葉色,くちばいろ,917347
DATA 柳煤竹,やなぎすすたけ,5b6356
DATA 熨斗目花色,のしめはないろ,426579
DATA 藤鼠,ふじねず,a6a5c4
DATA 石竹色,せきちくいろ,e5abbe
DATA 桑茶,くわちゃ,956f29
DATA 樺茶色,かばちゃいろ,726250
DATA 御召御納戸,おめしおなんど,4c6473
DATA 半色,はしたいろ,a69abd
DATA 薄紅梅,うすこうばい,e597b2
DATA 路考茶,ろこうちゃ,8c7042
DATA 空五倍子色,うつぶしいろ,9d896c
DATA 鉄御納戸,てつおなんど,455765
DATA 薄色,うすいろ,a89dac
DATA 桃花色,ももはないろ,e198b4
DATA 国防色,こくぼうしょく,7b6c3e
DATA 生壁色,なまかべいろ,94846a
DATA 紺鼠,こんねず,44617b
DATA 薄鼠,うすねず,9790a4
DATA 水柿,みずがき,e4ab9b
DATA 伽羅色,きゃらいろ,d8a373
DATA 肥後煤竹,ひごすすたけ,897858
DATA 藍鉄,あいてつ,393f4c
DATA 鳩羽鼠,はとばねずみ,9e8b8e
DATA ときがら茶,ときがらちゃ,e09e87
DATA 江戸茶,えどちゃ,cd8c5c
DATA 媚茶,こびちゃ,716246
DATA 青褐,あおかち,393e4f
DATA 鳩羽色,はとばいろ,95859c
DATA 退紅,あらぞめ,d69090
DATA 樺色,かばいろ,cd5e3c
DATA 白橡,しろつるばみ,cbb994
DATA 褐返,かちかえし,203744
DATA 桔梗鼠,ききょうねず,95949a
DATA 薄柿,うすがき,d4acad
DATA 紅鬱金,べにうこん,cb8347
DATA 亜麻色,あまいろ,d6c6af
DATA 褐色,かちいろ,4d4c61
DATA 紫鼠,むらさきねず,71686c
DATA 長春色,ちょうしゅんいろ,c97586
DATA 土器色,かわらけいろ,c37854
DATA 榛色,はしばみいろ,bfa46f
DATA 月白,げっぱく,eaf4fc
DATA 葡萄鼠,ぶどうねずみ,705b67
DATA 梅鼠,うめねず,c099a0
DATA 狐色,きつねいろ,c38743
DATA 灰汁色,あくいろ,9e9478
DATA 白菫色,しろすみれいろ,eaedf7
DATA 濃色,こきいろ,634950
DATA 鴇浅葱,ときあさぎ,b88884
DATA 黄土色,おうどいろ,c39143
DATA 利休茶,りきゅうちゃ,a59564
DATA 白花色,しらはないろ,e8ecef
DATA 紫鳶,むらさきとび,5f414b
DATA 梅染,うめぞめ,b48a76
DATA 琥珀色,こはくいろ,bf783a
DATA 鶯茶,うぐいすちゃ,715c1f
DATA 藍白,あいじろ,ebf6f7
DATA 濃鼠,こいねず,4f455c
DATA 蘇芳香,すおうこう,a86965
DATA 赤茶,あかちゃ,bb5535
DATA 木蘭色,もくらんじき,c7b370
DATA 白藍,しらあい,c1e4e9
DATA 藤煤竹,ふじすすたけ,5a5359
DATA 浅蘇芳,あさすおう,a25768
DATA 代赭,たいしゃ,bb5520
DATA 砂色,すないろ,dcd3b2
DATA 水色,みずいろ,bce2e8
DATA 滅紫,けしむらさき,594255
DATA 真朱,まそお,ec6d71
DATA 煉瓦色,れんがいろ,b55233
DATA 油色,あぶらいろ,a19361
DATA 瓶覗,かめのぞき,a2d7dd
DATA 紅消鼠,べにけしねずみ,524748
DATA 赤紫,あかむらさき,eb6ea5
DATA 雀茶,すずめちゃ,aa4f37
DATA 利休色,りきゅういろ,8f8667
DATA 秘色色,ひそくいろ,abced8
DATA 似せ紫,にせむらさき,513743
DATA 躑躅色,つつじいろ,e95295
DATA 団十郎茶,だんじゅうろうちゃ,9f563a
DATA 梅幸茶,ばいこうちゃ,887938
DATA 空色,そらいろ,a0d8ef
DATA 灰黄緑,はいきみどり,e6eae3
DATA 牡丹色,ぼたんいろ,e7609e
DATA 柿渋色,かきしぶいろ,9f563a
DATA 璃寛茶,りかんちゃ,6a5d21
DATA 勿忘草色,わすれなぐさいろ,89c3eb
DATA 蕎麦切色,そばきりいろ,d4dcd6
DATA 今様色,いまよういろ,d0576b
DATA 紅鳶,べにとび,9a493f
DATA 黄海松茶,きみるちゃ,918754
DATA 青藤色,あおふじいろ,84a2d4
DATA 薄雲鼠,うすくもねず,d4dcda
DATA 中紅,なかべに,c85179
DATA 灰茶,はいちゃ,98623c
DATA 菜種油色,なたねゆいろ,a69425
DATA 白群,びゃくぐん,83ccd2
DATA 枯野色,かれのいろ,d3cbc6
DATA 薔薇色,ばらいろ,e9546b
DATA 茶色,ちゃいろ,965042
DATA 青朽葉,あおくちば,ada250
DATA 浅縹,あさはなだ,84b9cb
DATA 潤色,うるみいろ,c8c2be
DATA 韓紅,からくれない,e95464
DATA 檜皮色,ひわだいろ,965036
DATA 根岸色,ねぎしいろ,938b4b
DATA 薄花色,うすはないろ,698aab
DATA 利休白茶,りきゅうしろちゃ,b3ada0
DATA 銀朱,ぎんしゅ,c85554
DATA 鳶色,とびいろ,95483f
DATA 鶸茶,ひわちゃ,8c8861
DATA 納戸色,なんどいろ,008899
DATA 茶鼠,ちゃねずみ,a99e93
DATA 赤紅,あかべに,c53d43
DATA 柿茶,かきちゃ,954e2a
DATA 柳茶,やなぎちゃ,a1a46d
DATA 浅葱色,あさぎいろ,00a3af
DATA 胡桃染,くるみぞめ,a58f86
DATA 紅緋,べにひ,e83929
DATA 弁柄色,べんがらいろ,8f2e14
DATA 海松色,みるいろ,726d40
DATA 花浅葱,はなあさぎ,2a83a2
DATA 江戸鼠,えどねず,928178
DATA 赤,あか,e60033
DATA 赤錆色,あかさびいろ,8a3319
DATA 鶯色,うぐいすいろ,928c36
DATA 新橋色,しんばしいろ,59b9c6
DATA 煤色,すすいろ,887f7a
DATA 猩々緋,しょうじょうひ,e2041b
DATA 褐色,かっしょく,8a3b00
DATA 緑黄色,りょくおうしょく,dccb18
DATA 天色,あまいろ,2ca9e1
DATA 丁子茶,ちょうじちゃ,b4866b
DATA 紅,くれない,d7003a
DATA 栗梅,くりうめ,852e19
DATA 鶸色,ひわいろ,d7cf3a
DATA 露草色,つゆくさいろ,38a1db
DATA 柴染,ふしぞめ,b28c6e
DATA 深緋,こきひ,c9171e
DATA 紅檜皮,べにひはだ,7b4741
DATA 抹茶色,まっちゃいろ,c5c56a
DATA 青,あお,0095d9
DATA 宗伝唐茶,そうでんからちゃ,a16d5d
DATA 緋色,ひいろ,d3381c
DATA 海老茶,えびちゃ,773c30
DATA 若草色,わかくさいろ,c3d825
DATA 薄藍,うすあい,0094c8
DATA 砺茶,とのちゃ,9f6f55
DATA 赤丹,あかに,ce5242
DATA 唐茶,からちゃ,783c1d
DATA 黄緑,きみどり,b8d200
DATA 縹色,はなだいろ,2792c3
DATA 煎茶色,せんちゃいろ,8c6450
DATA 紅赤,べにあか,d9333f
DATA 栗色,くりいろ,762f07
DATA 若芽色,わかめいろ,e0ebaf
DATA 紺碧,こんぺき,007bbb
DATA 銀煤竹,ぎんすすだけ,856859
DATA 臙脂,えんじ,b94047
DATA 赤銅色,しゃくどういろ,752100
DATA 若菜色,わかないろ,d8e698
DATA 薄群青,うすぐんじょう,5383c3
DATA 黄枯茶,きがらちゃ,765c47
DATA 朱,あけ,ba2636
DATA 錆色,さびいろ,6c3524
DATA 若苗色,わかなえいろ,c7dc68
DATA 薄花桜,うすはなざくら,5a79ba
DATA 煤竹色,すすたけいろ,6f514c
DATA 茜色,あかねいろ,b7282e
DATA 赤褐色,せっかっしょく,683f36
DATA 青丹,あおに,99ab4e
DATA 群青色,ぐんじょういろ,4c6cb3
DATA 焦茶,こげちゃ,6f4b3e
DATA 紅海老茶,べにえびちゃ,a73836
DATA 茶褐色,ちゃかっしょく,664032
DATA 草色,くさいろ,7b8d42
DATA 杜若色,かきつばたいろ,3e62ad
DATA 黒橡,くろつるばみ,544a47
DATA 蘇芳,すおう,9e3d3f
DATA 栗皮茶,くりかわちゃ,6d3c32
DATA 苔色,こけいろ,69821b
DATA 瑠璃色,るりいろ,1e50a2
DATA 憲法色,けんぽういろ,543f32
DATA 真紅,しんく,a22041
DATA 黒茶,くろちゃ,583822
DATA 萌黄,もえぎ,aacf53
DATA 薄縹,うすはなだ,507ea4
DATA 涅色,くりいろ,554738
DATA 濃紅,こいくれない,a22041
DATA 葡萄茶,えびちゃ,6c2c2f
DATA 苗色,なえいろ,b0ca71
DATA 瑠璃紺,るりこん,19448e
DATA 檳榔子染,びんろうじぞめ,433d3c
DATA 象牙色,ぞうげいろ,f8f4e6
DATA 葡萄色,えびいろ,640125
DATA 若葉色,わかばいろ,b9d08b
DATA 紺瑠璃,こんるり,164a84
DATA 黒鳶,くろとび,432f2f
DATA 練色,ねりいろ,ede4cd
DATA 萱草色,かんぞういろ,f8b862
DATA 松葉色,まつばいろ,839b5c
DATA 藍色,あいいろ,165e83
DATA 赤墨,あかすみ,3f312b
DATA 灰白色,かいはくしょく,e9e4d4
DATA 柑子色,こうじいろ,f6ad49
DATA 夏虫色,なつむしいろ,cee4ae
DATA 青藍,せいらん,274a78
DATA 黒紅,くろべに,302833
DATA 蒸栗色,むしぐりいろ,ebe1a9
DATA 金茶,きんちゃ,f39800
DATA 鶸萌黄,ひわもえぎ,82ae46
DATA 深縹,こきはなだ,2a4073
DATA 白,しろ,ffffff
DATA 女郎花,おみなえし,f2f2b0
DATA 蜜柑色,みかんいろ,f08300
DATA 柳色,やなぎいろ,a8c97f
DATA 紺色,こんいろ,223a70
DATA 胡粉色,ごふんいろ,fffffc
DATA 枯草色,かれくさいろ,e4dc8a
DATA 鉛丹色,えんたんいろ,ec6d51
DATA 青白橡,あおしろつるばみ,9ba88d
DATA 紺青,こんじょう,192f60
DATA 卯の花色,うのはないろ,f7fcfe
DATA 淡黄,たんこう,f8e58c
DATA 黄丹,おうに,ee7948
DATA 柳鼠,やなぎねず,c8d5bb
DATA 留紺,とめこん,1c305c
DATA 白磁,はくじ,f8fbf8
DATA 白茶,しらちゃ,ddbb99
DATA 柿色,かきいろ,ed6d3d
DATA 裏葉柳,うらはやなぎ,c1d8ac
DATA 濃藍,こいあい,0f2350
DATA 生成り色,きなりいろ,fbfaf5
DATA 赤白橡,あかしろつるばみ,d7a98c
DATA 黄赤,きあか,ec6800
DATA 山葵色,わさびいろ,a8bf93
DATA 鉄紺,てつこん,17184b
DATA 乳白色,にゅうはくしょく,f3f3f3
DATA 洗柿,あらいがき,f2c9ac
DATA 人参色,にんじんいろ,ec6800
DATA 老竹色,おいたけいろ,769164
DATA 漆黒,しっこく,0d0015
DATA 白練,しろねり,f3f3f2
DATA 鳥の子色,とりのこいろ,fff1cf
DATA 橙色,だいだいいろ,ee7800
DATA 白緑,びゃくろく,d6e9ca
DATA 淡藤色,あわふじいろ,bbc8e6
DATA 素色,そしょく,eae5e3
DATA 蜂蜜色,はちみついろ,fddea5
DATA 照柿,てりがき,eb6238
DATA 淡萌黄,うすもえぎ,93ca76
DATA 藤色,ふじいろ,bbbcde
DATA 白梅鼠,しらうめねず,e5e4e6
DATA 肌色,はだいろ,fce2c4
DATA 赤橙,あかだいだい,ea5506
DATA 柳染,やなぎぞめ,93b881
DATA 紅掛空色,べにかけそらいろ,8491c3
DATA 白鼠,しろねず,dcdddd
DATA 薄卵色,うすたまごいろ,fde8d0
DATA 金赤,きんあか,ea5506
DATA 薄萌葱,うすもえぎ,badcad
DATA 紅碧,べにみどり,8491c3
DATA 絹鼠,きぬねず,dddcd6
DATA 雄黄,ゆうおう,f9c89b
DATA 朱色,しゅいろ,eb6101
DATA 深川鼠,ふかがわねずみ,97a791
DATA 紺桔梗,こんききょう,4d5aaf
DATA 灰青,はいあお,c0c6c9
DATA 洒落柿,しゃれがき,f7bd8f
DATA 小麦色,こむぎいろ,e49e61
DATA 若緑,わかみどり,98d98e
DATA 花色,はないろ,4d5aaf
DATA 銀鼠,ぎんねず,afafb0
DATA 赤香,あかこう,f6b894
DATA 丹色,にいろ,e45e32
DATA 浅緑,あさみどり,88cb7f
DATA 紺藍,こんあい,4a488e
DATA 薄鈍,うすにび,adadad
DATA 砥粉色,とのこいろ,f4dda5
DATA 黄茶,きちゃ,e17b34
DATA 薄緑,うすみどり,69b076
DATA 紅桔梗,べにききょう,4d4398
DATA 薄墨色,うすずみいろ,a3a3a2
DATA 肉色,にくいろ,f1bf99
DATA 肉桂色,にっけいいろ,dd7a56
DATA 青鈍,あおにび,6b7b6e
DATA 桔梗色,ききょういろ,5654a2
DATA 錫色,すずいろ,9ea1a3
DATA 人色,ひといろ,f1bf99
DATA 赤朽葉色,あかくちばいろ,db8449
DATA 青磁鼠,せいじねず,bed2c3
DATA 藤納戸,ふじなんど,706caa
DATA 素鼠,すねずみ,9fa0a0
DATA 丁子色,ちょうじいろ,efcd9a
DATA 黄櫨染,こうろぜん,d66a35
DATA 薄青,うすあお,93b69c
DATA 紅掛花色,べにかけはないろ,68699b
DATA 鼠色,ねずみいろ,949495
DATA 香色,こういろ,efcd9a
DATA 蒲公英色,たんぽぽいろ,ffd900
DATA 錆青磁,さびせいじ,a6c8b2
DATA 紫苑色,しおんいろ,867ba9
DATA 源氏鼠,げんじねず,888084
DATA 薄香,うすこう,f0cfa0
DATA 黄色,きいろ,ffd900
DATA 緑青色,ろくしょういろ,47885e
DATA 白藤色,しらふじいろ,dbd0e6
DATA 灰色,はいいろ,7d7d7d
DATA 浅黄,うすき,edd3a1
DATA 中黄,ちゅうき,ffea00
DATA 千歳緑,ちとせみどり,316745
DATA 藤紫,ふじむらさき,a59aca
DATA 鉛色,なまりいろ,7b7c7d
DATA 枯色,かれいろ,e0c38c
DATA 菜の花色,なのはないろ,ffec47
DATA 若竹色,わかたけいろ,68be8d
DATA 菫色,すみれいろ,7058a3
DATA 鈍色,にびいろ,727171
DATA 淡香,うすこう,f3bf88
DATA 黄檗色,きはだいろ,fef263
DATA 緑,みどり,3eb370
DATA 青紫,あおむらさき,674598
DATA 墨,すみ,595857
DATA 杏色,あんずいろ,f7b977
DATA 卵色,たまごいろ,fcd575
DATA 常磐色,ときわいろ,007b43
DATA 菖蒲色,しょうぶいろ,674196
DATA 丼鼠,どぶねずみ,595455
DATA 東雲色,しののめいろ,f19072
DATA 花葉色,はなばいろ,fbd26b
DATA 千草鼠,ちぐさねず,bed3ca
DATA 竜胆色,りんどういろ,9079ad
DATA 消炭色,けしずみいろ,524e4d
DATA 曙色,あけぼのいろ,f19072
DATA 刈安色,かりやすいろ,f5e56b
DATA 千草色,ちぐさいろ,92b5a9
DATA 江戸紫,えどむらさき,745399
DATA 藍墨茶,あいすみちゃ,474a4d
DATA 珊瑚朱色,さんごしゅいろ,ee836f
DATA 玉蜀黍色,とうもろこしいろ,eec362
DATA 青磁色,せいじいろ,7ebea5
DATA 本紫,ほんむらさき,65318e
DATA 羊羹色,ようかんいろ,383c3c
DATA 深支子,こきくちなし,eb9b6f
DATA 金糸雀色,かなりあいろ,ebd842
DATA 青竹色,あおたけいろ,7ebeab
DATA 葡萄色,ぶどういろ,522f60
DATA 蝋色,ろういろ,2b2b2b
DATA 黄支子色,きくちなしいろ,ffdb4f
DATA 常磐緑,ときわみどり,028760
DATA 深紫,ふかむらさき,493759
DATA 黒,くろ,2b2b2b
DATA 浅緋,うすきひ,df7163
DATA 支子色,くちなしいろ,fbca4d
DATA 木賊色,とくさいろ,3b7960
DATA 紫黒,しこく,2e2930
DATA 烏羽色,からすばいろ,180614
DATA 真赭,まそほ,d57c6b
DATA 向日葵色,ひまわりいろ,fcc800
DATA 天鵞絨,びろうど,2f5d50
DATA 紫,むらさき,884898
DATA 鉄黒,てつぐろ,281a14
DATA 洗朱,あらいしゅ,d0826c
DATA 山吹色,やまぶきいろ,f8b500
DATA 虫襖,むしあお,3a5b52
DATA 薄葡萄,うすぶどう,c0a2c7
DATA 濡羽色,ぬればいろ,000b00
DATA 遠州茶,えんしゅうちゃ,ca8269
DATA 鬱金色,うこんいろ,fabf14
DATA 革色,かわいろ,475950
DATA 紫紺,しこん,460e44
DATA 黒檀,こくたん,250d00
DATA 紅樺色,べにかばいろ,bb5548
DATA 藤黄,とうおう,f7c114
DATA 深緑,ふかみどり,00552e
DATA 暗紅色,あんこうしょく,74325c
DATA 憲法黒茶,けんぽうくろちゃ,241a08
DATA 赭,そほ,ab6953
DATA 金色,こんじき,e6b422
DATA 鉄色,てついろ,005243
DATA 桑の実色,くわのみいろ,55295b
DATA 暗黒色,あんこくしょく,16160e
END FUNCTION
----------------------------------------------------------------------------------------
次のプログラムは下記サイトを参考に定義したものです。
https://nipponcolors.com/
PRINT COLORNAME("桜")
!SET COLOR MODE "NATIVE"
!SET COLOR COLORNAME("FUJI")
!PLOT AREA:0,0;1,0;1,1;0,1
END
EXTERNAL FUNCTION COLORNAME(NAME$)
!SET COLOR MODE "NATIVE"
RESTORE
DO
READ IF MISSING THEN EXIT DO:N$,ROMA$,COL$
IF NAME$=N$ OR UCASE$(NAME$)=ROMA$ THEN
!LET COLORNAME=COLORINDEX(BVAL(COL$(1:2),16)/255,BVAL(COL$(3:4),16)/255,BVAL(COL$(5:6),16)/255)
LET COLORNAME=65536*BVAL(COL$(5:6),16)+256*BVAL(COL$(3:4),16)+BVAL(COL$(1:2),16)
EXIT FUNCTION
END IF
LOOP
LET COLORNAME=-1
DATA 撫子,NADESHIKO,DC9FB4
DATA 紅梅,KOHBAI,E16B8C
DATA 蘇芳,SUOH,8E354A
DATA 退紅,TAIKOH,F8C3CD
DATA 一斥染,IKKONZOME,F4A7B9
DATA 桑染,KUWAZOME,64363C
DATA 桃,MOMO,F596AA
DATA 苺,ICHIGO,B5495B
DATA 薄紅,USUBENI,E87A90
DATA 今様,IMAYOH,D05A6E
DATA 中紅,NAKABENI,DB4D6D
DATA 桜,SAKURA,FEDFE1
DATA 梅鼠,UMENEZUMI,9E7A7A
DATA 韓紅花,KARAKURENAI,D0104C
DATA 燕脂,ENJI,9F353A
DATA 紅,KURENAI,CB1B45
DATA 鴇,TOKI,EEA9A9
DATA 長春,CYOHSYUN,BF6766
DATA 深緋,KOKIAKE,86473F
DATA 桜鼠,SAKURANEZUMI,B19693
DATA 甚三紅,JINZAMOMI,EB7A77
DATA 小豆,AZUKI,954A45
DATA 蘇芳香,SUOHKOH,A96360
DATA 赤紅,AKABENI,CB4042
DATA 真朱,SHINSYU,AB3B3A
DATA 灰桜,HAIZAKURA,D7C4BB
DATA 栗梅,KURIUME,904840
DATA 海老茶,EBICHA,734338
DATA 銀朱,GINSYU,C73E3A
DATA 黒鳶,KUROTOBI,554236
DATA 紅鳶,BENITOBI,994639
DATA 曙,AKEBONO,F19483
DATA 紅樺,BENIKABA,B54434
DATA 水がき,MIZUGAKI,B9887D
DATA 珊瑚朱,SANGOSYU,F17C67
DATA 紅檜皮,BENIHIWADA,884C3A
DATA 猩猩緋,SYOJYOHI,E83015
DATA 鉛丹,ENTAN,D75455
DATA 芝翫茶,SHIKANCHA,B55D4C
DATA 檜皮,HIWADA,854836
DATA 柿渋,KAKISHIBU,A35E47
DATA 緋,AKE,CC543A
DATA 鳶,TOBI,724832
DATA 紅緋,BENIHI,F75C2F
DATA 栗皮茶,KURIKAWACHA,6A4028
DATA 弁柄,BENGARA,9A5034
DATA 照柿,TERIGAKI,C46243
DATA 江戸茶,EDOCHA,AF5F3C
DATA 洗朱,ARAISYU,FB966E
DATA 百塩茶,MOMOSHIOCHA,724938
DATA 唐茶,KARACHA,B47157
DATA ときがら茶,TOKIGARACHA,DB8E71
DATA 黄丹,OHNI,F05E1C
DATA そひ,SOHI,ED784A
DATA 遠州茶,ENSYUCHA,CA7853
DATA 樺茶,KABACHA,B35C37
DATA 焦茶,KOGECHA,563F2E
DATA 赤香,AKAKOH,E3916E
DATA 宍,SHISHI,F0A986
DATA 宗伝唐茶,SODENKARACHA,A0674B
DATA 樺,KABA,C1693C
DATA 深支子,KOKIKUCHINASHI,FB9966
DATA 胡桃,KURUMI,947A6D
DATA 代赭,TAISYA,A36336
DATA 洗柿,ARAIGAKI,E79460
DATA 黄櫨染,KOHROZEN,7D532C
DATA 赤朽葉,AKAKUCHIBA,C78550
DATA 礪茶,TONOCHA,985F2A
DATA 赤白橡,AKASHIROTSURUBAMI,E1A679
DATA 煎茶,SENCHA,855B32
DATA 萱草,KANZO,FC9F4D
DATA 洒落柿,SHAREGAKI,FFBA84
DATA 紅鬱金,BENIUKON,E98B2A
DATA 梅染,UMEZOME,E9A368
DATA 枇杷茶,BIWACHA,B17844
DATA 丁子茶,CHOJICHA,96632E
DATA 憲法染,KENPOHZOME,43341B
DATA 琥珀,KOHAKU,CA7A2C
DATA 薄柿,USUGAKI,ECB88A
DATA 伽羅,KYARA,78552B
DATA 丁子染,CHOJIZOME,B07736
DATA 柴染,FUSHIZOME,967249
DATA 朽葉,KUCHIBA,E2943B
DATA 金茶,KINCHA,C7802D
DATA 狐,KITSUNE,9B6E23
DATA 煤竹,SUSUTAKE,6E552F
DATA 薄香,USUKOH,EBB471
DATA 砥粉,TONOKO,D7B98E
DATA 銀煤竹,GINSUSUTAKE,82663A
DATA 黄土,OHDO,B68E55
DATA 白茶,SHIRACHA,BC9F77
DATA 媚茶,KOBICHA,876633
DATA 黄唐茶,KIGARACHA,C18A26
DATA 山吹,YAMABUKI,FFB11B
DATA 山吹茶,YAMABUKICHA,D19826
DATA 櫨染,HAJIZOME,DDA52D
DATA 桑茶,KUWACHA,C99833
DATA 玉子,TAMAGO,F9BF45
DATA 白橡,SHIROTSURUBAMI,DCB879
DATA 黄橡,KITSURUBAMI,BA9132
DATA 玉蜀黍,TAMAMOROKOSHI,E8B647
DATA 花葉,HANABA,F7C242
DATA 生壁,NAMAKABE,7D6C46
DATA 鳥の子,TORINOKO,DAC9A6
DATA 浅黄,USUKI,FAD689
DATA 黄朽葉,KIKUCHIBA,D9AB42
DATA 梔子,KUCHINASHI,F6C555
DATA 籐黄,TOHOH,FFC408
DATA 鬱金,UKON,EFBB24
DATA 芥子,KARASHI,CAAD5F
DATA 肥後煤竹,HIGOSUSUTAKE,8D742A
DATA 利休白茶,RIKYUSHIRACHA,B4A582
DATA 灰汁,AKU,877F6C
DATA 利休茶,RIKYUCHA,897D55
DATA 路考茶,ROKOHCHA,74673E
DATA 菜種油,NATANEYU,A28C37
DATA 鶯茶,UGUISUCHA,6C6024
DATA 黄海松茶,KIMIRUCHA,867835
DATA 海松茶,MIRUCHA,62592C
DATA 刈安,KARIYASU,E9CD4C
DATA 菜の花,NANOHANA,F7D94C
DATA 黄蘗,KIHADA,FBE251
DATA 蒸栗,MUSHIKURI,D9CD90
DATA 青朽葉,AOKUCHIBA,ADA142
DATA 女郎花,OMINAESHI,DDD23B
DATA 鶸茶,HIWACHA,A5A051
DATA 鶸,HIWA,BEC23F
DATA 鶯,UGUISU,6C6A2D
DATA 柳茶,YANAGICHA,939650
DATA 苔,KOKE,838A2D
DATA 麹塵,KIKUJIN,B1B479
DATA 璃寛茶,RIKANCHA,616138
DATA 藍媚茶,AIKOBICHA,4B4E2A
DATA 海松,MIRU,5B622E
DATA 千歳茶,SENSAICHA,4D5139
DATA 梅幸茶,BAIKOCHA,89916B
DATA 鶸萌黄,HIWAMOEGI,90B44B
DATA 柳染,YANAGIZOME,91AD70
DATA 裏柳,URAYANAGI,B5CAA0
DATA 岩井茶,IWAICHA,646A58
DATA 萌黄,MOEGI,7BA23F
DATA 苗,NAE,86C166
DATA 柳煤竹,YANAGISUSUTAKE,4A593D
DATA 松葉,MATSUBA,42602D
DATA 青丹,AONI,516E41
DATA 薄青,USUAO,91B493
DATA 柳鼠,YANAGINEZUMI,808F7C
DATA 常磐,TOKIWA,1B813E
DATA 若竹,WAKATAKE,5DAC81
DATA 千歳緑,CHITOSEMIDORI,36563C
DATA 緑,MIDORI,227D51
DATA 白緑,BYAKUROKU,A8D8B9
DATA 老竹,OITAKE,6A8372
DATA 木賊,TOKUSA,2D6D4B
DATA 御納戸茶,ONANDOCHA,465D4C
DATA 緑青,ROKUSYOH,24936E
DATA 錆青磁,SABISEIJI,86A697
DATA 青竹,AOTAKE,00896C
DATA ビロード,VELUDO,096148
DATA 虫襖,MUSHIAO,20604F
DATA 藍海松茶,AIMIRUCHA,0F4C3A
DATA 沈香茶,TONOCHA2,4F726C
DATA 青緑,AOMIDORI,00AA90
DATA 青磁,SEIJI,69B0AC
DATA 鉄,TETSU,26453D
DATA 水浅葱,MIZUASAGI,66BAB7
DATA 青碧,SEIHEKI,268785
DATA 錆鉄御納戸,SABITETSUONANDO,405B55
DATA 高麗納戸,KORAINANDO,305A56
DATA 白群,BYAKUGUN,78C2C4
DATA 御召茶,OMESHICHA,376B6D
DATA 瓶覗,KAMENOZOKI,A5DEE4
DATA 深川鼠,FUKAGAWANEZUMI,77969A
DATA 錆浅葱,SABIASAGI,6699A1
DATA 水,MIZU,81C7D4
DATA 浅葱,ASAGI,33A6B8
DATA 御納戸,ONANDO,0C4842
DATA 藍,AI,0D5661
DATA 新橋,SHINBASHI,0089A7
DATA 錆御納戸,SABIONANDO,336774
DATA 鉄御納戸,TETSUONANDO,255359
DATA 花浅葱,HANAASAGI,1E88A8
DATA 藍鼠,AINEZUMI,566C73
DATA 舛花,MASUHANA,577C8A
DATA 空,SORA,58B2DC
DATA 熨斗目花,NOSHIMEHANA,2B5F75
DATA 千草,CHIGUSA,3A8FB7
DATA 御召御納戸,OMESHIONANDO,2E5C6E
DATA 縹,HANADA,006284
DATA 勿忘草,WASURENAGUSA,7DB9DE
DATA 群青,GUNJYO,51A8DD
DATA 露草,TSUYUKUSA,2EA9DF
DATA 黒橡,KUROTSURUBAMI,0B1013
DATA 紺,KON,0F2540
DATA 褐,KACHI,08192D
DATA 瑠璃,RURI,005CAF
DATA 瑠璃紺,RURIKON,0B346E
DATA 紅碧,BENIMIDORI,7B90D2
DATA 藤鼠,FUJINEZUMI,6E75A4
DATA 鉄紺,TETSUKON,261E47
DATA 紺青,KONJYO,113285
DATA 紅掛花,BENIKAKEHANA,4E4F97
DATA 紺桔梗,KONKIKYO,211E55
DATA 藤,FUJI,8B81C3
DATA 二藍,FUTAAI,70649A
DATA 楝,OUCHI,9B90C2
DATA 藤紫,FUJIMURASAKI,8A6BBE
DATA 桔梗,KIKYO,6A4C9C
DATA 紫苑,SHION,8F77B5
DATA 滅紫,MESSHI,533D5B
DATA 薄,USU,B28FCE
DATA 半,HASHITA,986DB2
DATA 江戸紫,EDOMURASAKI,77428D
DATA 紫紺,SHIKON,3C2F41
DATA 深紫,KOKIMURASAKI,4A225D
DATA 菫,SUMIRE,66327C
DATA 紫,MURASAKI,592C63
DATA 菖蒲,AYAME,6F3381
DATA 藤煤竹,FUJISUSUTAKE,574C57
DATA 紅藤,BENIFUJI,B481BB
DATA 黒紅,KUROBENI,3F2B36
DATA 茄子紺,NASUKON,572A3F
DATA 葡萄鼠,BUDOHNEZUMI,5E3D50
DATA 鳩羽鼠,HATOBANEZUMI,72636E
DATA 杜若,KAKITSUBATA,622954
DATA 蒲葡,EBIZOME,6D2E5B
DATA 牡丹,BOTAN,C1328E
DATA 梅紫,UMEMURASAKI,A8497A
DATA 似紫,NISEMURASAKI,562E37
DATA 躑躅,TSUTSUJI,E03C8A
DATA 紫鳶,MURASAKITOBI,60373E
DATA 白練,SHIRONERI,FCFAF2
DATA 胡粉,GOFUN,FFFFFB
DATA 白鼠,SHIRONEZUMI,BDC0BA
DATA 銀鼠,GINNEZUMI,91989F
DATA 鉛,NAMARI,787878
DATA 灰,HAI,828282
DATA 素鼠,SUNEZUMI,787D7B
DATA 利休鼠,RIKYUNEZUMI,707C74MI
DATA 鈍,NIBI,656765
DATA 青鈍,AONIBI,535953
DATA 溝鼠,DOBUNEZUMI,4F4F48
DATA 紅消鼠,BENIKESHINEZUMI,52433D
DATA 藍墨茶,AISUMICHA,373C38
DATA 檳榔子染,BINROJIZOME,3A3226
DATA 消炭,KESHIZUMI,434343
DATA 墨,SUMI,1C1C1C
DATA 黒,KURO,080808
DATA 呂,RO,0C0C0C
END FUNCTION
Pythagorean Triples V57 c=b+2209 - たろさ
2022/05/24 (Tue) 22:34:29
!Pythagorean Triples
!https://oeis.org/A096033
!V57 c=b+2209
OPTION ARITHMETIC NATIVE
SET BITMAP SIZE 640,640 ! デフォルト
!LET SD=0.4
SET WINDOW -0.1,1.1,-0.1,1.1 !左端 x座標が left,右端 x座標が right,下端 y座標が bottom,上端 y座標が top
DRAW grid(0.1,0.1)
SET TEXT FONT "MS ゴシック",13
PLOT TEXT ,AT 1, 1: STR$(1.1)
SET LINE COLOR 3
PLOT LINES: 0,0 ;
PLOT LINES: 1,1
SET POINT COLOR 3
FOR n=1 TO 3E4
PLOT POINTS:SIN(n),COS(n)
NEXT n
SET POINT COLOR 4
LET t=2209
LET s=4418
LET v1=5405
LET m1=5508
LET e1=15228
LET v2=5499
LET m2=5740
LET e2=15416
LET v3=5593
LET m3=5976
LET e3=15604
LET v4=5687
LET m4=6216
LET e4=15792
LET v5=5781
LET m5=6460
LET e5=15980
LET v6=5875
LET m6=6708
LET e6=16168
LET v7=5969
LET m7=6960
LET e7=16356
LET v8=6063
LET m8=7216
LET e8=16544
LET v9=6157
LET m9=7476
LET e9=16732
LET v10=6251
LET m10=7740
LET e10=16920
LET v11=6345
LET m11=8008
LET e11=17108
LET v12=6439
LET m12=8280
LET e12=17296
LET v13=6533
LET m13=8556
LET e13=17484
LET v14=6721
LET m14=9120
LET e14=17860
LET v15=6815
LET m15=9408
LET e15=18048
LET v16=6909
LET m16=9700
LET e16=18236
LET v17=7003
LET m17=9996
LET e17=18424
LET v18=7097
LET m18=10296
LET e18=18612
LET v19=7191
LET m19=10600
LET e19=18800
LET v20=7285
LET m20=10908
LET e20=18988
LET v21=7379
LET m21=11220
LET e21=19176
LET v22=7473
LET m22=11536
LET e22=19364
LET v23=7567
LET m23=11856
LET e23=19552
LET v24=7661
LET m24=12180
LET e24=19740
LET v25=7755
LET m25=12508
LET e25=19928
LET v26=7849
LET m26=12840
LET e26=20116
LET v27=7943
LET m27=13176
LET e27=20304
LET v28=8037
LET m28=13516
LET e28=20492
LET v29=8131
LET m29=13860
LET e29=20680
LET v30=8225
LET m30=14208
LET e30=20868
LET v31=8319
LET m31=14560
LET e31=21056
LET v32=8413
LET m32=14916
LET e32=21244
LET v33=8507
LET m33=15276
LET e33=21432
LET v34=8601
LET m34=15640
LET e34=21620
LET v35=8695
LET m35=16008
LET e35=21808
LET v36=8789
LET m36=16380
LET e36=21996
LET v37=8883
LET m37=16756
LET e37=22184
LET v38=8977
LET m38=17136
LET e38=22372
LET v39=9071
LET m39=17520
LET e39=22560
LET v40=9165
LET m40=17908
LET e40=22748
LET v41=9259
LET m41=18300
LET e41=22936
LET v42=9353
LET m42=18696
LET e42=23124
LET v43=9447
LET m43=19096
LET e43=23312
LET v44=9541
LET m44=19500
LET e44=23500
LET v45=9635
LET m45=19908
LET e45=23688
LET v46=9729
LET m46=20320
LET e46=23876
FOR n=1 TO 1E3
LET a=v1
LET b=m1
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v1=v1+s
LET m1=m1+e1
LET e1=e1+s*2
!-----------------------------
LET a=v2
LET b=m2
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v2=v2+s
LET m2=m2+e2
LET e2=e2+s*2
!-----------------------------
LET a=v3
LET b=m3
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v3=v3+s
LET m3=m3+e3
LET e3=e3+s*2
!-----------------------------
LET a=v4
LET b=m4
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v4=v4+s
LET m4=m4+e4
LET e4=e4+s*2
!-----------------------------
LET a=v5
LET b=m5
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v5=v5+s
LET m5=m5+e5
LET e5=e5+s*2
!-----------------------------
LET a=v6
LET b=m6
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v6=v6+s
LET m6=m6+e6
LET e6=e6+s*2
!-----------------------------
LET a=v7
LET b=m7
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v7=v7+s
LET m7=m7+e7
LET e7=e7+s*2
!-----------------------------
LET a=v8
LET b=m8
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v8=v8+s
LET m8=m8+e8
LET e8=e8+s*2
!-----------------------------
LET a=v9
LET b=m9
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v9=v9+s
LET m9=m9+e9
LET e9=e9+s*2
!-----------------------------
LET a=v10
LET b=m10
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v10=v10+s
LET m10=m10+e10
LET e10=e10+s*2
!-----------------------------
LET a=v11
LET b=m11
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v11=v11+s
LET m11=m11+e11
LET e11=e11+s*2
!-----------------------------
LET a=v12
LET b=m12
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v12=v12+s
LET m12=m12+e12
LET e12=e12+s*2
!-----------------------------
LET a=v13
LET b=m13
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v13=v13+s
LET m13=m13+e13
LET e13=e13+s*2
!-----------------------------
LET a=v14
LET b=m14
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v14=v14+s
LET m14=m14+e14
LET e14=e14+s*2
!-----------------------------
LET a=v15
LET b=m15
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v15=v15+s
LET m15=m15+e15
LET e15=e15+s*2
!-----------------------------
LET a=v16
LET b=m16
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v16=v16+s
LET m16=m16+e16
LET e16=e16+s*2
!-----------------------------
LET a=v17
LET b=m17
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v17=v17+s
LET m17=m17+e17
LET e17=e17+s*2
!-----------------------------
LET a=v18
LET b=m18
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v18=v18+s
LET m18=m18+e18
LET e18=e18+s*2
!-----------------------------
LET a=v19
LET b=m19
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v19=v19+s
LET m19=m19+e19
LET e19=e19+s*2
!-----------------------------
LET a=v20
LET b=m20
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v20=v20+s
LET m20=m20+e20
LET e20=e20+s*2
!-----------------------------
LET a=v21
LET b=m21
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v21=v21+s
LET m21=m21+e21
LET e21=e21+s*2
!-----------------------------
LET a=v22
LET b=m22
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v22=v22+s
LET m22=m22+e22
LET e22=e22+s*2
!-----------------------------
LET a=v23
LET b=m23
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v23=v23+s
LET m23=m23+e23
LET e23=e23+s*2
!-----------------------------
LET a=v24
LET b=m24
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v24=v24+s
LET m24=m24+e24
LET e24=e24+s*2
!-----------------------------
LET a=v25
LET b=m25
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v25=v25+s
LET m25=m25+e25
LET e25=e25+s*2
!-----------------------------
LET a=v26
LET b=m26
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v26=v26+s
LET m26=m26+e26
LET e26=e26+s*2
!-----------------------------
LET a=v27
LET b=m27
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v27=v27+s
LET m27=m27+e27
LET e27=e27+s*2
!-----------------------------
LET a=v28
LET b=m28
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v28=v28+s
LET m28=m28+e28
LET e28=e28+s*2
!-----------------------------
LET a=v29
LET b=m29
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v29=v29+s
LET m29=m29+e29
LET e29=e29+s*2
!-----------------------------
LET a=v30
LET b=m30
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v30=v30+s
LET m30=m30+e30
LET e30=e30+s*2
!-----------------------------
LET a=v31
LET b=m31
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v31=v31+s
LET m31=m31+e31
LET e31=e31+s*2
!-----------------------------
LET a=v32
LET b=m32
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v32=v32+s
LET m32=m32+e32
LET e32=e32+s*2
!-----------------------------
LET a=v33
LET b=m33
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v33=v33+s
LET m33=m33+e33
LET e33=e33+s*2
!-----------------------------
LET a=v34
LET b=m34
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v34=v34+s
LET m34=m34+e34
LET e34=e34+s*2
!-----------------------------
LET a=v35
LET b=m35
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v35=v35+s
LET m35=m35+e35
LET e35=e35+s*2
!-----------------------------
LET a=v36
LET b=m36
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v36=v36+s
LET m36=m36+e36
LET e36=e36+s*2
!-----------------------------
LET a=v37
LET b=m37
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v37=v37+s
LET m37=m37+e37
LET e37=e37+s*2
!-----------------------------
LET a=v38
LET b=m38
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v38=v38+s
LET m38=m38+e38
LET e38=e38+s*2
!-----------------------------
LET a=v39
LET b=m39
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v39=v39+s
LET m39=m39+e39
LET e39=e39+s*2
!-----------------------------
LET a=v40
LET b=m40
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v40=v40+s
LET m40=m40+e40
LET e40=e40+s*2
!-----------------------------
LET a=v41
LET b=m41
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v41=v41+s
LET m41=m41+e41
LET e41=e41+s*2
!-----------------------------
LET a=v42
LET b=m42
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v42=v42+s
LET m42=m42+e42
LET e42=e42+s*2
!-----------------------------
LET a=v43
LET b=m43
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v43=v43+s
LET m43=m43+e43
LET e43=e43+s*2
!-----------------------------
LET a=v44
LET b=m44
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v44=v44+s
LET m44=m44+e44
LET e44=e44+s*2
!-----------------------------
LET a=v45
LET b=m45
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v45=v45+s
LET m45=m45+e45
LET e45=e45+s*2
!-----------------------------
LET a=v46
LET b=m46
LET c=b+t
LET x=b/c
LET y=a/c
PRINT x^2+y^2;TAB(4);a;b;c
PLOT POINTS:x,y
LET v46=v46+s
LET m46=m46+e46
LET e46=e46+s*2
!-----------------------------
NEXT n
END
-----------------------------------------
計算結果
1 5405 5508 7717
1 5499 5740 7949
1 5593 5976 8185
1 5687 6216 8425
1 5781 6460 8669
1 5875 6708 8917
1 5969 6960 9169
1 6063 7216 9425
1 6157 7476 9685
1 6251 7740 9949
1 6345 8008 10217
1 6439 8280 10489
1 6533 8556 10765
1 6721 9120 11329
1 6815 9408 11617
省略
1 4421995 4425992508 4425994717
1 4422089 4426180680 4426182889
1 4422183 4426368856 4426371065
1 4422277 4426557036 4426559245
1 4422371 4426745220 4426747429
1 4422465 4426933408 4426935617
1 4422559 4427121600 4427123809
1 4422653 4427309796 4427312005
1 4422747 4427497996 4427500205
1 4422841 4427686200 4427688409
1 4422935 4427874408 4427876617
1 4423029 4428062620 4428064829
1 4423123 4428250836 4428253045
1 4423217 4428439056 4428441265
1 4423311 4428627280 4428629489
数列に出来ました。V57 ピタゴラスイッチ
______________________________________
数学の無限も不確定要素を含んでいる。
sample - boh
2022/05/22 (Sun) 12:21:31
あさ