新規記事の投稿を行うことで、非表示にすることが可能です。
2021年01月07日
windows10でfortranの複素数のプログラミング
昔のスペクトル解析の専門書の巻末に書かれた
fortranのプログラムをwindows10のsurface proで回すために始めた勉強は、
現在、本の巻末の例題を3つ再現できたところである。
(ここには書かないが。)
次は複素数の計算が出てきたのでfortranの複素数のプログラミングを
調べて覚える。
(複素数のコードの書き方知らないと覚えようとしている
複素数の高速フーリエ変換はできないから。)
あぁ、、とうとう自分は複素数の計算をプログラミングできるように
なるのだ、、。
大学受験の時に複素数の問題は解けたけど、
大学の専門分野の講義の時は複素数を使った技術計算は
よく理解できなかった。そんな13〜14年前にできなかったことを
今日、明日で超えれるのだと思うと感慨深い。いつの歳になっても
日々勉強である。
で、調べると下記サイトを見つける。
>大気海洋科学のための計算機講習会
>稲津 將(北海道大学地球環境科学研究科)
>Fortran 複素数
>https://www.sci.hokudai.ac.jp/~inaz/doc/B/Education/node6.html
複素数の変数の宣言の仕方は分かった。
次に、プログラミングの前に複素数の足し算、引き算、掛け算、割り算
をおさらいせねば。
足し算、引き算は実部、虚部をそのまま足し引きするだけだが、
掛け算、割り算ってどうやるのだったか、、。
もう13、14年も経っているから覚えてない。
で、検索すると下記のサイトが出てきた。
>マナペディア
>複素数の四則計算
>OKボーイ
>https://manapedia.jp/text/52
割り算がちょっと面倒だな。
分母に共役複素数を掛けてたか。
ではfortranの
・足し算、引き算、掛け算、割り算
・共益複素数を出力するconjg関数
・2乗(x^2)
・指数関数(e^x)
を試してみる。
下記のようにコードを書いてみた。
(1〜27行目)
(28〜51行目)
その際、複素数のformat文は
どうやって書けばいいか分からなかったので
下記のサイトを参考にした。
(実部、虚部をコンマで区切ってカッコで囲めばいい)
>早稲田大学 理工情報関連科目・情報教育ウェブサイト FORTRANプログラミング入門
>2019年度春学期・Fortranプログラミング入門
>Format文の書式
>http://www-it.sci.waseda.ac.jp/FPR1/class02/Fortran/Japan/3_2fmt.pdf
ついでに下記のURLを貼っておこう。
(C、Fortran、JAVAのプログラミング言語の講義が聴けるから。)
>早稲田大学理工メディアセンター
>http://www.waseda.jp/mse/web/infotechedu/
で、回した結果は下記。
よしよし、うまくいった。
同じ計算をエクセルでやったのが下記。
数値も合っている。
※指数関数部分はIMEXP関数にCOMPLEX関数の複素数を代入し、
その実部と虚部をそれぞれIMREAL関数、IMAGINARY関数で
セルに出力した。
これで、複素数のコードに必要な内容は把握できただろう。
(追記)
実数、整数から複素数を作るcmplx関数が必要だったので追記する。
cmplx関数がないと、
整数または実数変数を組み合わせて複素数を作ることができない。
c=(a,2.0)やc=(a,b)とするとエラーになる。
(数値だけならいけるが、変数が入るとカッコだけではだめになる。)
c=cmplx(a,2.0)やc=cmplx(a,b)とするとエラーでなくなる。
それを使って下記のコードを書いた。
で実行すると下記のようになる。
fortranのプログラムをwindows10のsurface proで回すために始めた勉強は、
現在、本の巻末の例題を3つ再現できたところである。
(ここには書かないが。)
次は複素数の計算が出てきたのでfortranの複素数のプログラミングを
調べて覚える。
(複素数のコードの書き方知らないと覚えようとしている
複素数の高速フーリエ変換はできないから。)
あぁ、、とうとう自分は複素数の計算をプログラミングできるように
なるのだ、、。
大学受験の時に複素数の問題は解けたけど、
大学の専門分野の講義の時は複素数を使った技術計算は
よく理解できなかった。そんな13〜14年前にできなかったことを
今日、明日で超えれるのだと思うと感慨深い。いつの歳になっても
日々勉強である。
で、調べると下記サイトを見つける。
>大気海洋科学のための計算機講習会
>稲津 將(北海道大学地球環境科学研究科)
>Fortran 複素数
>https://www.sci.hokudai.ac.jp/~inaz/doc/B/Education/node6.html
複素数の変数の宣言の仕方は分かった。
次に、プログラミングの前に複素数の足し算、引き算、掛け算、割り算
をおさらいせねば。
足し算、引き算は実部、虚部をそのまま足し引きするだけだが、
掛け算、割り算ってどうやるのだったか、、。
もう13、14年も経っているから覚えてない。
で、検索すると下記のサイトが出てきた。
>マナペディア
>複素数の四則計算
>OKボーイ
>https://manapedia.jp/text/52
割り算がちょっと面倒だな。
分母に共役複素数を掛けてたか。
ではfortranの
・足し算、引き算、掛け算、割り算
・共益複素数を出力するconjg関数
・2乗(x^2)
・指数関数(e^x)
を試してみる。
下記のようにコードを書いてみた。
(1〜27行目)
(28〜51行目)
その際、複素数のformat文は
どうやって書けばいいか分からなかったので
下記のサイトを参考にした。
(実部、虚部をコンマで区切ってカッコで囲めばいい)
>早稲田大学 理工情報関連科目・情報教育ウェブサイト FORTRANプログラミング入門
>2019年度春学期・Fortranプログラミング入門
>Format文の書式
>http://www-it.sci.waseda.ac.jp/FPR1/class02/Fortran/Japan/3_2fmt.pdf
ついでに下記のURLを貼っておこう。
(C、Fortran、JAVAのプログラミング言語の講義が聴けるから。)
>早稲田大学理工メディアセンター
>http://www.waseda.jp/mse/web/infotechedu/
で、回した結果は下記。
よしよし、うまくいった。
同じ計算をエクセルでやったのが下記。
数値も合っている。
※指数関数部分はIMEXP関数にCOMPLEX関数の複素数を代入し、
その実部と虚部をそれぞれIMREAL関数、IMAGINARY関数で
セルに出力した。
これで、複素数のコードに必要な内容は把握できただろう。
(追記)
実数、整数から複素数を作るcmplx関数が必要だったので追記する。
cmplx関数がないと、
整数または実数変数を組み合わせて複素数を作ることができない。
c=(a,2.0)やc=(a,b)とするとエラーになる。
(数値だけならいけるが、変数が入るとカッコだけではだめになる。)
c=cmplx(a,2.0)やc=cmplx(a,b)とするとエラーでなくなる。
それを使って下記のコードを書いた。
で実行すると下記のようになる。