情報基礎II第五回目

Download Report

Transcript 情報基礎II第五回目

情報基礎II
(第5回)
月曜4限
担当:北川 晃
プログラミング演習
ニュートン法により,方程式
根を計算し表示するプログラムを作れ.
•ニュートン法
接線と 軸の交点を
求め,次の接線を引く.
ニュートン法:考え方
•
•
を通る接線:
軸との交点
この操作を一定の
精度まで繰り返す.
:
ニュートン法:アルゴリズム
•
x0 , x  1,   106 を定義する
•
以下の操作を繰り返し行う
 x0  x を代入
f  x0 
 x  x0 
により,次の座標を計算
f   x0 
 x, f  x  の値を書き出す
x  x0

  となるまで繰り返す
x0
• 最終的な x を書き出す
• 関数プロシージャで, f  x  , f   x  を定義する
ニュートン法:出力例
二分法よりも
収束が速い
ニュートン法:プログラム例
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))
配列の引数には,
整数型の式,関数
なども許される
配列の宣言
二次元,整数型
の配列の宣言
b(0,0)~b(0,8)
b(1,0)~b(1,8)
…
b(8,0)~b(8,8)
Dim a(10) As Single
Dim b(8,8) As Integer
Dim c(3,5) As String
一次元,
単精度整数型
の配列の宣言
a(0)~a(10)
• 配列の番号は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
例題:九九の表
九九の表を書き出すプログラムを作れ.
1
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
九九の表:プログラム例
行ごとに
改行する
行列の積:プログラム例
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