150 likes | 311 Views
情報基礎 II ( 第 5 回). 月曜4限 担当 :北川 晃. プログラミング演習. ニュートン法により,方程式 根を計算し表示するプログラムを作れ.. ニュートン法. 接線と 軸の交点を 求め,次の接線を引く.. ニュートン法:考え方. を通る接線:. 軸との交点 :. この操作を一定の 精度まで繰り返す.. ニュートン法:アルゴリズム. を定義する 以下の操作を繰り返し行う を代入
E N D
情報基礎II(第5回) 月曜4限 担当:北川 晃
プログラミング演習 ニュートン法により,方程式 根を計算し表示するプログラムを作れ. • ニュートン法 接線と 軸の交点を 求め,次の接線を引く.
ニュートン法:考え方 • を通る接線: • 軸との交点 : この操作を一定の 精度まで繰り返す.
ニュートン法:アルゴリズム • を定義する • 以下の操作を繰り返し行う • を代入 • により,次の座標を計算 • の値を書き出す • となるまで繰り返す • 最終的な を書き出す • 関数プロシージャで, を定義する
ニュートン法:出力例 二分法よりも 収束が速い
ニュートン法:プログラム例 Sub Main() Console.Title= "ニュートン法による求根" Dim x As Single = 1, x0 As Single Dim eps As Single = 10 ^ -6 Do x0 = x x = x0 - f(x0) / df(x0) Console.WriteLine("{0,10}, {1,10}", x, f(x)) Loop Until Math.Abs((x - x0) / x0) < eps Console.WriteLine("解はx={0}", x) End Sub 条件を満たす まで繰り返し
ニュートン法:プログラム例 Function f(x) Dim y As Single y = x - Math.Cos(x) Return y End Function Function df(x) Dim dy As Single dy = 1 + Math.Sin(x) Return dy End Function 導関数の定義 (手で計算して与える)
配列とは? 表を一つの変数のように扱う ベクトル • 一次元の配列: → a(i) • 二次元の配列: → b(i,j) 行列
配列の表記法 配列内の個々のデータ(配列要素)は, 配列名に添え字を付けて表す. • alpha(16) • n(5,1) • p(i,j) • b(i+1) • x(2*n-1) • k(l(m)) 配列の引数には,整数型の式,関数なども許される 配列の宣言 一次元, 単精度整数型 の配列の宣言 a(0)~a(10) Dim a(10) As Single Dim b(8,8) As Integer Dim c(3,5) As String 二次元,整数型の配列の宣言 b(0,0)~b(0,8) b(1,0)~b(1,8) … b(8,0)~b(8,8) • 配列の番号は0から始まる • 使わない要素は0と見なされるだけなので, • 少し余裕を見て大きめに宣言するとよい
配列の操作 • 配列Aの内容をBにコピーする(下限1,上限N). For i As Integer = 1 To n b(i)=a(i) Next • 行列A,Bの和を作ってCに代入する(M行N列とする). For i as Integer = 1 To m For j As Integer = 1 To n c(i,j) = a(i,j) + b(i,j) Next j Next i
例題:九九の表 九九の表を書き出すプログラムを作れ.
九九の表:プログラム例 行ごとに改行する
行列の積:プログラム例 Console.Title = "九九の表" Dim i, j, kuku(9, 9) As Integer For j = 1 To 9 For i = 1 To 9 kuku(i, j) = i * j If i <> 9 Then Console.Write("{0,4}", kuku(i, j)) Else Console.WriteLine("{0,4}", kuku(i, j)) End If Next Next 表の右端で改行する
ベクトルの内積 • ベクトルAとベクトルBの内積を計算する(下限1,上限N). s = 0.0 For i As Integer = 1 To n s = s + a(i) * b(i) Next
行列の積の成分計算 • 行列Aと行列Bの積を計算する(下限1,上限N). 第(i,j)成分は・・・ s = 0.0 For k As Integer = 1 To N s = s+a(i,k)*b(k,j) Next k