« 2008年11月 | トップページ | 2009年1月 »

2008年12月

2008/12/31

大晦日

来年もよろしくお願いします。

| | コメント (0) | トラックバック (0)

2008/12/30

Inspiron mini 9

100円でInspiron mini 9を手に入れられることになった。(DELL×イーモバイルキャンペーンのやつ)

Inspiron_mini_9_2 

手元に届くのが待ち遠しい。

| | コメント (2) | トラックバック (0)

2008/12/29

ダンボー

ダンボー・ミニを買った。

| | コメント (0) | トラックバック (0)

2008/12/28

Smart Defrag

「Smart Defrag」はシステムのアイドル時にこまめにデフラグしてくれる常駐型のデフラグソフト。デフラグ中でも他の作業をはじめてCPU使用率が上昇したり、HDDへのアクセスが発生するとデフラグを中断してくれる。

結構便利なソフトだが、日本語化はされていない。(有志による日本語ランゲージファイルはあるみたい)

Link:Smart Defrag - 窓の杜

| | コメント (0) | トラックバック (0)

2008/12/27

Outlook Expressをまるごとバックアップ

Windows標準(Vista以前)のメールクライアントソフト「Outlook Express」のメールをバックアップすることは容易いけど、振り分けなどのルールまでをバックアップするソフトはなかなか見つからない。

Exmaはこの要求に答えてくれるソフトで、メールやルール、設定をまるごとバックアップ・リストアすることができる。

Link:Exmaメインページ

| | コメント (0) | トラックバック (0)

2008/12/26

Fedora 10のTeX Liveで日本語TeX・・・その2

パッケージをインストールする以外、得に設定することは何もない。Fedora 8から比べれば実に優秀である。

1.インストール

以下のようにしてTeX関係をまとめてインストールする。

# yum install texlive* xdvik xdvipdfmx

# mktexlsr

次にビューワもインストールしておく。(PDF閲覧のためにAdobe Readerもインストールしておくといい)

# yum install gv gsview

これだけで日本語TeXできるようになる。

2.コンパイル、変換等

基本的にFedora 8のころと変わらない。

  • コンパイル : platex   ex) $ platex sample.tex
  • 日本語DVIの表示 : pxdvi   ex) $ pxdvi sample.dvi
  • DVIからPSへの変換 : pdvips   ex) $ pdvips sample.dvi > sample.ps
  • DVIからPDFへの変換 : dvipdfmx   ex) $ dvipdfmx sample.dvi

こんなに簡単なのに何故今まで出来ない出来ないと喚いていたのかというと、

"TeX LiveはUTF-8に対応している"

という誤解が原因。以前どこかで"TeXはUTF-8に対応するようになる"というような文面を見かけて、新しいTeXディストリビューションであるTeX Liveは当然UTF-8に対応しているのだろうと思っていた。しかし、実際には対応しておらず以前EUC-JPで編集する必要がある。

UTF-8で編集した後、nkfなどでEUC-JPに変換することになるだろうが、Emacs編集する場合、この作業の手間を省くことができる。

(modify-coding-system-alist 'file "\\.tex\\'" 'euc-jp)

これを.emacsに書いておけば.texファイルを新規作成するときに文字コードeuc-jpでEmacsを立ち上げることができる。

| | コメント (0) | トラックバック (0)

2008/12/25

Adobe Reader起動時のメッセージ

Fedora 10にAdobe Reader(8.1.3)をインストールして、起動してみるとメッセージを出してくる。

$ acroread
Gtk-Message: Failed to load module "gnomebreakpad":
/opt/Adobe/Reader8/Reader/intellinux/lib/libstdc++.so.6:
version `GLIBCXX_3.4.9' not found
(required by /usr/lib/bug-buddy/libbreakpad.so.0)

Adobe Reader自体は起動するので問題ないが気持ち悪い。そこでGoogle先生に聞いてみることにした。

どうやらこの手の問題はメッセージに出てくるライブラリを消去すればいいらしい。

# cd /opt/Adobe/Reader8/Reader/intellinux/lib/

# rm libstdc++.so.6 libstdc++.so.6.0.7

これをした後、再度Readerを起動してみるとさっきのメッセージは表示されなくなったが、今度は別のメッセージが出てきた。

$ acroread
/opt/Adobe/Reader8/Reader/intellinux/bin/acroread:
/opt/Adobe/Reader8/Reader/intellinux/lib/libgcc_s.so.1:
version `GCC_4.2.0' not found
(required by /usr/lib/libstdc++.so.6)

これも同様に対処。

#rm libgcc_s.so libgcc_s.so.1

これでAdobe Readerを起動したときに何もメッセージが表示されなくなる。

| | コメント (0) | トラックバック (0)

2008/12/24

Fedora 10のTeX Liveで日本語TeX

今までFedora 10標準のTeX Liveではなく、ptexliveをインストールしてFedora 10で日本語TeXをできるようにしようと思っていたが、なんか標準のTeX Liveでもいけそうな気がしてきた。

むしろptexliveの分かりにくい説明とリンクのたらい回しのほうが余程イライラしてくる!

・・・とりあえずTeXでやりたいことを挙げておく。

  • 日本語で書いた.texをコンパイルできるようにする
  • DVIで日本語を表示できるようにする
  • DVIをPSに変換できるようにする
  • DVIをPDFに変換できるようにする
  • jsarticleを使えるようにする

Fedora10で日本語TeXできるようになればFedora 10をメインにできるゼ!

| | コメント (0) | トラックバック (0)

2008/12/23

BiCGSTAB法

双共役勾配(BiCG)法の残差を減少させ安定化させたのがBiCGSTAB法。BiCGのCGとの違いは非対称行列の反復計算に使用できること。(詳しく解説しようとすると、とても難しいので割愛)

とりあえず、サンプルプログラムを作ってみた。(用いた方程式は以前CG法のプログラムで使ったものと同様)

/*==================================================*/
// Bi-CGSTAB法テストプログラム
/*==================================================*/

#include <cstdio>
#include <cstdlib>
#include <cmath>

using namespace std;

const int    N      = 10;
const int    ITRMAX = 100;
const double EPS    = 1.0e-6;

typedef double Vector[N];      // ベクトル
typedef double Matrix[N][N];   // 行列

// ベクトルに行列を作用 y = Ax
void matrix_x_vector(Vector y, const Matrix a, const Vector x)
{
  for(int i = 0; i < N; i++) {
    double mxv = 0.0;
    for(int j = 0; j < N; j++) {
      mxv += a[i][j]*x[j];
    }
    y[i] = mxv;
  }
}

// 内積を計算
double inner_product(const Vector x, const Vector y)
{
  double inner_p = 0.0;
  for(int i = 0; i < N; i++) {
    inner_p += x[i]*y[i];
  }
  return inner_p;
}

// ベクトルノルムを計算
// ベクトルノルム := sgm(0〜N-1)|x[i]|
double vector_norm(const Vector x)
{
  double norm = 0;
  for(int i = 0; i < N; i++){
    norm += fabs(x[i]);
  }
  return norm;
}

// BiCGSTAB法
/*
  [Algorithm] Ax = b を BiCGSTAB法で解く
  1) Compute r0 = b - Ax (Choose r0* arbitary, r0* = r0, (r0, r0*) != 0)
             p = r = r0
     (c1 = (r0*, r0) = (r0, r0)とする)
  2) Loop...
     c2    = (r0*, Ap)
     alpha = c1 / c2
     e     = r - alpha*Ap
     c3    = (e, Ae) / (Ae, Ae)

     x_new = x + alpha*p + c3*e
     r_new = e - c3*Ae
     if(EPS > ||r||/||b||) break

     c1    = (r_new, r0*) = (r_new, r0)
     beta  = c1 / (c2*c3)
     p_new = r_new + beta*(p - c3*Ap)
*/
void bicgstab(const Matrix a, Vector x, const Vector b)
{
  static Vector r0;  // 初期残差ベクトル
  static Vector r;   // 残差ベクトル
  static Vector p;   // 探索方向ベクトル

  static Vector ax;
  matrix_x_vector(ax, a, x);
  // r0,r,pを計算 r0 := b - Ax
  // p = r = r0
  for(int i = 0; i < N; i++) {
    r0[i] = b[i] - ax[i];
    p[i]  = r[i] = r0[i];
  }
  // (r0, r0*) != 0,   r0* = r0
  double c1 = inner_product(r0, r0);
  if(c1 == 0.0) {
    fprintf(stderr, "(r0, r0*) == 0!!\n");
    exit(1);
  }

  for(int iter = 1; iter < ITRMAX; iter++) {
    static Vector ap;
    matrix_x_vector(ap, a, p);
    double c2    = inner_product(r0, ap);
    double alpha = c1 / c2;

    static Vector e;
    for(int i = 0; i < N; i++) {
      e[i] = r[i] - alpha*ap[i];
    }
    static Vector ae;
    matrix_x_vector(ae, a, e);
    double e_dot_ae  = inner_product(e, ae);
    double ae_dot_ae = inner_product(ae, ae);
    double c3        = e_dot_ae / ae_dot_ae;

    for(int i = 0; i < N; i++) {
      x[i] += alpha*p[i] + c3*e[i];
      r[i]  = e[i] - c3*ae[i];
    }
    
    double err = vector_norm(r)/vector_norm(b);
    printf("LOOP : %d\t Error : %g\n", iter, err);
    if(EPS > err) break;

    c1          = inner_product(r, r0);
    double beta = c1 / (c2*c3);
    
    for(int i = 0; i < N; i++) {
      p[i] = r[i] + beta*(p[i] - c3*ap[i]);
    } 
  }
}

int main()
{
  // 連立方程式 Ax = b
  Matrix a = { {5.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
	       {2.0, 5.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
	       {0.0, 2.0, 5.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
	       {0.0, 0.0, 2.0, 5.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0},
	       {0.0, 0.0, 0.0, 2.0, 5.0, 2.0, 0.0, 0.0, 0.0, 0.0},
	       {0.0, 0.0, 0.0, 0.0, 2.0, 5.0, 2.0, 0.0, 0.0, 0.0},
	       {0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 5.0, 2.0, 0.0, 0.0},
	       {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 5.0, 2.0, 0.0},
	       {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 5.0, 2.0},
	       {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 5.0} };
  Vector b = {3.0, 1.0, 4.0, 0.0, 5.0, -1.0, 6.0, -2.0, 7.0, -15.0};
  // 初期値は適当
  Vector x = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};

  // CG法でAx=bを解く
  bicgstab(a, x, b);
  
  printf("###Calc End.###\n");
  for(int i = 0; i < N; i++) {
    printf("x[%d] = %2g\n", i, x[i]);
  }
  
  return 0;
}

実行結果は次のようになる。

LOOP : 1         Error : 0.416594
LOOP : 2         Error : 0.126537
LOOP : 3         Error : 0.0364201
LOOP : 4         Error : 0.0123132
LOOP : 5         Error : 0.00372894
LOOP : 6         Error : 0.0011802
LOOP : 7         Error : 0.00023157
LOOP : 8         Error : 4.34888e-05
LOOP : 9         Error : 4.5223e-06
LOOP : 10        Error : 7.16945e-20
###Calc End.###
x[0] =  1
x[1] = -1
x[2] =  2
x[3] = -2
x[4] =  3
x[5] = -3
x[6] =  4
x[7] = -4
x[8] =  5
x[9] = -5

解は得られているのでBiCGSTABのコードとしては多分あってるはず。

| | コメント (0) | トラックバック (0)

2008/12/22

気づいたら

今年もあと1週間とちょっと。

でも今年中に片付けておかないといけない仕事が結構残ってる!

しっかり片付けておかねば・・・

| | コメント (0) | トラックバック (0)

2008/12/21

FedoraにインテルC++コンパイラ(Ver.11)をインストールする

デュアルコアマシンで自作プログラム(もちろん並列処理は一切考えない)を動かしても1つのコアでしか処理しないので場合によってはシングルコアマシンよりも不利になる。

私の数値計算プログラムも、自分のマシン(ThinkPad R61 Core2Duo 1.8GHz)上でG++でコンパイルして動かすときは片コアのみが100%になっているが、もう片コアは遊んでいる。

普段研究室にいるときは割り当てられた研究室のマシン(Pen4 3.4GHz)で動かせばいいが、常に研究室のマシンとつながっているわけにはいかないのでR61のCPUをフルに使って自作プログラムを動かすことを考えた。

しかし、OpenMPやスレッドなどは手軽にできそうにない。そこでインテルコンパイラの自動並列化機能を使うことにした。これならコンパイル時に「-parallel」オプションを与えるだけで済む。(現時点ではコード内で効率的な並列化を指示できないと思った)

というわけで、まずはインテルC++コンパイラをインストールする。

Link:インテル ® C++ コンパイラ Linux* 版のダウンロード

ここからインテルコンパイラの最新版(11.0)をダウンロードしてくる。(今回はFedora 8 32bit版なのでIA-32版をダウンロードした。64bit版ならintel(R) 64版だろう。IA-64は80x86ベースじゃないし。)

インストールはダウンロードしてきたアーカイブを解凍し、生成されたディレクトリ内に移動して

# ./install

とすればインストーラーが起動するので、インストーラーの指示に従ってインストールする。(事前にcompat-libstdc++関連をインストールしておく)

また、インストール中にサポートしてないバージョンと警告されても無視してインストール。(バージョン11.0はFedoraの場合は9をサポートしてる)

インストールが完了してもiccコマンドなどを使えるようにするには環境変数の設定やインストール先にPATHを通さなくてはならないが、これらをやってくれるスクリプトが付属している。だけど、このスクリプトはコンパイルの度に実行しなくてはならないようなので、自動で読み込まれるようにする。

# cd /etc/profile.d/

# ln -s /opt/intel/Compiler/11.0/074/bin/ia32/iccvars_ia32.*  ./

次にインテルコンパイラのライブラリを共通ライブラリに登録しておく。

# echo "/opt/intel/Compiler/11.0/074/lib/ia32/lib" > /etc/ld.so.conf.d/icclib.conf

# ldconfig

これでiccコマンドでコンパイルできるようになる。試しに

$ icc -O2 -march=core2 -parallel myProgram.cpp

こんな感じでコンパイルして実行してみたら、両コアを使って処理をするようになり、速度があがった。

ただし、計算方法によって並列化の度合いは変わるので注意。例えば連立方程式の反復解法の場合、Gauss-Seidel法はあまり並列化の恩恵を受けないが(GSのアルゴリズムを見ればわかる)、共役勾配法は並列化によってかなり速くなる。

| | コメント (0) | トラックバック (0)

2008/12/20

Cow&Scorpionどこいった?

閉鎖してしまうのだろうか?

もし閉鎖になってしまったら、とても不便。

とりあえずALTECでしのぐしかない。

| | コメント (0) | トラックバック (0)

2008/12/19

Fedora 10 on VMwareでグラフィカル起動画面を有効にする

Fedora 10は起動時に表示される画面が2種類ある。

Solarテーマが美しいグラフィカルな起動画面か、画面下にプログレスバーが表示される起動画面である。

私がVMwareにインストールしたFedora 10の起動画面は後者だったが、前者の美しい起動画面を見たかったので、次のようにしてみた。

  • /boot/grub/grub.confをエディタで開く (編集するまえにバックアップはとっておく)
  • grub.conf内の「kernel /vmlinuz-2.6.・・・」と記述されている行の最後に1マス開けてvga=0x317を追記して保存

これをやって再起動したところ無事グラフィカルな起動画面が表示されるようになった。

vga=0x317の部分だが、今回はVMwareの画面サイズの設定を1024x768にしていたのでこうした。(vga=0x317の意味はVESA汎用ドライバで解像度1024x768、色数16bitで表示せよということ)

その他の解像度や色数で表示したい場合は、このサイトに書かれている値にすればいいと思う。

| | コメント (1) | トラックバック (0)

2008/12/18

Sun xVM VirtualBox

VirtualBoxの新版はかなり改良されているようだ。

窓の杜の記事を読むと、OpenGLによる3Dアクセラレーションが可能になったり、Core i7の機能に対応し、さらにVMwareやVirtual PCの仮想ディスクにも完全に対応したとある。

去年まではVMware > VirtualBoxだったがVirtualBoxは仮想マシン作成の機能のあるし、個人で使うにはVMware Player/Serverよりも使いやすいように思えてきた。

VMwareもPlayerで仮想マシンを作れるぐらいにはして欲しい。

Link:Sun xVM VirtualBox - ダウンロード

| | コメント (0) | トラックバック (0)

2008/12/17

SSHで公開鍵認証

公開鍵を使ってログインするためのメモ。

まずは、クライアント側で鍵を作る。

$ ssh-keygen -t rsa

-tオプションで暗号化アルゴリズムを指定できる。SSH2ではrsaとdesが選択できるが、わざわざdesにする必要はないだろう。このコマンドを実行するとパスフレーズの入力を促されるが、何も入力しないでEnterを押せば空のパスフレーズの鍵が生成される。(空のパスフレーズの鍵を置いたサーバにはSSHでログインするときに何も入力せずログインできるようになる)

実行し終えるとクライアントのホームディレクトリ下の.sshディレクトリ内に秘密鍵「id_rsa」と公開鍵「id_rsa.pub」が生成される。

次に公開鍵をサーバ側にある自分のアカウントの~/.sshに送る。送ったら.ssh内で

$ cat id_rsa.pub >> authorized_keys

とする。これで公開鍵認証できるようになる。

| | コメント (0) | トラックバック (0)

2008/12/16

UbuntuにSSHでログインできるようにする

まずはsshdをインストール。

$ sudo apt-get install ssh

インストールが完了後、デフォルトではrootログインが可能になっているのでこれを無効にする。

$ sudo emacs /etc/ssh/sshd_config

PermitRootLogin yes   ← これをnoにしておく

パスワードによるログインの項目はとりあえず有効にしておく。(公開鍵の登録が終わったあとに考えればいい)

設定を変更したらsshdの再起動が必要になる。

$ sudo /etc/init.d/ssh restart

これで他のマシンからUbuntuマシンにSSHでログインできるようになる。

| | コメント (3) | トラックバック (0)

2008/12/15

pm3dの表示をレインボーにする

デフォルトのままpm3dを使うと、

Pm3d_default_2


なんかものすごい色で表示されてしまうので、

Pm3d_2

このようにレインボー表示するように設定してみる。

直接パレットを設定する方法もあるが、最も簡単な方法は

gnuplot> set palette rgbformulae 22, 13, -31

とする。ちなみに、

gnuplot> help set palette rgbformulae

とするとプリセットのパターンが表示される。

| | コメント (0) | トラックバック (0)

2008/12/14

Fedora 8 on ThinkPad R61で無線LAN

Ubuntuで無線LAN接続ができたので普段研究室においてあるR61を持ち帰って無線LAN接続できるか試してみた。

まずは無線LANチップを調べてみる。(得に必要はないが)

$ su -

# lspci

Ethernet controller: Atheros Communications, Inc. AR5212 802.11abg NIC (rev 01)

次に「システム」-「管理」-「ネットワーク」で無線LANデバイスが認識されていることを確認して、このデバイスの設定を編集する。

無線LANプロファイルは「ワイヤレス設定」のタブでモードを「自動」にし、SSIDとチャンネル、鍵を入力した。

設定を編集した後、デバイスを起動してみると無事接続できた。

自室は無線LANルーターではなく無線LANアクセスポイント(AP)を使っている。このAPの設定をUbuntuで無線LAN接続する前に見直したのだが、どうやら今まで接続できなかったのはこのAPの設定がまずかったからみたいだ。

| | コメント (0) | トラックバック (0)

2008/12/13

ThinkPadが・・・

今朝、ヤマダ電機のチラシをチェックしてたらパソコンの欄に

ThinkPadが!(R500)

lenovo、ヤマダで販売するようになったんだ・・・

| | コメント (0) | トラックバック (0)

2008/12/12

Ubuntuで無線LAN

Ubuntuで無線LAN接続を試してみた。

結論から言うと簡単に接続できた。

無線LANデバイスをONにして起動しただけでNetwork Managerアプレットが無線LANを検出してくれたので後は必要な情報を入力しただけ。

ちなみに無線LANチップは「Atheros AR5001X+ Wireless Network Adapter (rev 01)」。最新のチップではさすがに自動認識できないこともあるらしいけど、こんな古いチップなら余裕ということだろうか。

この無線LANチップの情報を調べるには「lspci」コマンドを使う。lspciを実行すると、出力の最後のほうに「Network Controller」もしくは「Ethernet controller」という項目があり、そこに記述されている。

| | コメント (0) | トラックバック (0)

Ubuntu 8.10

Ubuntuも使ってみることにした。

Ubuntu

今までちゃんとUbuntuを使ったことがないので分からないことだらけだけど、Ubuntuは情報をとても集めやすくて助かる。

Link:Ubuntu Japanese Wiki

ここにはTipsや動作報告があるので便利。

| | コメント (0) | トラックバック (0)

2008/12/11

Gnuplotの起動時のTerminal

Gnuplot起動時のTerminalを指定したければ、ホームディレクトリに「.gnuplot」なるファイルを作って、例えばx11にしたいときは

set terminal x11

と書いておけばいいのか。

| | コメント (0) | トラックバック (0)

2008/12/10

GKrellM

GKrellMはGTK+を使ったGUIのシステムモニタ。

Gkrellm_2

Fedoraならリポジトリに用意されているから簡単にインストールできる。

GKrellMを自動起動させたい場合は「セッション」の自動起動するプログラムに追加しておけばいい。コマンドは「gkrellm」。

| | コメント (0) | トラックバック (0)

2008/12/09

CG法

まずはCG法(Conjugate Gradient Method)で連立方程式を解く練習。

CG方のアルゴリズムはWikipediaに任せることにして、CG法のプログラムは以下のようになった。

/*==================================================*/
// CG法テストプログラム
/*==================================================*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define N    10
#define TMAX 100
#define EPS  (1.0e-6)

typedef double Vector[N];       // ベクトル
typedef double Matrix[N][N];    // 行列

// ベクトル初期化
void init_vector(Vector x)
{
  int i;
  for(i = 0; i < N; i++){
    x[i] = 0;
  }
}

// ベクトルに行列を作用 y = Ax
void vector_x_matrix(Vector y, Matrix a, Vector x)
{
  int    i, j;
  double vxm;
  for(i = 0; i < N; i++){
    vxm = 0;
    for(j = 0; j < N; j++){
      vxm += a[i][j]*x[j];
    }
    y[i] = vxm;
  }
}

// 内積を計算
double dot_product(Vector x, Vector y)
{
  int    i;
  double dot_p = 0;
  for(i = 0; i < N; i++){
    dot_p += x[i]*y[i];
  }
  return dot_p;
}

// ベクトルノルムを計算
// ベクトルノルム := sgm(0〜N-1)|x[i]|
double vector_norm(Vector x)
{
  int    i;
  double norm = 0;
  for(i = 0; i < N; i++){
    norm += fabs(x[i]);
  }
  return norm;
}

// CG法
void cg_method(Matrix a, Vector x, Vector b)
{
  static Vector p;   // 探索方向ベクトル
  static Vector r;   // 残差ベクトル
  static Vector ax;
  static Vector ap;
  int           i, iter;

  // Axを計算
  vector_x_matrix(ax, a, x);

  // pとrを計算 p = r := b - Ax
  for(i = 0; i < N; i++){
    p[i] = b[i] - ax[i];
    r[i] = p[i];
  }

  // 反復計算
  for(iter = 1; iter < TMAX; iter++){
    double alpha, beta, err = 0;

    // alphaを計算
    vector_x_matrix(ap, a, p);
    alpha = +dot_product(p, r)/dot_product(p, ap);
   
    for(i = 0; i < N; i++){
      x[i] += +alpha*p[i];
      r[i] += -alpha*ap[i];
    }
   
    err = vector_norm(r);   // 誤差を計算
    printf("LOOP : %d\t Error : %g\n", iter, err);
    if(EPS > err) break;

    // EPS < err ならbetaとpを計算してループを継続
    beta = -dot_product(r, ap)/dot_product(p, ap);
    for(i = 0; i < N; i++){
      p[i] = r[i] + beta*p[i];
    }
  }
}

int main(void)
{
  // 連立方程式 Ax = b
  // 行列Aは正定値対象行列
  Matrix a = { {5.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
       {2.0, 5.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
       {0.0, 2.0, 5.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
       {0.0, 0.0, 2.0, 5.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0},
       {0.0, 0.0, 0.0, 2.0, 5.0, 2.0, 0.0, 0.0, 0.0, 0.0},
       {0.0, 0.0, 0.0, 0.0, 2.0, 5.0, 2.0, 0.0, 0.0, 0.0},
       {0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 5.0, 2.0, 0.0, 0.0},
       {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 5.0, 2.0, 0.0},
       {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 5.0, 2.0},
       {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 5.0} };
  Vector b = {3.0, 1.0, 4.0, 0.0, 5.0, -1.0, 6.0, -2.0, 7.0, -15.0};
  // 初期値は適当
  Vector x = {1.0, 1.0, 1.0, 1.0, 1.0,  1.0, 1.0,  1.0, 1.0,   1.0};
  int    i;

  // CG法でAx=bを解く
  cg_method(a, x, b);
 
  printf("###Calc End.###\n");
  for(i = 0; i < N; i++){
    printf("x[%d] = %2g\n", i, x[i]);
  }
 
  return 0;
}

これを実効すると以下のようになる。

$ ./a.out
LOOP : 1         Error : 33.625
LOOP : 2         Error : 19.5236
LOOP : 3         Error : 8.64938
LOOP : 4         Error : 3.7894
LOOP : 5         Error : 1.49629
LOOP : 6         Error : 0.757903
LOOP : 7         Error : 0.348423
LOOP : 8         Error : 0.141565
LOOP : 9         Error : 0.0454147
LOOP : 10        Error : 1.17553e-16
###Calc End.###
x[0] =  1
x[1] = -1
x[2] =  2
x[3] = -2
x[4] =  3
x[5] = -3
x[6] =  4
x[7] = -4
x[8] =  5
x[9] = -5

どうやらちゃんと解けているようである。

| | コメント (0) | トラックバック (0)

2008/12/08

BiCGSTAB法

連立方程式の反復解法(ラプラス方程式やポアソン方程式の解法)にはGauss-Seidel法を使っていたが、Gauss-Seidel法だと収束が遅く、行列が大きくなるとそれはそれは時間がかかってしまう。

そこで、反復解法にCG(共役勾配)法を用いることになった。

しかし、CG法は係数行列が正定値対称行列でなくてはならないので係数行列が正定値対称でない場合はBCG法やBCGを改良したBiCGSTAB法を使うのだとか・・・。(まだよくわからん)

まぁわからなくても調べないことには始まらないので、何冊か数値計算の本をパラパラしていたら

この本にBiCGSTAB法に関する記述とプログラム例が載っていた。(理論に関してはあまり詳しく書いてないが)

これで少し先に進める。

| | コメント (0) | トラックバック (0)

2008/12/07

NAS欲しい

NASって単にLANで使える外付けハードディスクってわけじゃない。

この製品は外出先からでもアクセスできる「Webアクセス機能」や「USBプリントサーバー機能」、私は持ってないから必要ないけど「iPhone 3G連携機能」などとても多機能。容量も1TBあるし。

Link:Buffalo 製品ページ

とても欲しい!

| | コメント (0) | トラックバック (0)

2008/12/06

Fedora 10 KDE版LiveCD

KDE版のLiveCDを使って実機にFedora 10をインストールしてみることにした。

多少古いマシンだけどちゃんと動いてくれた。

 

Fedora10kde

LiveCDからのインストールはデスクトップ上にある「Install to Hard Drive」をダブルクリックすると、おなじみのFedoraのインストーラーが立ち上がってFedora 10をハードディスクにインストールすることができる。(インストールパッケージの選択はできない)

このとき言語はもちろん日本語を選択したのだが、日本語環境はインストールされなかった。(インストーラーはちゃんと日本語表示される)

仕方ないので以下のコマンドで日本語環境をインストール

# yum groupinstall 'Japanese Support'

インストールが完了したら、「Kメニュー(Fedoraマークのやつ)」-「Computer」-「System Settings」-「Regional & Language」で使用言語に日本語を追加する。

KDE4は確かに綺麗だけど、なんか使いにくいなぁ。KDE3の方が使いやすさでは上だったかも。

| | コメント (0) | トラックバック (1)

2008/12/05

Wubiを使ってUbuntuをインストールしてみた

Wubiを使ってUbuntuをインストールしてみた。具体的な手順は

1.Ubuntuのインストールディスクを用意する

Wubiを使ってUbuntuのディスクイメージをWebからダウンロードすることも可能だが、とても遅いので自分で用意したほうが早い。

Link:Ubuntu Desktop 日本語 Remix CDのダウンロード

2.Wubiをダウンロード

Wubiをダウンロードしてくる。このときWubiはインストールするUbuntuのバージョンに対応したものをダウンロードする必要がある。

Link:Wubi

Wubiのサイトには最新版(現時点では8.10)へのリンクしかないので、8.04LTSをインストールしたい場合はSourceForgeからダウンロードしてくる。

Link:Wubi - SourceForge.net

3.Wubiを起動する

Wubiを起動したら各項目に記入してUbuntuのインストールを開始する。このときUbuntuのインストールディスクをドライブに挿入しておけばWubiが見つけてくれる。(挿入しておかないとWebからダウンロードしようとする)

後はインストールが完了するのを待つだけ。

補足) 日本語RemixではないUbuntuをインストールしてしまった場合(KubuntuやXubuntuもかな)は、このページの下のほうに日本語環境のインストール方法が記載されているのでそれに従ってインストールする。

Windowsと同じパーティションにインストールした場合、フラグメンテーションによって時間の経過とともにUbuntuのパフォーマンスが低下するかもしれないので定期的なデフラグをしたほうがいいかも。

| | コメント (0) | トラックバック (0)

2008/12/04

Fedora 10 on VMware

VMware Server 2.0を使ってFedora 10をインストールした。

まずServer2だが、Webコンソールを立ち上げるのがとても面倒というかイライラするので、仮想マシンのページの「Commands」にある「Generate Virtual Machine Shortcut」でデスクトップ上にショートカットを作る。このショートカットからアクセスすることでVMware Playerのようなコンソールで仮想マシンを操作することができるようになる。(あらかじめ仮想マシンのページの「Console」タブからプラグインをインストールしておく)

注)「Generate Virtual Machine Shortcut」でショートカットを作るときはIEでアクセスしている場合、イントラネットのセキュリティレベルを下げておく必要があった。(下げないと「create」ボタンを押してもショートカットが作成できない)

仮想マシンのショートカットをダブルクリックすると仮想マシンが起動するので、後はPlayerと同じ感覚で操作していく。

では、さっそくFedora 10をインストールしてみる。

F1

F2

F3_2

インストールはいつも通り簡単。VMware ToolsはWebコンソールの「Commands」にあるToolsのリンクをクリックすると仮想マシンにToolsのISOイメージがマウントされる。試しにToolsをインストールしてみたが、問題なくインストールできた。

| | コメント (0) | トラックバック (0)

2008/12/03

Check Gmail

「Check Gmail」をインストールしてみた。Fedoraのリポジトリに登録されているのでyumで簡単にインストールできる。

Link:CheckGmail

インストールしたらGNOME起動時に自動起動するように「セッション」でCheck Gmailを登録しておく。(コマンドは「checkgmail」)

| | コメント (0) | トラックバック (0)

2008/12/02

論理的思考

「ハッカーのたのしみ」という題だけど、他人のコンピュータに不正に侵入するテクニックが紹介されている本ではなく(これは帯にも書かれている)、プログラミングするときの論理的(数学的)思考を養う本。

いつか自分もここに書かれていることを意識しながらコーディングできるようになりたいと思う。

| | コメント (0) | トラックバック (0)

2008/12/01

WubiのFedora版があればなぁ

窓の杜にあったWubiの記事を読んでいて、そんなことを思った。

WubiはとりあえずLinux環境を整備してあげるときにとても役に立つけど、Ubuntuしか選べないからなぁ・・・

Fedora版でなくてもいいからRPM系ディストリをインストールできるようなソフトがほしい。

Link:Wubi - Ubuntu Installer for Windows

[追記]

ディストリビューションごとにデュアルブート環境を構築する「UNetbootin」というソフトがあるんすね。

| | コメント (0) | トラックバック (0)

« 2008年11月 | トップページ | 2009年1月 »