1 / 26

情報基礎実習 I ( 第4回)

情報基礎実習 I ( 第4回). 木 曜4・5限 担当 :北川 晃. 例題:4次式の数表. 4 次式 の値を, 0 から 0.2 きざみで 5.0 までの x に対して計算し, 順に書き出すプログラムを作れ.. Dim y As Single For x As Single = 0.0 To 5.0 Step 0.2 y = 1.5 * x ^ 4 - 0.8 * x ^ 3 _ + 6.2 * x ^ 2 + 0.5 * x + 2.1 Console.WriteLine ("{0,8},{1,16}", x, y) Next.

thad
Download Presentation

情報基礎実習 I ( 第4回)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 情報基礎実習I(第4回) 木曜4・5限 担当:北川 晃

  2. 例題:4次式の数表 4次式 の値を,0から0.2きざみで5.0までのxに対して計算し, 順に書き出すプログラムを作れ. Dim y As Single For x As Single = 0.0 To 5.0 Step 0.2 y = 1.5 * x ^ 4 - 0.8 * x ^ 3 _ + 6.2 * x ^ 2 + 0.5 * x + 2.1 Console.WriteLine("{0,8},{1,16}", x, y) Next

  3. 例題:4次式の数表(改) 4次式 について,      の値を,0から0.2きざみで5.0までの xに対して計算し,順に書き出すプログラムを作れ. xをMath.Sqrt(x)で置き換え Dim y As Single For x As Single = 0.0 To 5.0 Step 0.2 y = 1.5 * x ^ 4 - 0.8 * x ^ 3 _ + 6.2 * x ^ 2 + 0.5 * x + 2.1 Console.WriteLine("{0,8},{1,16}", x, y) Next 書き換えが煩雑!!関数として定義できないか?

  4. プロシージャとは • ある一連の処理コードに名前をつけて登録した • 下請けプログラムを,プロシージャという. • 従来の言語では,「関数」あるいは • 「サブルーチン」と呼ぶ処理に該当する. • Functionプロシージャが関数にあたり,呼び出した • コードブロックに,必ず一つの値を返す. • Subプロシージャがサブルーチンにあたり, • 呼び出したコードブロックに値を返さない. • プロシージャ間のデータの引き渡しは,「引数」で行う.

  5. 関数の定義の書式 Sub Main() … y1 = プロシージャ名(引数リスト) … End Sub Functionプロシージャ名(引数リスト) [As 戻り値の型] 文ブロック Return戻り値 または プロシージャ名= 戻り値 End Function 仮引数,「値渡し」と 「参照渡し」がある

  6. 関数の定義の仕方の例(その1) 一種の副プログラムであるから, 主プログラムとは別に書く. (主プログラム) Sub Main() … y1=f(x) … End Sub Functionf(ByVal x As Single) As Single Dim y As Single y = x ^ 2 + 2 * x Return y End Function 組み込み関数のように 呼び出せる 引数を値渡しの単精度実数型として宣言 戻り値の型の宣言 関数の定義 主プログラムへ返す値(戻り値) (副プログラム)

  7. 関数の定義の仕方の例(その2) Sub Main() … y1=f(x) … End Sub Function f(x) As Single Dim y As Single If x < 0 Then y = 0 Else y=1 End If Return y End Function 組み込み関数のように 呼び出せる 省略した場合は 値渡し (主プログラム) 戻り値の型の宣言 関数の定義 ステップ 関数 主プログラムへ返す値(戻り値) (副プログラム)

  8. 例題:4次関数の定義 4次式 について,      の値を,0から0.2きざみで5.0までの xに対して計算し,順に書き出すプログラムを作れ. • 考え方: • 実数xを引数とする実数型の関数 • f(x)を定義する. • xを繰り返し変化させながら,y=f(√x)の値を • 順に書き出す.

  9. 4次関数の定義:プログラム例 Sub Main() Dim y As Single For x As Single = 0.0 To 5.0 Step 0.2 y = f(Math.Sqrt(x)) Console.WriteLine("{0,8},{1,16}", x, y) Next End Sub Function f(x) As Single Dim y As Single y = 1.5 * x ^ 4 - 0.8 * x ^ 3 _ + 6.2 * x ^ 2 + 0.5 * x + 2.1 Return y End Function

  10. 4次関数の定義:出力例

  11. プログラミング演習 • 非負の整数 に対する階乗   を計算する • 関数を定義し,これを用いることで級数 • の値を計算せよ. • 考え方: • 整数nを引数とする実数型の関数 • factorial(n)を定義する. • 与級数は有限の値に収束する.有限項で切っても, • 十分よい近似値が得られる.

  12. 級数の計算:プログラム例 Sub Main() Dim sum As Single = 0 For i As Integer = 0 To 100 sum = sum + 1 / factorial(i) Next Console.WriteLine("級数の値は{0}", sum) End Sub Function factorial(n) As Single Dim p As Single = 1 For i As Integer = 1 To n p = p * i Next Return p End Function 有限で切る項を 十分大きく取る 関数の呼び出し 大きなnに対して 計算できるように, 実数型で定義 関数として返す値

  13. 級数の計算:出力例

  14. 例題:方程式の根 方程式は,区間[0,2]において ただ1つ根があることがわかっている.その根を 2分法によって求めるプログラムを作れ. • 2分法 両端と中点の 符号を調べる

  15. 方程式の根:考え方 • 区間 の中点を計算する. • 区間とにおいて, • ならば解は左の区間 • ならば解は右の区間 • 解がある方の区間において新たな中点を計算し, • 判定を行う. • となるまで繰り返し,そのときのを • 解とする.

  16. 方程式の根:プログラム例(主プログラム) Dim eps, x1, x2, xm As Single eps= 10 ^ -6 x1 = 0 x2 = 2 While x2 - x1 > eps xm = (x1 + x2) / 2 If f(x1) * f(xm) > 0 Then x1 = xm Else x2 = xm End If End While Console.WriteLine("解はx={0}", xm) 単精度実数型の 精度の限界 端の値を入力 条件が真の間 は繰り返す 中点の計算 解が中点の左右 どちらにあるか判定 端の点を再定義 解の書き出し

  17. 方程式の根:プログラム例(関数) Function f(x) As Single Dim y As Single y = x ^ 3 - x - 1 Return y End Function 関数として返す値

  18. 級数の計算:出力例

  19. 例題:数値積分(台形公式) 次の関数をからまで積分する プログラムを作れ. 数値積分には台形公式を用いる.

  20. 数値積分(台形公式):考え方 台形で近似する

  21. 数値積分(台形公式):プログラム例 Sub Main() Dim h, a, b, S As Single Dim n As Integer= 65536 a = 0 : b = 2 : h = (b - a) / n S = 0 For i = 1 To n S = S + (f(a + (i - 1) * h) + f(a + i * h)) * h / 2 Next Console.WriteLine(“積分値はS={0}", S) End Sub Function f(x) As Single Dim y As Single y = Math.Sqrt(4 - x ^ 2) Return y End Function 区間の分割数 刻み幅 複数の文を改行せずに 続ける表記法

  22. 数値積分(台形公式):出力例

  23. 数値積分(台形公式):計算結果の精度 分割の数と計算結果 精度が悪く なっている!? 有効数字の桁数が上げられないか?

  24. 数値積分(台形公式):プログラム例 Sub Main() Dim h, a, b, S As Double Dim n As Ineger = 65536 a = 0 : b = 2 : h = (b - a) / n S = 0 For i = 1 To n S = S + (f(a + (i - 1) * h) + f(a + i * h)) * h / 2 Next Console.WriteLine("積分値はS={0}", S) End Sub Function f(x) As Double Dim y As Double y = Math.Sqrt(4 - x ^ 2) Return y End Function 倍精度実数型 倍精度実数型 倍精度実数型 倍精度実数型と単精度実数型を 混在させると,精度は単精度になる

  25. 数値積分(台形公式):倍精度での計算結果 分割の数と計算結果 分割数を大きくするほど,誤差が減っていく

  26. プログラミング演習 • 方程式       は      の範囲内に解が • ひとつ存在することが知られている. • 二分法を用いて,解を求めるプログラムを作成せよ. • 定積分             を台形公式により • 数値積分するプログラムを作成し, • 得られた値を解析的に解いた値と比較してみよ. (0.7390852)

More Related