複数のグラフ

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

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

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

Re: 複数のグラフ

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

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

Re: 複数のグラフ

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

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


 

複数のグラフ

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

Re: 複数のグラフ

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

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

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

 

複数のグラフ

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

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

Re: 複数のグラフ

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

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

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

#1113
#1121

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


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

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

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

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

戻る