投稿者: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乗根を図示するために、改善点を教えてください。
|
|
|
投稿者:しばっち
投稿日: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
|
|
|
投稿者: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
|
|
|
投稿者:Bsitumonn
投稿日:2018年 1月 7日(日)18時27分19秒
|
|
|
nagramさんへのお返事です。
Bsitumonnです。問題点の指摘と、プログラムありがとうございます。いじくりながら勉強したいと思います。
|
|
|
投稿者:Bsitumonn
投稿日:2018年 1月 7日(日)18時39分30秒
|
|
|
> No.4450[元記事へ]
しばっちさんへのお返事です。
Bsitumonnです。直線から、正10角形まで表示できるプログラムありがとうございます。
かっこいいです。
|
|
|
戻る