ラベル python の投稿を表示しています。 すべての投稿を表示
ラベル python の投稿を表示しています。 すべての投稿を表示

2024-12-10

729びぼーろく; chatGPTに

自分が書いたpythonコードを速く実行できるように書き直して、と頼んだら本当にやってくれた。いちおう中身を見たけど確かにきちんとやってくれていそうな感じ。すごい。
こんなにちゃんと対応してくれるなら人生相談もできそう。

2022-05-11

594びぼーろく; 只今絶賛計算中

重い腰を上げてmodified gradient flow method を使ったpythonコードを書き始めた。
この2,3ヶ月かけて色々やってみて結構面倒なことに気づいた。

しかも適当にやると二階微分が壊れる。一般にflow timeの間隔は空間の分割の2乗より小さく取る必要があるけど、どうやらものによって違うらしい。例えばx^2f''みたいなパターンの場合は2乗ではうまく行かない。加えて、与えられているパラメータより空間分割は十分に小さく取る必要があるようだ。

結論:面倒くさい。

2022-01-13

580びぼーろく; 自分のHPを sphinx で書き直した

 特に意味はない。よく見てみたらplastexもsphinxを使っているらしい。ある意味一緒かも。
make htmlするときにちょっと面倒かな。

2021-08-20

563びぼーろく; pythonでファイルの書き込み

 をやった。正直どこにでも載ってると思うけど自分用まとめ。

 R,M1,M2 を計算してファイルkekka.txtに書き込みたいときは以下でできる。
(本当はファイルの存在確認とかそのあたり必要かもしれないけど、そんな人はこんなところ見ないだろう)

数値を書き込むときはstrで文字列にしないと怒られることに注意。もしくはfromatでそのまま埋め込むこともできる(らしい)。
with openはファイルを開く。こうするとcloseしなくて良いらしい。mode='a'は書き込みで追記。mode='w'にすると上書きするので注意が必要。(これとっても大事。)

さて、文字列は+で結合できるので長くならないように適当に改行。
(下の例は特に意味はない)


R = 1
M = 2
M = 3 
with open ('kekka.txt',mode='a') as file:
    line1 = '\n ======結果: R=' + str(R) + ','
    line1 += 'M1=' + str(M1) + ',M2=' + format(M2)
    line2 ='終わり\n'
    file.write(line1)
    file.write(line2)
 
 

こんな感じ。また一歩理解が進んだ。もし文字列中で'を使う場合はエスケープが必要。(' -> \') 

リストを文字列に帰る場合はjoin()を使う。書式は'区切り文字'.join(map(str,list)) でできるらしい。


param = [1,2,3]
with open ('kekka.txt',mode='a') as file:
    line1 =  ','.join(map(str,param))
    line2 ='終わり\n'
    file.write(line1)
    file.write(line2)
 
 

2021-02-23

531びぼーろく; python上でのヤコビ楕円関数

 maximaから移行するにあたって色々と読み替え。pythonでは楕円関数はscipyに入っているらしい。あまり情報がないのでメモ。まず楕円関数は\(y={\rm sn}(u,k)\)は次の楕円積分の逆関数として定める:
\[u=\int_0^{\arcsin(y)} {\rm d}t \frac{1}{\sqrt{1-k^2\sin^2(t)}}\]
この\(k\)が母数(elliptic modulus)となる。 他にも\({\rm cn}(u,k),{\rm dn}(u,k)\)があるけど、調べればわかるので割愛。

さて、このヤコビ楕円関数をpython上で扱いたい場合にはscipyパッケージを使う。ただしelliptic modulus \(k^2\)の代わりにmを用いて表す。\((m=k^2)\)


import scipy
scipy.special.ellipj(u,m)

そうすると答えがリストとして返ってくる。その中身は \(({\rm sn(u,\sqrt m)},{\rm cn(u,\sqrt m)},{\rm dn(u,\sqrt m)},\phi)\) となるので必要に応じて取り出す。
最後の項目\(\phi\)は楕円積分の結果を返してくる(らしい)。

それにしてもelliptic modulus の表記が色々あってややこしいと思うのは僕だけだろうか。
たまに\(m\)の代わりに\(\sin \theta\)を使う表記も見かけた気がする。

数値計算をしてみると、半年ぐらい前に解析的に求めた結果が実は間違っていたことが分かった。\(\arcsin\)の値域は\([-\pi/2,\pi/2]\)なのに\([-\pi,\pi]\)だと勘違いしていた。恥ずかしい...。
とはいえ予備的に始めた計算が割と順調に行き始めたのでちょっと満足。久しぶりに酒でも飲もうかな。

852びぼーろく; 温泉

 に漬かって少しリフレッシュ。この1週間はすごく疲れたので良かった。 さて、最近考えているこの分野、じつは掘れば掘るほど新しい内容が出てきそうな気がしてきた。(大体気のせい)