わたしの無限解析のはじまり

 投稿者:たろさ  投稿日:2016年 7月20日(水)17時42分2秒
  『無限解析のはじまり』高瀬正仁:著 ちくま学芸文庫
P328
3.34オイラーの公式の証明

を眺めています。数式をプログラムにしてみました。

OPTION ARITHMETIC RATIONAL
LET format$="#." & REPEAT$("#",999)
LET e=1
LET f=1
FOR i=1 TO 450
   LET f=f*i
   LET e=e+1/f ! 自然対数の底(ネピア数)1000桁
NEXT i
! PRINT USING format$:e

FOR r=3 TO 4
   LET n=10^r
   LET x=2
   LET x1=5
   LET m=(((1+x/n)^n)/(E^x))/(((1+x1/n)^n)/(E^x1))
   PRINT USING format$:m
NEXT r
END

LET n=10^6 辺りから重いです。LET n=10^7 何日?


1+x/n)^n=E^x

虚数z
(1+z/n)^n=E^z

この数式からからe^(i*pi)=-1に至るまでの過程をプログラムしてみたいと模索しています。


それと、非自明な零点の関係も

OPTION ARITHMETIC COMPLEX !複素数モード
SET WINDOW -40,40,-4,4 !x,y
DRAW grid(10,1)
SET POINT STYLE 6


FOR x=-40 TO 0.99 STEP 0.01
   LET m=fnZeta(COMPLEX(1/2,X))
   LET R=RE(m)
   LET I=IM(m)
   ! PRINT m
   SET POINT COLOR 3
   PLOT POINTS:x,r
   PLOT
   SET POINT COLOR 4
   PLOT POINTS:x,i
   PLOT

NEXT x

FOR x=1.01 TO 40 STEP 0.01
   LET m=fnZeta(COMPLEX(1/2,X))
   LET R=RE(m)
   LET I=IM(m)
   ! PRINT m
   SET POINT COLOR 2
   PLOT POINTS:x,r
   PLOT
   SET POINT COLOR 7
   PLOT POINTS:x,i
   PLOT

NEXT x

END

EXTERNAL FUNCTION fnZeta(X)
OPTION ARITHMETIC COMPLEX !複素数モード
OPTION BASE 0 !ゼロベース
LET M=200
DIM C(M)
LET C(0)=1
for K=1 to M
   FOR J=K TO 1 STEP -1
      LET C(J)=(C(J)+C(J-1))/2
   NEXT j
NEXT k
for J=1 to M
   LET U=U+((-1)^INT(J-1))*C(J)/J^X
   IF C(J)<1E-15 THEN EXIT FOR
NEXT j
LET fnZeta=U/(1-2^(1-X))
END FUNCTION


このグラフの揺らぎと、素数の個数をx単位の間隔で数えた場合の揺らぎは?


どのように変化

私の場合は、予想もできません。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: わたしの無限解析のはじまり

 投稿者:しばっち  投稿日:2016年 7月23日(土)20時39分45秒
  > No.4103[元記事へ]

たろささんへのお返事です。

> (1+x/n)^n=E^x

e=lim(1+1/n)^n  n→∞
n=2^(2^10) とする
2^1024≒10^300 10進300桁程度

OPTION ARITHMETIC DECIMAL_HIGH
LET N=10
LET A=.5
FOR I=1 TO N !'(((((((((.5^2)^2)^2)^2)^2)^2)^2)^2)^2)^2
   LET A=A*A
   PRINT A
NEXT I
LET A=1+A
FOR I=1 TO 2^N !' ((1+1/2^1024)^2)^1024
   LET A=A*A
   PRINT A
NEXT I
END

> 虚数z
> (1+z/n)^n=E^z
>
> この数式からe^(i*pi)=-1に至るまでの過程をプログラムしてみたいと模索しています。

exp(z)=lim(1+z/n)^n  n→∞
z=πi , n=2^(2^10) として (a+bi)^2=(a*a-b*b)+(2*a*b)i (i^2=-1) を使って計算します

OPTION ARITHMETIC DECIMAL_HIGH
LET N=10
LET A=1 !'A+Bi
LET B=.5
FOR I=1 TO N
   LET B=B*B
NEXT I

!'LET B=1
!'FOR I=1 TO 2^N !'(.5)^(2^10)
!'   LET B=B/2
!'NEXT I

LET B=B*PI !' B=π/2^1024
FOR I=1 TO 2^N !' ((1+πi/2^1024)^2)^1024
   LET X=A*A-B*B
   LET Y=2*A*B
   LET A=X
   LET B=Y
   PRINT A
   !'PRINT B
NEXT I
END


  A=COMPLEX(SQR((1+1/SQR(2))/2),SQR((1-1/SQR(2))/2))
     ↓
A^2=COMPLEX(1/SQR(2),1/SQR(2))
     ↓
A^4=COMPEX(0,1)
     ↓
A^8=COMPLEX(-1,0)
 

Re: わたしの無限解析のはじまり

 投稿者:たろさ  投稿日:2016年 7月25日(月)16時47分9秒
  > No.4105[元記事へ]

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

ありがとうございます。


> > (1+x/n)^n=E^x
>
> e=lim(1+1/n)^n  n→∞
> n=2^(2^10) とする
> 2^1024≒10^300 10進300桁程度

私の個人的感想です。 計算の速さに驚きました。


> > 虚数z
> > (1+z/n)^n=E^z

> exp(z)=lim(1+z/n)^n  n→∞
> z=πi , n=2^(2^10) として (a+bi)^2=(a*a-b*b)+(2*a*b)i (i^2=-1) を使って計算します

programの計算結果を見ての感想です。

  .70710678118654752440084436210484903=SQR(0.5)
1.59906916149560598660344186636935668
-1.00000000000000000000000000000000000

SQR(0.5)は、何度も計算結果に出てくるので、見覚えがあります。

話しは、ぶっ飛びます。

What Is The Factorial Of 1/2? SURPRISING (1/2)! = (√π)/2


(1/2)! = (√π)/2

私が素直にプログラムすると


!n!(n階乗)
LET f=1
LET n=4
FOR i=0 TO n-1
   LET f=f*(n-i)
NEXT i
PRINT f

LET f=1
LET n=0.5
FOR i=0 TO n-1
   LET f=f*(n-i)
NEXT i
PRINT f

END

---------------------------

計算結果 24  1

(1/2)! = (√π)/2

になりません。

ここはメビュウスの輪

メビウスの帯

オイラー定数
#3801

初めてこのプログラムを見た時

私の個人的感想です。 計算の速さに驚きました。


数字の4とpi

zeta(±0.5*x*i)=0


zeta(sin(pi)^x*i)=-0.5



私の場合は まだ、勉強不足です。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: わたしの無限解析のはじまり

 投稿者:nagram  投稿日:2016年 8月 5日(金)16時12分10秒
  > No.4103[元記事へ]

たろささんへのお返事です。

> 『無限解析のはじまり』高瀬正仁:著 ちくま学芸文庫
> P328
> 3.34オイラーの公式の証明
>
> を眺めています。数式をプログラムにしてみました。
>
> OPTION ARITHMETIC RATIONAL
> LET format$="#." & REPEAT$("#",999)
> LET e=1
> LET f=1
> FOR i=1 TO 450
>    LET f=f*i
>    LET e=e+1/f ! 自然対数の底(ネピア数)1000桁
> NEXT i
> ! PRINT USING format$:e
>
> FOR r=3 TO 4
>    LET n=10^r
>    LET x=2
>    LET x1=5
>    LET m=(((1+x/n)^n)/(E^x))/(((1+x1/n)^n)/(E^x1))
>    PRINT USING format$:m
> NEXT r
> END
>
> LET n=10^6 辺りから重いです。LET n=10^7 何日?
>

1000桁モードで実行すれば、r=18まで高速に計算できます。

OPTION ARITHMETIC DECIMAL_HIGH
DECLARE EXTERNAL FUNCTION EXP  ! 外部関数宣言(必須)
LET x=2
LET x1=5
LET ex=EXP(x)
LET ex1=EXP(x1)
FOR r=3 TO 18
   LET n=10^r
   LET m=((1+x/n)^n/ex)/((1+x1/n)^n/ex1)
   PRINT m
NEXT r
END
!
EXTERNAL FUNCTION EXP(x)     ! EXP関数 (精度約1000桁 有理数モード不可)
OPTION ARITHMETIC DECIMAL_HIGH
DECLARE NUMERIC a,lim
FUNCTION ex(t,n)   ! e^a テイラー展開
   IF t>lim THEN LET ex=t+ex(t*a/n,n+1) ELSE LET ex=0
END FUNCTION
LET a=ABS(x)  ! 定義域 a<=2321.0057737… (10進モード a<=227.9559…)
LET lim=EPS(2.71828^INT(a))*10^(-9)  ! EPS(e^a)の9桁下まで計算し加算
IF x>=0 THEN LET EXP=ex(1,1) ELSE LET EXP=1/ex(1,1)
END FUNCTION

外部関数EXP(x)は、約1000桁の精度があります。テイラー展開は関数の再帰呼出しを利用し、最後の項から足し上げることによって精度を高くしました。xは負数でも可能です。
PRINT EXP(1) で自然対数の底を小数点以下1007桁まで得られます。


【おまけ】静岡理工科大学の菅沼義昇先生が公開しているガンマ関数の近似値を求めるプログラムをBASICに移植しました。ガンマ関数が階乗の拡張と言われる理由がわかります。
!/****************************/
!/* ガンマ関数の計算         */
!/*      coded by Y.Suganuma */
!/****************************/
DECLARE FUNCTION gamma
DECLARE NUMERIC x,y
INPUT PROMPT "data?":x !-69.38<=x<56.905…(10進モード)
PRINT "x ="; x
LET y=gamma(x)
PRINT " Γ(x)  ="; y
PRINT "x*Γ(x) ="; x*y
PRINT "Γ(x+1) ="; gamma(x+1)
!/****************************************/
!/* Γ(x)の計算(ガンマ関数,近似式) */
!/*      ier : =0 : normal               */
!/*            =-1 : x=-n (n=0,1,2,・・・)  */
!/*      return : 結果                   */
!/****************************************/
FUNCTION gamma(x)
   LOCAL ier,err,g,s,t,v,w,y,k
   LET ier=0
   IF x>5 THEN
      LET v=1/x
      LET s=((((((-0.000592166437354*v+0.0000697281375837)*v+0.00078403922172)*v &
& -0.000229472093621)*v-0.00268132716049)*v+0.00347222222222)*v+0.0833333333333)*v+1
      LET g=2.506628274631001*EXP(-x)*x^(x-0.5)*s
   ELSE
      LET err=1E-20
      LET w=x
      LET t=1
      IF x<1.5 THEN
         IF x<err THEN
            LET k=INT(x)
            LET y=k-x
            IF ABS(y)<err OR ABS(1-y)<err THEN LET ier=-1
         END IF
         IF ier=0 THEN
            DO WHILE w<1.5
               LET t=t/w
               LET w=w+1
            LOOP
         END IF
      ELSE
         IF w>2.5 THEN
            DO WHILE w>2.5
               LET w=w-1
               LET t=t*w
            LOOP
         END IF
      END IF
      LET w=w-2
      LET g=(((((((0.0021385778*w-0.0034961289)*w+0.0122995771)*w-0.00012513767)*w &
& +0.0740648982)*w+0.0815652323)*w+0.411849671)*w+0.422784604)*w+0.999999926
      LET g=g*t
   END IF
   IF ier=-1 THEN PRINT "[ ier=";ier;"]"
   LET gamma=g
END FUNCTION
END
 

戻る