応用情報技術者 平成28年秋期 午前問2

応用情報技術者平成28年秋期 午前問2

[問題文]

0≦x≦1の範囲で単調に増加する連続関数f(x)が f(0)≦0≦f(1) を満たすときに,

区間内で f(x)=0 であるxの値を近似的に求めるアルゴリズムにおいて,

(2)は何回実行されるか。

 

[アルゴリズム]

(1):x0←0,x1←1とする。

(2):x←(x0 + x1) / 2とする。

(3):x1-x<0.001ならばxの値を近似値として終了する。

(4):f(x)≧0ならばx1←xとして,そうでなければx0←xとする。

(5):(2)に戻る。

 

[解説]

f(x)のxの値は任意です。

この問題はトレースの問題です。

任意のxに対して差分0.001の近似値を求める時、何回アルゴリズムを実行するかという問題です。

x = 0.1としてみましょう。

 

(1):x0 = 0, x1 = 1, x = 0.5

x1 - x = 0.5 < 0.001

f(0.5) >= 0は、0.1 < 0.5なので真

x1 = 0.5

 

(2):x0 = 0, x1 = 0.5, x = 0.25

x1 - x = 0.25 < 0.001

f(0.25) >= 0は、0.1 < 0.25なので真

x1 = 0.25

 

(3):x0 = 0, x1 = 0.25, x = 0.125

x1 - x = 0.125 < 0.001

f(0.125) >= 0は、0.1 < 0.125なので真

x1 = 0.125

 

(4):x0 = 0, x1 = 0.125, x = 0.0625

x1 - x = 0.0625 < 0.001

f(0.0625) >= 0は、0.1 < 0.0625なので偽

x0 = 0.0625

 

(5):x0 = 0.0625, x1 = 0.125, x = 0.09375

x1 - x = 0.03125 < 0.001

f(0.03125) >= 0は、0.1 < 0.03125なので偽

x0 = 0.09375

 

(6):x0 = 0.09375, x1 = 0.125, x = 0.109375

x1 - x = 0.015625 < 0.001

f(0.015625) >= 0は、0.1 < 0.015625なので偽

x0 = 0.109375

 

(7):x0 = 0.109375, x1 = 0.125, x = 0.1171875

x1 - x = 0.0078125 < 0.001

f(0.0078125) >= 0は、0.1 < 0.0078125なので偽

x0 = 0.1171875

 

(8):x0 = 0.1171875, x1 = 0.125, x = 0.12109375

x1 - x = 0.00390625 < 0.001

f(0.00390625) >= 0は、0.1 < 0.00390625なので偽

x0 = 0.12109375

 

(9):x0 = 0.12109375, x1 = 0.125, x = 0.123046875

x1 - x = 0.001953125 < 0.001

f(0.001953125) >= 0は、0.1 < 0.001953125なので偽

x0 =0.123046875

 

(10):x0 = 0.123046875, x1 = 0.125, x = 0.1240234375

x1 - x = 0.0009765625 < 0.001

 

終了!

 

[まとめ]

f(x)のxがどのような値でも10回になるはずです。

テスト中はf(x)の数字の規則性を見つけると早く解けます。

x/2に必ずなるので10回目の商を計算すると終わります。