数値解析 課題3 ( 12月7日出題 )

課題

  1. 微分方程式
    $y'=f(x,y)$,  $y(x_0) = y_0$
    の、区間 $x_0 \leqq x \leqq a$ における数値解を以下の設定で計算するプログラムを作成せよ。
    1. クッタの 3/8 公式を用いる。
    2. $f(x,y)$ は  double f(double x, double y)   のように関数宣言して用いる。
    3. 区間 $x_0 \leqq x \leqq a$ 全体の分割数 $N$ を設定し、 $x$ の刻み幅は $\dps{h=\frac{a-x_0}{N}}$ とする。
  2. 微分方程式
    $y'=y \times \cos(x)$,  $y(0)=1$
    に対して、区間 $0 \leqq x \leqq 1$, 分割数 $N=8$, $16$, $32$, $64$ で (1) のプログラムを実行し、 厳密解  $y(x)=e^{\sin(x)}$  と比較して動作確認せよ。
  3. 微分方程式
    $y'=\cos(x) \times \sin(y)$,  $y(0)=1$
    の解 $y(x)$ の、$x=1$ での値 $y(1)$ を、小数点以下10桁まで推定せよ。

注意

  • プログラムを共同製作した場合はその旨を必ず明記すること。
  • レポートには以下の項目を含めること :
    • 計算内容
    • プログラムリスト
    • 実行結果 ( 出力を全て載せるのではなく、適切にまとめること。)
    • 考察

提出方法

  • メールにて shiota@is.kochi-u.ac.jp 宛て。
  • 件名は [自分の学籍番号] 数値解析課題3
  • テキストでも、WORD, PDF 等のドキュメントでも可。

提出期限

  • 12月21日(水) 10:20
  • 原則として締め切り厳守

課題プリント ( このページと同じ内容の pdf です。)

今回の課題のヒント

 今回の課題のプログラムは、たとえばこんな感じに書けばできます。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double f(double x, double y){
  return $f(x, y)$ の式 ;
}

int main( void ){
  変数宣言
  $x_0$, $a$, $N$, $h$ 等を設定
  $x$, $y$ の初期化
  for(...){
    $f(x,y)$, $\hat y$, $\hat f$, $\tilde y$, $\tilde f$, $\bar y$, $\bar f$ をこの順番に計算
    $x$, $y$ を更新
  }
  $y$ を出力
  return 0;
}