1のk乗根 図示

 投稿者:Bsitumonn  投稿日:2018年 1月 4日(木)22時48分43秒
  複素数の解をもつ z^3=1,z^4=1などの解を、点で描画したいのですが。
z^3=1の1以外の、複素数の答えを求めることもできません。
z^2=1の解1と-1は図示できました。

For~next文で増分を少数にしたときの誤差を訂正するために、始値、限界、増分を整数にして、
o/10のようにしました。下にプログラムを載せます。

INPUT PROMPT "指数":k
LET q=5
SET WINDOW -q ,q,-q,q

DEF f(z1)=z1^k-1

FOR o=-10 TO 10 STEP 1
   LET o2=o/10
   FOR p=-10 TO 10 STEP 1
      LET p2=p/10

      LET z1=COMPLEX(o2,p2)
      PRINT o2,p2,"-----",z1
      LET A=f(z1)

      IF(A=0)THEN
         PLOT POINTS: re(z1),im(z1)

      END IF
   NEXT p
NEXT o

END

どなたか、1のk乗根を図示するために、改善点を教えてください。
 

Re: 1のk乗根 図示

 投稿者:しばっち  投稿日:2018年 1月 6日(土)10時30分58秒
  > No.4448[元記事へ]

Bsitumonnさんへのお返事です。

> 複素数の解をもつ z^3=1,z^4=1などの解を、点で描画したいのですが。

http://edupa.info/pdf/math/hm/hmb-3-07.pdf

下記のプログラムでよろしいでしょうか?

OPTION ARITHMETIC COMPLEX
DIM Y(10)
CALL GINIT(800,800)
LET X=COMPLEX(1,0) !'←ここの数字を変えて下さい
LET Z=SQR(ABS(X))*1.1
SET WINDOW -Z,Z,-Z,Z
FOR N=2 TO 10
   CLEAR
   DRAW GRID(Z/11,Z/11)
   LET R=ABS(X)^(1/N)
   LET TH=ANGLE(RE(X),IM(X))
   FOR J=1 TO N
      LET Y(J)=R*EXP(SQR(-1)*((TH+2*PI*J)/N)) !'ド・モアブルの定理
      PRINT J;":";Y(J),Y(J)^N
   NEXT J
   PRINT
   FOR J=1 TO N
      SET COLOR 4
      DRAW DISK WITH SCALE(.02)*SHIFT(Y(J))
      SET COLOR 2
      PLOT LINES:Y(J);
   NEXT  J
   PLOT LINES:Y(1)
   IF N<10 THEN
      INPUT  PROMPT "HIT RETURN KEY":A$
      !'  PAUSE
   END IF
NEXT N
END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
OPTION ARITHMETIC COMPLEX
SET BITMAP SIZE XSIZE,YSIZE
!'SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 2
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB
 

Re: 1のk乗根 図示

 投稿者:nagram  投稿日:2018年 1月 6日(土)19時29分37秒
  > No.4448[元記事へ]

Bsitumonnさんへのお返事です。

> 複素数の解をもつ z^3=1,z^4=1などの解を、点で描画したいのですが。
> z^3=1の1以外の、複素数の答えを求めることもできません。

問題は IF(A=0)THEN にあります。
誤差があるので、Aがちょうど0になるのはz1が整数の時だけです。
誤差を考慮して判定する必要があります。
精度も1/1000にしてみました。

OPTION ARITHMETIC COMPLEX
INPUT PROMPT "指数":k
LET q=2
SET WINDOW -q ,q,-q,q
DRAW GRID(.5,.5)

DEF f(z1)=z1^k-1

SELECT CASE k  ! 誤差範囲の選択
CASE 1
   LET d=10^(-6)
CASE 2 TO 6
   LET d=10^(-3)
CASE 7 TO 10
   LET d=3.2*10^(-3)
CASE 11 TO 13
   LET d=6*10^(-3)
CASE IS <=24   ! k>=14 では重複がある
   LET d=10^(-2)
CASE IS <=42
   LET d=2*10^(-2)
CASE ELSE      ! k>=43 では欠落がある
   LET d=5*10^(-2)
END SELECT
LET count=0

FOR o=-1000 TO 1000 STEP 1
   LET o2=o/1000
   FOR p=-1000 TO 1000 STEP 1
      LET p2=p/1000

      LET z1=COMPLEX(o2,p2)
      ! PRINT o2,p2,"-----",z1
      LET A=f(z1)

      IF ABS(re(A))<=d AND ABS(im(A))<=d THEN  ! 誤差考慮
         PRINT o2;p2;" ----- ";z1
         PRINT STR$(z1);"^";STR$(k);"-1 = ";STR$(A)
         PLOT POINTS: re(z1),im(z1)
         LET count=count+1
      END IF
   NEXT p
NEXT o
PRINT count;"通り"

END
 

Re: 1のk乗根 図示

 投稿者:Bsitumonn  投稿日:2018年 1月 7日(日)18時27分19秒
  nagramさんへのお返事です。

Bsitumonnです。問題点の指摘と、プログラムありがとうございます。いじくりながら勉強したいと思います。
 

Re: 1のk乗根 図示

 投稿者:Bsitumonn  投稿日:2018年 1月 7日(日)18時39分30秒
  > No.4450[元記事へ]

しばっちさんへのお返事です。

Bsitumonnです。直線から、正10角形まで表示できるプログラムありがとうございます。
かっこいいです。
 

戻る