6 ファイル処理

実験データを整理したり、計算結果を他のプログラムで処理したりする場合、 ファイル入出力の処理が必要不可欠である。ファイル処理の基本について学習 する。

6.1 ファイルへデータ出力

先ほどの微分方程式(5.4.2)の数値計算の結果は、グラ フに表示させた。ここでは、グラフに表示のみならず、解の値をファイルに出 力する方法を示す。コンピュータープログラムでファイルを取り扱う場合、 OpenとCloseの処理が必要である。FORTRANやC言語でその処理が必要なように、 Mathematicaでも必要である。Mathematicaでは、次の手順でファイルへデータ を書き出す。
  1. OpenWriteコマンドで、ファイルをオープンする。
  2. Writeコマンドで、データをファイルに書き込む。
  3. Closeコマンドで、ファイルをクローズする。

先ほどの常微分方程式の結果を、ファイルに書き出すことを練習する。プログ ラムの動作は次のようにする。

Mathematicaのプログラムは、次のようになる。このプログラムの大まかな動 作を理解して、実行させてみよう。そして、書き込まれたファイルの中身を調 べてみよう。このプログラムの各行の動作をプログラムの後に、説明している。

   tmin=0.0;
   tmax=10.0;
   num=1000;

   result=NDSolve[
      {x''[t]+ x'[t]+x[t]==0,x[0]==0,x'[0]==1},
      x,{t,tmin,tmax}
   ];

   f[t_]:=x[t]/.result[[1]];

   Plot[f[t],{t,tmin,tmax}];

   wfile=OpenWrite[
      "c:/temp/numerical_result.txt",
      FormatType->OutputForm
   ];

   For[i=0,i<=num, i=i+1,
      t=(tmax-tmin) i/num+tmin;
      Print[t,"\t",f[t]];
      Write[wfile,t,"\t",CForm[f[t]]];
   ];

   Close[wfile];

   Clear[tmin,tmax,num,t,i,f,x,result,wfile];

このプログラムの動作について、細かく説明しておく。

6.2 ファイルからデータ入力

次に、ファイルからのデータの入力方法について、説明する。これは、実験デー タなどをMathematicaで処理する場合、必要不可欠なテクニックなので、覚え ておくと良い。

先ほど作成したデータをMathematicaで読み込み、処理をすることを考える。 処理は、フーリエ変換を行うことにする。ここで、作成するプログラムの流れ は、

である。実際の、プログラムは次のようになる。このプログラムの流れを理解 して、実際に打ち込んで実行させよう。各行の説明は、プログラムリストの後 に記述している。
   data=ReadList[
      "c:/temp/numerical_result.txt",
      {Number,Number}
   ];

   ListPlot[data];

   trdata=Transpose[data];
   xlist=trdata[[2]];

   ft=Fourier[xlist];

   ListPlot[
      Abs[ft],
      PlotRange->{{0,100},{0,5}},
      PlotJoined->True
   ];

このプログラムの動作について、細かく説明しておく。




ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成16年10月13日


no counter