excel との連携 2

21
1 Excel Excel とととと とととと 2 2 とととととととととととと ととととととと Excel とととととととととととと Excel とととととととととと とととととととととととととととととととととと 今今今今今今今

Upload: chacha

Post on 07-Jan-2016

52 views

Category:

Documents


4 download

DESCRIPTION

Excel との連携 2. 実数列を生成する際の注意 数学関数の利用 Excel によるリサージュ図形描画 Excel による対数グラフ描画. 今日のポイント. 関数グラフ描画のためのテクニックを身につける. CSV ファイルとは ( 再掲 ). コンマ区切り ( Comma Separated Values ) 形式 のテキストファイル データをコンマ ( , ) で区切り、改行を用いて 2 次元的に配列 コンマを含むデータは 二重引用符 ( " ) でくくられる。. ファイル出力例. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Excel との連携  2

1

ExcelExcel との連携 との連携 22

実数列を生成する際の注意 数学関数の利用 Excel によるリサージュ図形描

画 Excel による対数グラフ描画

関数グラフ描画のためのテクニックを身につける今日のポイント

Page 2: Excel との連携  2

2

CSVファイルとは (再掲 )

コンマ区切り(Comma Separated Values)形式のテキストファイル

データをコンマ (,) で区切り、改行を用いて 2 次元的に配列

コンマを含むデータは二重引用符 (") でくくられる。

fprintf(fp,"%f, %f, %f\n", a, b, sum);

fscanf(fp,"%lf, %lf, %lf", &a, &b, &sum);

ファイル出力例

ファイル入力例

Page 3: Excel との連携  2

3

例 14.1.1 CSVファイルへの出力(コマンドプロンプトを使わない場合 )/* ex14_1_1.c */#include <stdio.h>int main(void){ double a, b, sum; FILE *fp; a = 2.345; b = 5.678; sum = a + b; fp=fopen("foo.csv","w"); fprintf(fp,"%f, %f, %f\n", a, b, sum); fclose(fp); return 0;}

コンマがなければ CSV じゃない

オプション

教科書 p.129 参照

Page 4: Excel との連携  2

4

実数列を生成するプログラム (悪い例 )

/* forflt1.c */#include <stdio.h>

int main(void){ float x; // double にするとどうなる ?

for (x = 0; x <= 1; x += 0.01) { printf(" x = %g\n", x); } return 0;} %g は %f と %e

のいいとこどり

Page 5: Excel との連携  2

5

実行結果(悪い例)Z:\nyumon2>cl forflt1.c ...

Z:\nyumon2>forflt1 x = 0

x = 0.01

...

x = 0.999999

0.84 あたりから誤差が蓄積

Page 6: Excel との連携  2

6

実数列を生成するプログラム (よい例 )/* forflt2.c */#include <stdio.h>int main(void){ int i; float x; for (i = 0; i <= 100; i++) { x = i/100.0; // 100 にするとどうなる ? // 100. では ? printf(" x = %g\n", x); } return 0;}

Page 7: Excel との連携  2

7

実行結果(よい例)Z:\nyumon2>cl forflt2.c ...

Z:\nyumon2>forflt2 x = 0

x = 0.01

...

x = 1

Page 8: Excel との連携  2

8

数学関数の利用例/* pi.c */#include <stdio.h>#include <math.h>

int main(void){ printf("PI = %.20g\n", 4.0*atan(1.0)); return 0;}

atan(x): arctan(x), すなわち tan1(x) を計算 ( ラジアン )

小数以下 20桁

オプション

教科書 pp.16~18 参照

Page 9: Excel との連携  2

9

リサージュ図形を生成するプログラム 1

/* Lissaje1.c */#include <stdio.h>#include <math.h>int main(void){ int i; double th, x, y, PI=3.14159265358979; for (i = 0; i <= 200; i++) { th = PI*(i/100.0); x = cos(5*th); y = sin(7*th); printf("% .5f, % .5f\n", x, y); } return 0;} 空白を入れておく

と負の数のときも揃

数字の組み合わせを変えてみると…

Page 10: Excel との連携  2

10

コマンドプロンプトで実行Z:\nyumon2>cl lissaje1.c ...

...

Z:\nyumon2>lissaje1 > lissaje1.csv

Page 11: Excel との連携  2

11

Excel によるリサージュ図形描画

1. CSV ファイルをダブルクリックして、 Excel を起動2. Microsoft Excel ブック (*.xls) 形式で保存3. プロットしたいデータ列を 2 列分選択4. 「グラフウィザード」をクリック5. 「散布図」を選択し、「形式(T)」でマーカーなしの

折れ線グラフを選択6. 「次へ>」を 2 回クリックし、「タイトルとラベル」タ

ブを表示7. 「X / 数値軸 (A) 」に x 、「Y / 数値軸(V)」に y を

記入8. 「完了」をクリック

忘れないうちに保存

最後に上書き保存

Page 12: Excel との連携  2

12

Excel におけるリサージュの修正

必ずグラフエリアを選択した状態で行う 「グラフ (C) 」メニューの「グラフオプション

(C)... 」に よる変更 「目盛線」タブでY軸の目盛線の削除 「凡例」タブで凡例の削除

右クリックでの「~書式設定( O )…」による変更 「軸の書式設定 (O)... 」の「目盛」タブでX (Y)/ 数値軸

との交点 (C) 変更 「プロットエリアの書式設定 (O)... 」で領域の背景色削

Page 13: Excel との連携  2

13

修正前と修正後

-1.5

-1

-0.5

0

0.5

1

1.5

-1.5 -1 -0.5 0 0.5 1 1.5

x

y 系列1

-1.5

-1

-0.5

0

0.5

1

1.5

-1.5 -1 -0.5 0 0.5 1 1.5

x

y

Page 14: Excel との連携  2

14

リサージュ図形を生成するプログラム 2

/* Lissaje2.c */#include <stdio.h>#include <math.h>int main(void){ int i; double th, x, y, PI=3.14159265358979; for (i = 0; i <= 200; i++) { th = PI*(i/100.0); x = (cos(5*th)+sin(7*th))/2; y = (sin(5*th)+cos(7*th))/2; printf("% .5f, % .5f\n", x, y); } return 0;}

オプション

Page 15: Excel との連携  2

15

対数グラフに表示させる例/* sinc2.c */#include <stdio.h>#include <stdlib.h>#include <math.h>int main(void){ int i; double x, y, PI=3.14159265358979; for (i = 1; i <= 300; i++) { x = i/10.; y = sin(PI*x)/(PI*x); y += (0.01*rand())/RAND_MAX; printf("%.5g, %.5g\n", x, y*y); } return 0;}

RAND_MAX に必要

ノイズを加えている

(省略してもよい)

Page 16: Excel との連携  2

16

コマンドプロンプトで実行Z:\nyumon2>cl sinc2.c ...

...

Z:\nyumon2>sinc2 > sinc2.csv

Page 17: Excel との連携  2

17

Excel で対数グラフを描く1. CSV ファイルを開き、 *.xls 形式で保存2. 「グラフウィザード」により「散布図」の折れ

線 グラフを描く3. X軸または Y 軸の数値軸(目盛)を右クリック4. 「軸の書式設定 (O)... 」をクリック5. 「目盛」タブを選択6. 下方の「対数目盛を表示する( L )」をチェッ

ク7. 「  OK  」をクリック

Page 18: Excel との連携  2

18

Excel における対数グラフの修正8. 「グラフオプション( O )…」で目盛線、補

助目盛線を描く9. 補助目盛線を右クリックして「目盛線の書式

設定 (O)... 」を開き、「パターン」タブで線スタイルを点線にする

10. X軸または Y 軸の数値軸(目盛)を右クリックして「軸の書式設定 (O)... 」を開き、「目盛」タブ内で X(Y)/ 数値軸との交点 (C) を調節する

11. 「目盛」タブの最大値、最小値を調節する

Page 19: Excel との連携  2

19

修正前と修正後

0

0.2

0.4

0.6

0.8

1

1.2

0 5 10 15 20 25 30 35

x

sinc

(x)^

2

0.000000001

0.00000001

0.0000001

0.000001

0.00001

0.0001

0.001

0.01

0.1

1

0.1 1 10 100

x

sinc

(x)^

2

0.0001

0.001

0.01

0.1

1

0.1 1 10 100

x

sinc

(x)^

2

Page 20: Excel との連携  2

20

スキルアップタイム

1. x を対数軸上で等間隔になるように生成し、   y = 1/(1+x2) を計算して x, y を標準出力

するプログラム lorentz.c を作成せよ。2. lorentz.c をコンパイルし、その実行結果を

lorentz.csv に保存せよ。3. 上記の結果を両対数グラフにせよ。

Page 21: Excel との連携  2

21

ヒント x を等比数列にする (x = a ri , i = 0,1,2... ) x の初項は xmin(= 0.1) 、公比 r は

(xmax/xmin)1/N ( N は総データ点数)または

101/N ( N は 1 桁あたりのデータ点数) r = pow(xmax/xmin, 1.0/N)

or r = pow(10, 1.0/N) x = xmin*pow(r,i)

pow(x,y): べき乗関数 xy