Thursday, September 30, 2010

【Fortran90】 3次スプライン補間法

関数を何らかの方法で補間する必要があるので、その方法として3次スプライン補間法を考える。よく使われているらしいから。

でも、これがよく使われる理由とは?データがたくさんあるときでも、ラグランジュ補間のように当てはまりの精度が問題にならないこと、なのかな。なぜ3次かはわからない。

B-スプラインというのも耳にしたことあるけど、これはデータの点を通過しないという点で、個人的には、問題がある。

スプラインのサブルーチンはFortran Source CodesSPLINEがある。

3次スプライン補間法(Piecewise Cubic Spline)を使うには、次のサブルーチンを使う。

  • spline_cubic_val(n,t,y,ypp,tval,yval,ypval,yppval)

  • spline_cubic_set(n,t,y,ibcbeg,ybcbeg,ibcend,ybcend,ypp)
    • 2階微分の情報を与えるサブルーチン。
    • スプライン補間の境界条件はここで設定する。自然境界(natural boundary。2つの境界点における近似関数の2階微分が0となる)を使う場合、ibcbeg=2, ybcbeg=0.0D0, ibcend=2, ybcend=0.0D0とする必要がある。

Codingの手順(自然境界条件の場合)

1. n, t, yにそれぞれデータ・ポイントの数(整数)、argumentの配列(倍精度、n個の要素)、関数値の配列(倍精度、n個の要素)を設定する。

2. ``spline_cubic_set''サブルーチンをコールして2階微分の配列yppを得る。

3. ``spline_cubic_val''サブルーチンをコールして、argumentがtval(倍精度、input)の時の関数の近似値yval(倍精度、output)、1階微分ypval(倍精度、output)、2階微分yppval(倍精度、output)を得る。


Note 1: 微分可能でない関数の近似精度は低い。特に、微分可能でない点の近傍においてそれは顕著。

Tuesday, September 28, 2010

【ifort】バグ

コーディングに問題があるにも関わらず、コンパイル・エラーが出ないバグについて、発見したものを記録しておく。[ ]の中はifortのヴァージョン。
  • [Ver.11.1_072] メインのプログラム・ファイルとモジュール・ファイルで同じ名前の変数を宣言してもエラーが出ずにコンパイルされる。ただし、値は"NaN"となる。

Monday, September 27, 2010

【Fortran】チューニング

並列計算をする前に考えるべきことは、チューニング。
簡単に思いついたものを箇条書きでメモしておく。

  • if文はできる限り使わない。
    • (例)配列を上手く使う。

  • 割り算や累乗をできるだけ避ける。
    • (例)ループ内で無駄な処理が重複しないよう、できる限りループの外へ出す。

  • メモリへの連続アクセスをできるように配列の添字の使用を行う。
    • ただし、キャッシュ・ヒット率とのバランスを考慮する。

  • キャッシュ・ヒット率を高める。
    • (例)ループ・アンローリング。
    • ただし、メモリ連続アクセスとのバランスを考慮する。

  • できる限り組み込み関数を使わない。

  • I/O処理を少なくするため、インライン展開を行う。
    • インライン展開しない場合、コンパイラの最適化が上手く行わず、処理速度が低下することがある。
    • もちろん、コードの見やすさとのバランスを考慮すべき。

【Fortran】メモリ連続アクセスとキャッシュヒット

Fortranのコーディングをしていて気づいたのだけど、何が何でもメモリに連続アクセスできるように配列の添字を最優先すればいいというわけでもないっぽい。

同じ変数を使う場合、多少連続アクセスを犠牲にしてもキャッシュ・ヒットを高めることで計算処理を高速化できる場合がある。

要は両者のバランスをうまくとる必要があるということ。この辺はプログラムを走らせながら確認しないとわからない。

Monday, September 6, 2010

オバマ氏の印象的な言葉

This is America. We don't disparage wealth. We don't begrudge anybody for achieving success. And we certainly believe that success should be rewarded. But what gets people upset -- and rightfully so -- are executives being rewarded for failure, especially when those rewards are subsidized by U.S. taxpayers, many of whom are having a tough time themselves.
Source: "New rules" @ The White House Blog

Wednesday, September 1, 2010

【R】UbuntuにRをインストール

こちらのwikiを参照。

起動は端末で
$ R
と入力すればOK。