演習1

Similar documents
演習2

sinfI2005_VBA.doc

PowerPoint プレゼンテーション

Microsoft PowerPoint - info1-8.ppt [互換モード]

PowerPoint プレゼンテーション

プログラミング基礎

kiso2-06.key

hirayama

Microsoft PowerPoint - 講義10改.pptx

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

FORTRAN文法の基礎

Microsoft PowerPoint - prog08.ppt

Microsoft PowerPoint - VBA解説1.ppt [互換モード]

Microsoft PowerPoint - program.ppt [互換モード]

講習No.8

MS-ExcelVBA 基礎 (Visual Basic for Application)

演習1: 演習準備

スライド 1

プログラミング実習I

情報処理概論(第二日目)

数値計算

Microsoft Word - Fortran2011.doc

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

Microsoft Word - fortran.docx

(Basic Theory of Information Processing) Fortran Fortan Fortan Fortan 1

講習No.1

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

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

物質工学科 田中晋

Microsoft PowerPoint - CproNt02.ppt [互換モード]

解答編 第 7 章実数型の計算と標準数学関数 演習問題 7.1 文法事項 1 ) 暗黙の型変換とは何か答えなさい 代入演算子 (=) や算術演算子 (+,-,*,/,%) では 2 つの演算項のデータ型が揃っている事が必要です 2 つの演算項のデータ型が異なる場合 可能ならば 演算項のデータ型を変換

Taro-数値計算の誤差(公開版)

Microsoft Word - VBA基礎(3).docx

C 2 2.1? 3x 2 + 2x + 5 = 0 (1) 1

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Microsoft PowerPoint _4_26_f95a_usui.pptx

数値計算

Microsoft PowerPoint - KHPCSS pptx

Microsoft PowerPoint _5_8_f95a_usui.pptx

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

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

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

Microsoft Word - DF-Salford解説09.doc

< 中略 > 24 0 NNE 次に 指定した日時の時間降水量と気温を 観測地点の一覧表に載っているすべての地点について出力するプログラムを作成してみます 観測地点の一覧表は index.txt というファイルで与えられています このファイルを読みこむためのサブルーチンが AMD

演習準備

Microsoft PowerPoint - f95_0426_final.pptx

応用数学特論.dvi

スライド 1

< 中略 > 24 0 NNE 次に 指定した日時の時間降水量と気温を 観測地点の一覧表に載っているすべての地点について出力するプログラムを作成してみます 観測地点の一覧表は index.txt というファイルで与えられています このファイルを読みこむためのサブルーチンが AMD


PowerPoint プレゼンテーション

memo

Microsoft Word - 3new.doc

第8回講義(2016年12月6日)

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

UNIX 初級講習会 (第一日目)

Microsoft Word - 03-数値計算の基礎.docx

Microsoft PowerPoint - 4.pptx

Taro-数値計算の基礎Ⅱ(公開版)

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

プログラミング実習I

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(VBA) サンプル問題 知識科目 第 1 問 ( 知

PowerPoint プレゼンテーション

Microsoft PowerPoint - info1-6.ppt [互換モード]

<4D F736F F F696E74202D D F95C097F D834F E F93FC96E5284D F96E291E85F8DE391E52E >

フローチャートの書き方

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

プログラミングA

Microsoft PowerPoint - 09.pptx

デジタル表現論・第4回

Microsoft PowerPoint - 演習2:MPI初歩.pptx

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

Microsoft PowerPoint _MPI-01.pptx

ExcelVBA

Microsoft PowerPoint - prog13.ppt

プログラミング基礎

Microsoft PowerPoint ppt

Microsoft PowerPoint - 3.ppt [互換モード]

all.dvi

C 言語第 7 回 掛け算 (multiply number) ìz1 = x1 + iy1 í îz = x + iy 割り算 (devide number) ( )( ) ( ) Þ z z = x + iy x + iy = x x - y y + i y x + x y

計算機プログラミング

Excel ではじめる数値解析 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 初版 1 刷発行時のものです.

PowerPoint プレゼンテーション

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

JavaプログラミングⅠ

* ライブラリ関数 islower(),toupper() を使ったプログラム 1 /* 2 Program : trupper.c 3 Student-ID : K 4 Author : TOUME, Kouta 5 Comments : Used Library function i

gengo1-2

スライド 1

情報基礎A

方程式の解法

Microsoft PowerPoint - 3.pptx

JavaプログラミングⅠ

Fortran 勉強会 第 5 回 辻野智紀

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

PowerPoint Presentation

Transcription:

神戸市立工業高等専門学校電気工学科 / 電子工学科専門科目 数値解析 2019.5.10 演習 1 山浦剛 (tyamaura@riken.jp) 講義資料ページ http://r-ccs-climate.riken.jp/members/yamaura/numerical_analysis.html

Fortran とは? Fortran(= FORmula TRANslation ) は 1950 年代に誕生した世界初の高級プログラミング言語 数値計算プログラム作成に適している 固定形式 : FORTRAN 66, 77 FORTRAN 自由形式 : Fortran 90/95, 2003, 2008 Fortran Fortran がなぜ数値計算プログラム作成に適しているか? 設計思想として 数値計算用プログラミング言語に特化している 組込関数や複素数 配列操作など 数値計算に便利な機能が予め組み込まれている 他の高級言語 (C/C++/Java など ) と比較して 数値計算を簡潔に記述することができ 一般的にパフォーマンスに優れている ( 言語仕様上 コンパイラにとって最適化しやすい ) LAPACK 等 優れた数値計算ライブラリが豊富に利用可能 移植性に優れ PC からスーパーコンピュータまで様々な環境で利用可能 プログラミングにおいての誤りを犯しにくい

Fortran プログラムの基本構造 大文字小文字の区別はない コメントは! 以降 文の終了を宣言しない (; などをつけない ) 文を継続するには 行末に & をつける プログラムファイルの拡張子は f90 例 : sample01-1_hello.f90 Fortran コンパイラ (gfortran) でコンパイル 例 : gfortran sample01-1_hello.f90 デフォルトの出力ファイル名は a.out 例 :./a.out -o オプションで出力ファイル名の変更も可 基本形 プログラム名 型宣言 処理を記述する program [ プログラム名 ] implicit none [ 型宣言 ] [ 処理 ] end program

Fortran の型宣言と演算 よく使う変数の型 単精度整数型 : integer 単精度実数型 : real または real(4) 倍精度実数型 : double precision または real(8) 単精度複素数型 : complex 定数 : ( 数の型 ), parameter 他にも文字列型や論理型などがある 宣言の例 integer :: i, j, k real(8) :: x, y, z real(8), parameter :: pi = 3.1415926535897932 演算 代入 : xx=yy 加算 : xx+yy 減算 : xx yy 乗算 : xx yy 除算 : xx/yy べき乗 : xx yy 組み込み関数 三角関数 : sin(xx), cos(xx), atan(xx), sinh(xx) 対数関数 : log(xx), ln(xx) 指数関数 : exp(xx) 絶対値関数 : abs(xx)

Fortran の論理構造 条件分岐 論理値を使って分岐を発生させる 例 : if/else 文による絶対値の求め方 a = -5 if( a < 0 ) then b = -a else b = a 反復計算 例 : x に 1~100 までの和を代入する do i = 1, 100 x = x + i 出力 (write 文 ) 引数 1: 出力先 ( 標準出力 =*) 引数 2: フォーマット ( 自動選択 =*) write(*,*) hello write(*,*) a=,a

Fortran の型変換 型変換 Fortranでは castは自動で行われる 異なる型の演算対象が含まれる演算では 強い方の型 ( 種別も含む ) が使用される 整数 : 弱 実数 : 中 複素数 : 強 整数 + 実数 実数 複素数 + 実数 複素数 演算対象が実数もしくは複素数のみで構成される場合 高い方の精度が採用される 単精度実数 + 倍精度実数 倍精度実数 倍精度実数 + 単精度複素数 倍精度複素数 整数の除算では切り捨てが発生する 10 / 3 3 3 / 2 1

復習 : 2 分法 2 分法のアルゴリズム 1. ff aa < 0, ff bb > 0 となる初期値 aa, bb を決める 2. cc aa+bb 2, dd aa bb 2 d < εε ならば 3 に移る を計算 d εε, ff cc < 0 ならば aa に cc を代入し (aa cc) 2 を繰り返す d εε, ff cc > 0 ならば bb に cc を代入し (bb cc) 2 を繰り返す 3. cc を数値解とする program bisection_method implicit none integer :: n real(8) :: a, b, c, fc a = 1.0 b = 2.0 do n = 1, 40 c = ( a + b ) / 2.0 fc = c**3-5.0 if( fc < 0.0 ) then a = c else b = c write(*,*) 'step number =',n,'; c=',c end program

復習 : ニュートン法 ニュートン法のアルゴリズム 1. 初期値 xx 0 と許容する誤差 εε を決める 2. cc xx ff(xx) ff (xx) を計算 cc xx cc < εε ならば 3 に移り そうでなければ xx に cc を代入し 2 を繰り返す 3. cc を数値解とする program newton_method implicit none integer :: n real(8) :: x, fx, dfx x = 2.0 do n = 1, 10 fx = x**3-5.0 dfx = 3.0 * x**2 x = x - fx / dfx write(*,*) 'step number =',n,'; x=',x end program

課題 1. 2 分法のサンプルプログラムを参考に 誤差 εε = 10 6 とし 誤差未満まで計算できたときに終了するように修正せよ ( ヒント : do ループは exit 文で抜けることができる ) 2. ニュートン法のサンプルプログラムを参考に 誤差 εε = 10 6 とし 誤差未満まで計算できたときに終了するように修正せよ 3. 次の式の根について ニュートン法を用いて計算するプログラムを作成せよ ただし 誤差 εε = 10 6 として 誤差未満まで計算できたときに終了させること x の初期値を 2 とする ff xx = exp xx 2 sin xx 4. 次の式の根について 2 分法とニュートン法を用いて計算するプログラムを作成せよ ただし 2 分法での誤差はεε = 10 2, ニュートン法での誤差はεε = 10 6 として 誤差未満まで計算できた dd(arctan xx ) ときに終了させること xの初期値を-4, 4とする ( ヒント : = 1 dddd 1+xx 2) ff xx = arctan(xx) 1 2

提出方法 〆切 : 2019/05/16( 木 ) メールにプログラムを添付 主題 : 演習 1 レポート ( 学籍番号 ) 宛先 : tyamaura@riken.jp 添付 : 学籍番号 _ 課題番号.f90 を 4 ファイル 課題 1-1: r???????_kadai01-1.f90 課題 1-2: r???????_kadai01-2.f90 課題 1-3: r???????_kadai01-3.f90 課題 1-4: r???????_kadai01-4.f90

課題 1: 解答例 ループの終了条件を意識 誤差 ε 1.0E-6 (=0.000001) program bisection_method implicit none! definition integer :: n real(8) :: a, b, c, d, fc real(8) :: eps! ----------! initial value a = 1.0 b = 2.0 eps = 1.0e-6! bisection method loop do n = 1, 40 c = ( a + b ) / 2.0 d = abs( a - b ) / 2.0 fc = c**3-5.0 if( fc < 0.0 ) then a = c else b = c! output write(*,*) 'step number =',n,'; c=',c if( d < eps ) then exit end program step number = 1 ; c= 1.5000000000000000 step number = 2 ; c= 1.7500000000000000 step number = 3 ; c= 1.6250000000000000 step number = 4 ; c= 1.6875000000000000 step number = 5 ; c= 1.7187500000000000 step number = 6 ; c= 1.7031250000000000 step number = 7 ; c= 1.7109375000000000 step number = 8 ; c= 1.7070312500000000 step number = 9 ; c= 1.7089843750000000 step number = 10 ; c= 1.7099609375000000 step number = 11 ; c= 1.7104492187500000 step number = 12 ; c= 1.7102050781250000 step number = 13 ; c= 1.7100830078125000 step number = 14 ; c= 1.7100219726562500 step number = 15 ; c= 1.7099914550781250 step number = 16 ; c= 1.7099761962890625 step number = 17 ; c= 1.7099685668945312 step number = 18 ; c= 1.7099723815917969 step number = 19 ; c= 1.7099742889404297 step number = 20 ; c= 1.7099752426147461

program newton_method implicit none! definition integer :: n real(8) :: x, nx, fx, dfx real(8) :: eps! ---------- step number = 1 ; x= 1.7500000000000000 step number = 2 ; x= 1.7108843537414966 step number = 3 ; x= 1.7099764289169748 step number = 4 ; x= 1.7099759466768329 課題 2: 解答例 ループの終了条件を意識 誤差 ε 1.0E-6 (=0.000001) 鍵となる変数 (x) の扱いに注意! initial value x = 2.0 eps = 1.0e-6! newton method loop do n = 1, 10 fx = x**3-5.0 dfx = 3.0 * x**2 nx = x - fx / dfx! output write(*,*) 'step number =',n,'; x=',nx if( abs( ( nx - x ) / nx ) < eps ) then exit else x = nx end program

program newton_method implicit none! definition integer :: n real(8) :: x, nx, fx, dfx real(8) :: eps! ---------- step number = 1 ; x= 4.5984912033841550 step number = 2 ; x= -4.1433130767656721 step number = 3 ; x= -2.5799970784333630 step number = 4 ; x= -3.2057853844373749 step number = 5 ; x= -3.1415530212568368 step number = 6 ; x= -3.1416443599666954 step number = 7 ; x= -3.1416443599747410 課題 3: 解答例 式が異なるだけで 課題 2 同様! initial value x = 2.0 eps = 1.0e-6! newton method loop do n = 1, 10 fx = exp(-x**2) sin(x) dfx = - 2.0 * x * exp(-x**2) - cos(x) nx = x - fx / dfx! output write(*,*) 'step number =',n,'; x=',nx if( abs( ( nx - x ) / nx ) < eps ) then exit else x = nx end program

課題 4: 解答例 式 yy = atan(xx) は ニュートン法で単純に解くと 初期値によっては発散してしまう関数 二分法で力業で解くこともできるが 始めの数回を二分法 その値を初期値としてニュートン法を行う実践的な解き方を学ぶのが目的 program bisection_newton_composite implicit none integer :: n real(8) :: x1, x2, d, x real(8) :: nx, fx, dfx real(8) :: eps1, eps2 x1 = -4.0 x2 = 4.0 eps1 = 1.0e-2 eps2 = 1.0e-6! bisection method loop do n = 1, 100 x = ( x1 + x2 ) / 2.0 d = abs( x1 - x2 ) / 2.0 fx = atan(x) - 0.5 if( fx < 0.0 ) then x1 = x else x2 = x write(*,*) 'bisection: step number =',n,'; x=',x if( d < eps1 ) then exit! newton method loop do n = 1, 100 fx = atan(x) - 0.5 dfx = 1.0 / ( 1.0 + x**2 ) nx = x - fx / dfx write(*,*) 'newton : step number =',n,'; x=',nx if( abs( ( nx - x ) / nx ) < eps2 ) then exit else x = nx end program bisection: step number = 1 ; x= 0.0000000000000000 bisection: step number = 2 ; x= 2.0000000000000000 bisection: step number = 3 ; x= 1.0000000000000000 bisection: step number = 4 ; x= 0.50000000000000000 bisection: step number = 5 ; x= 0.75000000000000000 bisection: step number = 6 ; x= 0.62500000000000000 bisection: step number = 7 ; x= 0.56250000000000000 bisection: step number = 8 ; x= 0.53125000000000000 bisection: step number = 9 ; x= 0.54687500000000000 bisection: step number = 10 ; x= 0.53906250000000000 newton : step number = 1 ; x= 0.54628058648180433 newton : step number = 2 ; x= 0.54630248964194383 newton : step number = 3 ; x= 0.54630248984379048