9回目課題解答解説
課題1 以下の関数を組み込み,数値微分を行ってみよう.
f(x)=(x * x) / 2
これについて,解析解,プログラム作成,関数電卓による解を比較してみて下さい.
比較した結果と考察をソースファイルのコメントに記述すること
関数の引数について double diff(double fnc(double), double xx, double x0, double x1, int n) fnc(double);微分しようとする関数 xx;導関数の引数(今回はxを指定) x0;x標本の始点(今回は0くらいを指定) x1;x標本の終点(今回は1くらいを指定) n;標本数(今回は10くらいを指定) |
関数の入ったソースはこちら→diff.c 20130605一部変更あり(エラーに対応)
メイン関数のソースファイルの参考
#include <stdio.h> #include <math.h> #include "diff.h" /*可能であれば分割コンパイルを*/ /*関数を記述,xに関する関数fnc*/ double fnc(double); main(){ double kai; /*計算結果*/ double x; /*関数の変数*/ double x0=0.0; /*始点*/ double x1=1.0; /*終点*/ int n=10; /*標本数*/ kai=diff(fnc, x, x0, x1, n); printf("x0= %f\n", x0); printf("x1= %f\n", x1); printf("n= %d\n", n); printf("x0= %f\n", x0); printf("x~2/2= %f\n", kai); } double fnc(double x){ return 0.5*x*x; } |
もし分割コンパイルをするためにヘッダファイルが必要であれば,diff.hを利用して下さい.
課題2 以下の関数を組み込み,数値積分を行ってみよう.
f(x) = exp(-x*x)
これについて,解析解,プログラム作成,関数電卓による解を比較してみて下さい.
比較した結果と考察をソースファイルのコメントに記述すること
関数の引数について double integral(double fnc(double), double a, double b, unsigned int n, double se) fnc(double型の引数);積分しようとする関数 a;積分の下限 b;積分の上限 n;初期分割数(今回は4くらいを指定) se;相対許容誤差(今回は0.00001くらいを指定) |
関数の入ったソースはこちら→integral.c
メイン関数のソースファイルの参考
#include <stdio.h> #include <math.h> #include "integral.h" /*可能であれば分割コンパイルを*/ double fnc(double x){ return exp(-x*x); } main(){ double kai; /*計算結果*/ double x; /*関数の変数*/ double a=0.0; /*下限*/ double b=1.0; /*上限*/ int n=4; /*初期分割数*/ double se=0.00001; /*相対許容誤差*/ kai=integral(fnc, a, b, n, se); printf("a= %f\n", a); printf("b= %f\n", b); printf("n= %d\n", n); printf("se= %f\n", se); printf("exp(-x*x)= %f\n", kai); } |
もし分割コンパイルをするためにヘッダファイルが必要であれば,integral.hを利用して下さい.