2009年7月30日木曜日

どれだけ大きい数の計算を行えるかを調べるプログラム

その1

#include < stdio.h >
main(){
int i=1,x;
for(x=1; x<70 ;x++){
i=i*2;
printf("%d %d \n" ,i,x);
}
}

その2

#include < stdio.h >
main(){
int count=1;
int x=1;
int y=0;
while (y !=x){
y=x;
x=x*2;
printf("%d\n",count,x);
count++;
}
}


while :繰り返しの記号
y !=x :y=xでないならば count :番号を付けていく xとyが一致しない限り繰り返されるプログラム。計算機が計算できる範囲を超えたらx=yとなるのでここで計算が止まる。

2009年7月29日水曜日

n項まで計算できるsinのテイラー展開のプログラムです

#include < stdio.h >
#include < math.h >
main(){
char FileName[124];
FILE *fp;

int i, j, k, n, m, e;
float a, b, c, d;
double x;
float dx, s;
x = 0.0e0;
dx = 0.1e0;
x = -dx;
b = 0;

printf("結果の保存先ファイル名を入力してください>");
scanf("%s" , FileName);
fp = fopen(FileName , "w");

printf("テイラー展開のn項まで計算します。nを入力してください>");
scanf("%d", &n);

for(e=1; e<=70; e++){
x = x + dx;

for(m=1; m<=n*2; m = m + 4){
b=0;
for(i=1; i<=m; i = i + 4){
a = 1.0;
for(j=1; j<=i; j++){
a = a * 1/j;
}
a = a * pow(x,i);
b = b + a;
}
}

for(m=3; m<=n*2; m = m + 4){
c = 0;
for(i=3; i<=m; i = i + 4){
a = 1.0;
for(j=1; j<=i; j++){
a = a * 1/j;
}
a = a * pow(x,i);
c = c + a;
}
c = -c;
}

d = b + c;
printf("%d %f %e\n", e, x, d);

fprintf(fp,"%d %f %e\n", e, x, d);
}

fclose(fp);

return 0;

}

実行したら、最初に実行結果を出力するファイル名を記入してください。
その後に、n項まで計算するための"n"を入力してください。

2009年7月27日月曜日

夏休み

8月3日が夏休み前の最後の日です
渡辺君も参加してください

cで扱える数のテスト

コンパイルの仕方

cのプログラムのコンパイルの仕方
コマンドは
gcc -lm
ここで -lmはmath.hを使うときにコンパイルのオプションとして
つける -lはリンク先を指定している
-lmは数学関数などのコンパイル済みのライブラリーを指定している

gcc test.c -lm

2009年7月21日火曜日

3-5 数値微分

微分値df/dxを数値的に求める(7月27日の課題)
基本はテーラー展開


微分値の計算を右辺第一項で近似すると,


誤差はdxの一次に比例,これを一次精度と呼ぶ
これのプログラムを作ってみる
f(x)としては指数関数を使う

2次精度にするにはどうしたらよいか

2009年7月16日木曜日

3-4-3. gnuplotの使い方

使用例
ファイルreの2行目をx3行目をyとしてグラフを書く

astro-PBG4-12:~/tmp habe$ gnuplot <----- gnuplotの起動

G N U P L O T
Version 4.0 patchlevel 0
last modified Thu Apr 15 14:44:22 CEST 2004
System: Darwin 8.11.0

Terminal type set to 'x11'
gnuplot> plot "re"
gnuplot> plot "re" u 2:3
gnuplot> plot "re" u 2:3 with line
gnuplot> set yrange[-1:1]
gnuplot> plot "re" u 2:3 with line
gnuplot> exit

3-4-0. sin xのテーラー展開

3-4-2. プログラム例 (pow関数を使う)

#include < stdio.h >
#include < math.h>
main()
{
int i, n;
double x;
float dx, s ,c1,c3,c5,c7,c9;
x=0.0e0;
n= 70;
dx = 0.1e0;
x = -dx ;
c1=1;
c3=c1/2/3;
c5=c3 / 4 /5;
c7 = c5 /6 /7;
c9 = c7 /8 /9;
for (i=1;i<=n; i++ ){
x = x + dx;
s = x -c3 *pow(x,3) + c5*pow( x,5) - c7 * pow(x,7)+c9* pow(x,9);
printf(" %d %f %e \n", i , x, s);
}
}

3-4-1. プログラム例

#include < stdio.h >
main()
{
int i, n;
float x, dx, s ;
x=0.0;
n= 70;
dx = 0.1;
x = -dx ;
for (i=1;i<=n; i++ ){
x = x + dx;
s = x -1/6.0 *x*x*x +1/5.0/4.0/3.0/2.0* x*x*x*x*x
- 1/7.0/6.0/5.0/4.0/3.0/2.0* x*x*x*x*x*x*x ;
printf("%d %f %e \n", i , x, s);
}
}

3-4. テーラー展開で値を求めてみる

sin x のテーラー展開
n項までの和を求めるプログラム
結果をグラフにする
グラフを印刷してみる

3-3. 計算までの道筋

プログラムを書く
翻訳する(コンパイル)
実行する

2009年7月15日水曜日

3-2. c プログラムの例

これは何をしているのか,考えてみよう


#include
main()
{
int a ;
a = 1 + 2 ;
printf("%d¥n" , a);
a = 1 - 2 ;
printf("%d¥n" , a);
a = 1 * 2 ;
printf("%d¥n" , a);
a = 1.0 / 2 ;
printf("%d¥n" , a);
}

3-1. unix (Linux)の使い方

1) loginとlogout
他の計算機と接続するには sshを使う

2) ファイル

3) ディレクトリ
 ファイルをしまっておく場所で階層的に構成されている
 Linuxでは
  一番大きな階層がルートディレクトリ(/)
  その下のディレクトリの例(/bin, /usr, /homeなど)

4) 標準入出力とパイプラインとリダイレクト
 コマンドの出力は普通標準出力先(ディスプレイ)へ
 これをリダイレクトして例えばファイルに入力できる
  ls > log.txt
これはlsの出力先を>でlog.txtというファイルに変更している

 コマンドの出力を別のコマンドの入力に出来る
  ls > less 
これはlsの出力をlessに渡している
5) ファイル管理と複写、移動、削除,ディレクとの作成と削除,文字列の検索
ls, cp, mv, rm, mkdir, rmdir, grep

6) フォアグランドとバックグランド

3. unix (linux)

計算機の制御システムのこと
 c言語で書かれており、世界共同で開発され続けれている
計算を目的としている計算機で多く使われている
(pcからスーパーコンピューターまで)
複数の計算を同時に行なえる
複数の人が一つの計算機を同時に使用できる
解析ツールもそろっている(gcc, gnuplotなど)

2. プログラムとは

問題を計算機に計算させる手順を書いたもの,
ソースあるいはソースコードとも言う

使用する言語はc、c++あるいはfortran

取り上げるテーマ
惑星円盤における粒子の衝突による成長
膨張宇宙における密度揺らぎの成長

1. 内容(目次)

プログラムとは
Unix, Linuxについて
テーラー展開
運動方程式の解法

参加者

渡辺隼輔
海木寛之
佐藤祥太
若山真梨子
石倉未奈

羽部朝男

2009年7月14日火曜日

若山さん

若山さん
どうも、書き込めると思いますので
やってみてください

よろしく

羽部です

みなさん
連絡はメイルでしますが,
図や記録はここに投稿しておくと便利かと思い
作ってみました

また、セミナーで使ったファイルをのせていきますので
コメントください
よりよいものにしていきます

時間ができたら,整備します

関係者以外には公開されない
ブログになっていますので自由に書き込んでください