2023年4月28日金曜日

seriessum関数でべき級数を求めてみる

 seriessum関数の正しい使い道を模索してみた。


f2 =pi()

「べき級数 円周率」で検索

 https://www.procrasist.com/entry/pi_1 (PROCRASISTさん)


c5 =ArrayFormula((SERIESSUM(1,1,1,ROW(indirect("A1:A"&B5))^-2)*6)^0.5)

d5 =ArrayFormula(SUM((ROW(indirect("A1:A"&B5))^-2)*6)^0.5)

 



c6 =ArrayFormula(SERIESSUM(-1,0,1,1/(2*(ROW(indirect("A1:A"&B6))-1)+1))*4)

d6 =ArrayFormula(sum((-1)^(ROW(indirect("A1:A"&B6))-1)/(2*(ROW(indirect("A1:A"&B6))-1)+1))*4)

 



c7 =ArrayFormula(SERIESSUM(-1*882^-2*4^-4,0,1,FACT((ROW(indirect("A1:A"&B7))-1)*4)*(1123+21460*(ROW(indirect("A1:A"&B7))-1))*FACT(ROW(indirect("A1:A"&B7))-1)^-4/882)^-1*4)

d7 =ArrayFormula(SUM((-1)^(row(indirect("A1:A"&B7))-1)*fact(4*(row(indirect("A1:A"&B7))-1))*(1123+21460*(row(indirect("A1:A"&B7))-1))*882^-(2*(row(indirect("A1:A"&B7))-1)+1)*(4^(row(indirect("A1:A"&B7))-1)*fact(row(INDIRECT("A1:A"&B7))-1))^-4)^-1)*4

 ラマヌジャン式


「ラマヌジャン」で検索

 https://mathlog.info/articles/3583 (Mathlogさん)


c8 =ArrayFormula(seriessum(396^-4,0,1,fact(4*(row(indirect("A1:A"&B8))-1))*(fact(row(indirect("A1:A"&B8))-1))^-4*(26390*(row(INDIRECT("A1:A"&B8))-1)+1103))*2^(3/2)*99^-2)^-1

d8 =ArrayFormula(sum(fact(4*(row(indirect("A1:A"&B8))-1))*fact(row(indirect("A1:A"&B8))-1)^-4*(26390*(row(indirect("A1:A"&B8))-1)+1103)*396^(-4*(row(indirect("A1:A"&B8))-1)))*2^(3/2)*99^-2)^-1

 ラマヌジャンの円周率公式



c9 =ArrayFormula(12*seriessum(640320^-3,0,1,-1^(row(indirect("A1:A"&B9))-1)*fact(6*(row(indirect("A1:A"&B9))-1))*fact(3*(row(indirect("A1:A"&B9))-1))^-1*fact(row(indirect("A1:A"&B9))-1)^-3*(545140134*(row(indirect("A1:A"&B9))-1)+13591409)*640320^-(3/2)))^-1

d9 =ArrayFormula(12*sum(-1^(row(indirect("A1:A"&B9))-1)*fact(6*(row(indirect("A1:A"&B9))-1))*fact(3*(row(indirect("A1:A"&B9))-1))^-1*fact(row(indirect("A1:A"&B9))-1)^-3*(545140134*(row(indirect("A1:A"&B9))-1)+13591409)*640320^-(3*(row(indirect("A1:A"&B9))-1)+3/2)))^-1


Chudnovskyの公式



{e5:e9} =ArrayFormula(C5:C9-D5:D9)

{f5:g9} =ArrayFormula(C5:D9-$F$2)

BCDEFG
23.141592653589790
3
4個数seriessum関数を
使用
seriessum関数を
不使用
両者の差seriessum関数
使用のpiとの差
seriessum関数
不使用のpiとの差
54000003.1415902662677203.1415902662676700.000000000000050-0.000002387322069-0.000002387322119
64000003.1415901535897903.1415901535897400.000000000000049-0.000002500000000-0.000002500000049
723.1415926535976203.1415926535976200.0000000000000000.0000000000078290.000000000007829
823.1415926535898003.1415926535898000.0000000000000000.0000000000000020.000000000000002
913.1415926535897303.1415926535897300.000000000000000-0.000000000000059-0.000000000000059
10
11

余談1
 n乗の部分が多いとseriessum関数が効率化に役立つ感じかな。

余談2
 最初の2つ、個数が多くなると誤差も大きくなるのは仕方ない。200万にしても多分もっと増やしても正解には近づかない。あと関数で組み立てた式が本当に合っているのか検証できないのも困りもの(特に下の3つ)w 今回はよく知られた定数だから良いが、多分本来の使い方はもっと未知の数字を求めるのだと思う。色々と大変そうだ。

2023.04.28 19:07公開 単純ミスなどは適宜修正済&修正予定

2023年4月25日火曜日

3点を通る円(2次元平面内)

エクセル等の表計算ソフトの逆行列関数を使って3点を通る円を求める。(2次元平面内)

まず求める円の式を

 x^2+y^2+l*x+m*y+n=0

とすると

 l*x+m*y+n=-(x^2+y^2)

なので3点を

 p1(x1,y1)、p2(x2,y2)、p3(x3,y3) (表のD4:E6)

とすると

 l*x1+m*y1+n=-(x1^2+y1^2)

 l*x2+m*y2+n=-(x2^2+y2^2)

 l*x3+m*y3+n=-(x3^2+y3^2)

となる。行列の式で書けば (libreofficecalcでmathをオブジェクトとして使用)






となり、逆行列を使えば一発で答えが出る。





逆行列と配列定数を使用してl,m,nを求める。配列定数を使って前半は3行2列の行列の1列目と2列目を入れ替えて3列目を追加して3列目を1とした。後半は2乗して横方向の和。

 D8:D10 =ArrayFormula(mmult(MINVERSE(mmult(D4:E6,{0,1,0;1,0,0})+{0,0,1;0,0,1;0,0,1}),-MMULT(D4:E6^2,{1;1})))

次に中心座標と半径を求める。

 D12 =-D8/2

 D13 =-D9/2

 D14 =((D8^2/4+D9^2/4)-D10)^(1/2)

BCDE
2
3yx
4p10.0000.000
5p24.0004.000
6p30.0004.000
7
8l-4.000
9m-4.000
10n0.000
11
12中心x2.000
13中心y2.000
14半径2.828


 F36 =iferror((-D$9-(D$9^2-4*D36^2-4*D$8*D36-4*D$10)^(1/2))/2,"")

 G36 =iferror((-D$9+(D$9^2-4*D36^2-4*D$8*D36-4*D$10)^(1/2))/2,"")

BCDEFG

26グラフ用
27-0.828←x=中心-rxy(p1-p3)y(円の下側)y(円の上側)
284.828←x=中心+r0.0000.000
290.566←xの範囲の1割4.0004.000
3010←分割4.0000.000
31-1.0547
32-0.9981
33-0.9416
34-0.8850
35-0.8284
36-0.77191.43722.5628
37-0.71531.20802.7920
38-0.65871.03502.9650
39-0.60220.89153.1085
40-0.54560.76713.2329
41-0.48900.65663.3434
42-0.43240.55673.4433
43-0.37590.46533.5347
44-0.31930.38113.6189
45-0.26270.30293.6971
46-0.20620.23003.7700
47-0.14960.16173.8383
48-0.09300.09763.9024
49-0.03650.03713.9629
500.0201-0.01994.0199
510.0767-0.07384.0738
520.1332-0.12494.1249
530.1898-0.17334.1733
540.2464-0.21924.2192
550.3029-0.26274.2627
560.3595-0.30414.3041
570.4161-0.34334.3433
580.4726-0.38064.3806
590.5292-0.41594.4159
600.5858-0.44954.4495

グラフ用データ行は以下略



2023.04.25 19:22公開 単純ミスなどは適宜修正済&修正予定

余談1

フォントによってズレそうだ。後でhtmlで表を作るかドライブの表に差し替える予定。

実際に3点を通る散布図も追加したい。


余談2

最初は円の中心のx座標=a、円の中心のy座標=b、円の半径=rとして

 (x-a)^2+(y-b)^2=r^2

で考えて身動きが取れなくなったw

 x^2+y^2+l*x+m*y+n=0

の式を見かけて「これならできる」と思った。l,m,nを求める段階ではx,yは変数じゃなくてただの定数であると思い至った。他の問題でも使えそうだ。


余談3

いつか3点を通る円(3次元空間内)をやってみたい。


以下テスト用

mathtypeを使った行列の式の残骸

{"mathml":"<math style=\"font-family:stix;font-size:16px;\" xmlns=\"http://www.w3.org/1998/Math/MathML\"><mstyle mathsize=\"16px\"><mfenced><mtable><mtr><mtd><msub><mi>x</mi><mn>1</mn></msub></mtd><mtd><msub><mi>y</mi><mn>1</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr><mtr><mtd><msub><mi>x</mi><mn>2</mn></msub></mtd><mtd><msub><mi>y</mi><mn>2</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr><mtr><mtd><msub><mi>x</mi><mn>3</mn></msub></mtd><mtd><msub><mi>y</mi><mn>3</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr></mtable></mfenced><mfenced><mtable><mtr><mtd><mi>l</mi></mtd></mtr><mtr><mtd><mi>m</mi></mtd></mtr><mtr><mtd><mi>n</mi></mtd></mtr></mtable></mfenced><mo>=</mo><mo>-</mo><mfenced><mtable><mtr><mtd><msup><msub><mi>x</mi><mn>1</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>y</mi><mn>1</mn></msub><mn>2</mn></msup></mtd></mtr><mtr><mtd><msup><msub><mi>x</mi><mn>2</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>y</mi><mn>2</mn></msub><mn>2</mn></msup></mtd></mtr><mtr><mtd><msup><msub><mi>x</mi><mn>3</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>y</mi><mn>3</mn></msub><mn>2</mn></msup></mtd></mtr></mtable></mfenced></mstyle></math>","truncated":false}

{"mathml":"<math style=\"font-family:stix;font-size:16px;\" xmlns=\"http://www.w3.org/1998/Math/MathML\"><mstyle mathsize=\"16px\"><mfenced><mtable><mtr><mtd><mi>l</mi></mtd></mtr><mtr><mtd><mi>m</mi></mtd></mtr><mtr><mtd><mi>n</mi></mtd></mtr></mtable></mfenced><mo>=</mo><mo>-</mo><msup><mfenced><mtable><mtr><mtd><msub><mi>x</mi><mn>1</mn></msub></mtd><mtd><msub><mi>y</mi><mn>1</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr><mtr><mtd><msub><mi>x</mi><mn>2</mn></msub></mtd><mtd><msub><mi>y</mi><mn>2</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr><mtr><mtd><msub><mi>x</mi><mn>3</mn></msub></mtd><mtd><msub><mi>y</mi><mn>3</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr></mtable></mfenced><mrow><mo>-</mo><mn>1</mn></mrow></msup><mfenced><mtable><mtr><mtd><msup><msub><mi>x</mi><mn>1</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>y</mi><mn>1</mn></msub><mn>2</mn></msup></mtd></mtr><mtr><mtd><msup><msub><mi>x</mi><mn>2</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>y</mi><mn>2</mn></msub><mn>2</mn></msup></mtd></mtr><mtr><mtd><msup><msub><mi>x</mi><mn>3</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>y</mi><mn>3</mn></msub><mn>2</mn></msup></mtd></mtr></mtable></mfenced></mstyle></math>","truncated":false}


htmlの表を使った行列の式の残骸w

 [x1 y1 1][l] [x1^2+y1^2]
 [x2 y2 1][m]=-[x2^2+y2^2]
 [x3 y3 1][n] [x3^2+y3^2]

 [l] [x1 y2 1]^-1[x1^2+y1^2]
 [m]=-[x2 y2 1] [x2^2+y2^2]
 [n] [x3 y3 1] [x3^2+y3^2]