微分方程式 モデリングとシミュレーション

Similar documents
Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

( 慣性抵抗 ) 速度の 2 乗に比例流体中を進む物体は前面にある流体を押しのけて進む. 物 aaa 体の後面には流体が付き従う ( 渦を巻いて ). 前面にある速度 0 の流体が後面に移動して速度 vとなったと考えてよい. この流体の質量は単位時間内に物体が押しのける体積に比例するので,v に比例

JAVA とテンプレート

プログラミング基礎I(再)

JavaプログラミングⅠ

パソコンシミュレータの現状

文字列操作と正規表現

JavaプログラミングⅠ

DVIOUT-SS_Ma

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

微分方程式による現象記述と解きかた

基本情報STEP UP演習Java対策

Sort-of-List-Map(A)

CollectionsとLambda式

2014計算機実験1_1

Javaによるアルゴリズムとデータ構造

31 33

スライド 1

PowerPoint プレゼンテーション

Microsoft PowerPoint ppt

第二回独習 Java ゼミ 第二章クラスとメソッド 2.1 メソッドの構造 2.2 静的メソッドと静的変数の概要 2.3 インスタンスメソッドとインスタンス変数の概要 2.4 Integerクラス 2006/04/19 神津健太

Prog1_6th

2004/11/23 オブジェクト指向プログラミング - モデル図とシーケンス図の表現方法 - オブジェクト指向プログラミング (OOP:ObjectOrientedPrograming) オブジェクト指向プログラミング言語 (OOPL) Java,C++,Delphi(Pascal),Visual

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

Javaプログラムの実行手順

Program Design (プログラム設計)

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - prog04.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - 計算機言語 第7回.ppt

PowerPoint Presentation

JavaプログラミングⅠ

グラフの探索 JAVA での実装

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

< F2D A838B838D96402E6A7464>

デジタル表現論・第4回

問題1 以下に示すプログラムは、次の処理をするプログラムである

JAVA入門

Microsoft PowerPoint - lec06 [互換モード]

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

メソッドのまとめ

Microsoft PowerPoint - Pro110111

プログラミング入門1

Prog2_9th

Microsoft Word - 微分入門.doc

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

2

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

< F2D82518E9F8AD CC834F CC8CFC82AB82C68D4C>

Microsoft PowerPoint - prog08.ppt

PowerPoint Presentation

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

2

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

ALG ppt

Java (7) Lesson = (1) 1 m 3 /s m 2 5 m 2 4 m 2 1 m 3 m 1 m 0.5 m 3 /ms 0.3 m 3 /ms 0.6 m 3 /ms 1 1 3

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一

Prog1_10th

Slide 1

ALG ppt

0226_ぱどMD表1-ol前

OpenFOAM(R) ソースコード入門 pt1 熱伝導方程式の解法から有限体積法の実装について考える 前編 : 有限体積法の基礎確認 2013/11/17 オープンCAE 富山富山県立大学中川慎二

untitled

Prog1_15th

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

問題1 以下に示すプログラムは、次の処理をするプログラムである

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

微分積分 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 初版 1 刷発行時のものです.

NumericalProg09

板バネの元は固定にします x[0] は常に0です : > x[0]:=t->0; (1.2) 初期値の設定をします 以降 for 文処理のため 空集合を生成しておきます : > init:={}: 30 番目 ( 端 ) 以外については 初期高さおよび初速は全て 0 にします 初期高さを x[j]

ギリシャ文字の読み方を教えてください

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

Microsoft Word - CompA-Ex doc

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

スライド 1

Microsoft PowerPoint - prog08.ppt

(Basic Theory of Information Processing) 1

人工知能入門

< F2D82518E9F8AD CC95BD8D7388DA93AE2E6A7464>

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 2 回オブジェクト指向 テクノロジックアート 瀬 嘉秀

喨微勃挹稉弑

デジタル表現論・第6回

2. データ構造ヒープに保存するデータは 番号付けられて保存される 従って リスト L として保存することとする 3. アルゴリズム 3.1. 要素の追加新しい要素の追加は リストの終端に置くことで開始する つまり 最下層の一番右 または新たに最下層を生成してその一番左となる この後 この要素を正し

新・明解Javaで学ぶアルゴリズムとデータ構造

明解Javaによるアルゴリズムとデータ構造

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

プログラミング入門1

Java言語 第1回

Microsoft PowerPoint - chap10_OOP.ppt

< F2D A839382CC906A2E6A7464>

論理と計算(2)

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

K227 Java 2

Microsoft Word - keisankigairon.ch doc

Transcription:

1 微分方程式モデリングとシミュレーション 2018 年度

2 質点の運動のモデル化 粒子と粒子に働く力 粒子の運動 粒子の位置の時間変化 粒子の位置の変化の割合 速度 速度の変化の割合 加速度 力と加速度の結び付け Newtonの運動方程式 : 微分方程式 解は 時間の関数としての位置

3 Newton の運動方程式 質点の運動は Newton の運動方程式で記述される 加速度は力に比例する 2 d x m = F 2 d t

4 微分 独立変数 tt とその従属変数 xx(tt) 一階微分 d x xt ( + h) xt () = lim h 0 h 変数 tt が微小に増加した際の xx の増分の割合 : 一定とは限らない 関数 xx(tt) の時間に関する変化率 (tt, xx) 空間内の関数 xx(tt) の傾き

5 二階微分 dx vt () = d v vt ( + h) vt () = lim h 0 h 関数 xx(tt) の変化率 vv(tt) の変化 関数 xx(tt) の曲り具合 ( 上に凸 下に凸など )

6 微分方程式 関数の変化を記述することで それに従う関数を求める 例 1: 変化の割合が一定 dx a = x() t = at + b 例 2: 変化の割合が関数自身に依存 dx ax = x( t) = b exp( at) 微分方程式で定まらない定数 ( 積分定数 )bbが現れる

7 二階微分方程式 独立変数による二階微分を含む方程式 例 : 2 d x 2 = ω + 2 = ω x xt ( ) acos( t) bsin( t) ω 微分方程式で定まらない定数 ( 積分定数 ) aa と bb が現れる

8 二階微分方程式を一階連立微分方程式へ vv tt = dxx(tt)/t を導入 2 d x 2 2 = ω x dv dx 2 = ω x = v 位置 xx の時間変化は vv で定まる

9 数値積分の観点で微分方程式を 見ると 微分方程式を解くことを 積分 と呼ぶ 微分方程式は 左辺 ( 導関数 ) が右辺で与えられる と読む 導関数 微小変化量 直後の関数の変化値 dy = f ( t, y)

10 微分方程式を数値的に解くとい うこと 微分方程式 dx = dx f ( xt, ) ( 2 ) ( + t) = xt () + + t O ( t) x t ( 2 ) ( ) t O ( t) = xt () + f xt, + ある tt での xx(tt) と ff(xx, tt) が分かれば xx(xx + Δtt) の値を近似的 OO( Δtt 2 ) に得ることができる

11 Euler 法 最も簡単な微分方程式の数値解法 一元一階微分方程式の場合 dy = (, ) f t y 近似的な時間発展式 ( t+ h) y( t) + t, ( t) y h f y ( )

12 Euler 法 nn 元一階微分方程式の場合 dyi = ( t, y) 近似的な時間発展式 y f i ( ) ( t+ h) y ( t) + h f t, y( t) i i i 右辺は時刻 tt における量だけで表現されている

13 Java を用いた微分方程式の数 値解法 数値解法 :Euler 法または Runge- Kutta 法 微分方程式に依存しない一般的手法 微分方程式をインターフェイスのインスタンスとして渡す C/C++ の関数ポインタに相当

14 微分方程式を表すインターフェ イス 独立変数 tt と従属変数 yy ii tt 関数インターフェイスであること示す注釈 @FunctionalInterface Public interface DifferentialEquation { public double[] rhs(double t, double y[]); } 引数の値から 導関数の値を返す関数

15 Euler 法によって数値積分を行 うクラス 微分方程式を引数で渡す h だけ独立変数を進める public class Euler { public static double[] euler(double t,double y[], double h, DifferentialEquation eq){ } } int n = y.length; double yt[]=new double[n]; double dy[] = eq.rhs(t, y); for(int i=0; i<n ; i++){ yt[i] = y[i] + h * dy[i]; } return yt; y ( ) ( t+ h) = y ( t) + h f t, y( t) i i i 微分方程式独立変数 tt と従属変数 yy から d yy/t を求める

16 Java で微分方程式を定義する DifferentialEquation は Interface インスタンスを生成できない 二つの方法 生成時に抽象メソッドを定義する ラムダ式を利用する

17 関数の定義 : 一様重力の例抽象クラスの実装を使って Int n=2; DifferentialEquation eq = new DifferentialEquation(){ // メソッドの実装 public double[] rhs(double t, double[] y){ double dy = new double[n]; dx dy[0] = y[1];//dx/ = v dy[1] = g; // dv/ dv return dy; = g };

18 関数の定義 : 一様重力の例 ラムダ式を使うと Int n=2; DifferentialEquation eq = (double t, double y[]) -> { double dy = new double[n]; dy[0] = y[1];//dx/ dy[1] = g; // dv/ return dy; }; dx dv = = v g 各微分方程式をどのインデクスに割り当てるかは定めはない

19 Java における λ 式 関数を表すインターフェースの実装を簡潔に表す方法 関数そのもの ( 後で引数に値が入り評価される ) を表現する 関数を変数として扱える ( 引数並び ) -> { 関数の実体 }; Java8 以降で利用可能になった リストなどの要素の処理でも利用

20 import java.util.function. DoubleFunction; public class LambdaMain { public static double generalsum( double data[], DoubleFunction<Double> op){ double sum=0.; for(double d:data){ sum += op.apply(d); データに対する具体的演算は未定義 } return sum; } } public static void main(string[] args) { double data[]={1.,5.,8.,11.}; // 二乗の和を計算 double sum = generalsum(data, d->d*d); System.out.println(sum); } データに対する二乗を定義

21 基本的な関数の定義例 java.util.function に定義済み DoubleFunction<R> double 型の一変数に対して R 型の値を返す UnaryOperator<T> T 型の一変数に対して T 型の値を返す Function<T,R> T 型の一変数に対して R 型の値を返す Predicate<T> T 型の一変数に対して boolean 型を返す

22 拡張された for ループ T array[]; // array の各要素に対して処理 for (T t : array ){ } List<T> list; for ( T t : list ){ }

23 ラムダ式の活用 List などの処理 List<Integer> list; // 要素を印刷 list.stream().foreachordered( x -> { int i = list.indexof(x); System.out.println(i + ":" + x); } );

24 List<Integer> list; // 要素の和 int sum = list.stream().reduce(0, (acc,item)->acc+item); // 要素の最大値 int max = list.stream().reduce(list.get(0), (acc,item)->math.max(acc,item); // 正の要素の数 long count = list.stream().filter(x -> (x > 0)).count();