解答例

演習2.2

任意に指定される区間[a,b]における関数f(x)のグラフを作成するPythonの関数draw_f(a,b)を作ってください。

Step 1.

まず、関数 $f(x)=\sqrt{x}+1$のコードを用意します。

In [1]:
import math
def my_f(x):
    return math.sqrt(x)+1

関数を使ってみます。

In [2]:
my_f(4)
Out[2]:
3.0

Step 2.

指定される区間[a,b]におけるグラフを描くために、[a,b]の分割を考え、x_listを作成します。

In [5]:
#関数の引数は不定なので、コードを準備するために、具体的な値でためしないとコードを書きにくいです。
#とりあえず、a=1,b=10とします。実際の計算では、aとbの値は引数の値をとります。

a=1
b=10

h=(b-a)/100; #区間[a,b]の100分割を考えます。

n_list = range(0,101)
x_list = []
for n in n_list:
    x_list.append(a +  n*h)
    
print(x_list)
[1.0, 1.09, 1.18, 1.27, 1.3599999999999999, 1.45, 1.54, 1.63, 1.72, 1.81, 1.9, 1.99, 2.08, 2.17, 2.26, 2.3499999999999996, 2.44, 2.5300000000000002, 2.62, 2.71, 2.8, 2.8899999999999997, 2.98, 3.07, 3.16, 3.25, 3.34, 3.4299999999999997, 3.52, 3.61, 3.6999999999999997, 3.79, 3.88, 3.9699999999999998, 4.0600000000000005, 4.15, 4.24, 4.33, 4.42, 4.51, 4.6, 4.6899999999999995, 4.779999999999999, 4.869999999999999, 4.96, 5.05, 5.14, 5.2299999999999995, 5.32, 5.41, 5.5, 5.59, 5.68, 5.77, 5.859999999999999, 5.95, 6.04, 6.13, 6.22, 6.31, 6.3999999999999995, 6.49, 6.58, 6.67, 6.76, 6.85, 6.9399999999999995, 7.029999999999999, 7.12, 7.21, 7.3, 7.39, 7.4799999999999995, 7.569999999999999, 7.66, 7.75, 7.84, 7.93, 8.02, 8.11, 8.2, 8.29, 8.379999999999999, 8.469999999999999, 8.559999999999999, 8.649999999999999, 8.739999999999998, 8.83, 8.92, 9.01, 9.1, 9.19, 9.28, 9.37, 9.459999999999999, 9.549999999999999, 9.64, 9.73, 9.82, 9.91, 10.0]

Step 3.

グラフの描画に必要となる y_listを作成します。x_listとy_listを使って、グラフを作成してみます。

In [7]:
#y_listを作成します。
y_list=[]
for x in x_list:
    y=my_f(x)
    y_list.append(y)

#x_list,y_listのグラフを作成します。
import matplotlib.pyplot as plt

plt.plot(x_list, y_list,'b-')
plt.grid()
plt.show()

Step 4.

上記のコードをdraw_graph(a,b)にまとめます。特に、a,bは引数から値を取るので、関数の中でa,bの具体的な値を設定する必要はないです。

In [16]:
import matplotlib.pyplot as plt
import math

def my_f(x):
    return math.sqrt(x)+1

def draw_f(a,b):
    #x_listを作成します。
    h=(b-a)/100; #区間[a,b]の100分割を考えます。

    n_list = range(0,101)
    x_list = []
    for n in n_list:
        x_list.append(a +  n*h)

    #y_listを作成します。
    y_list=[]
    for x in x_list:
        y=my_f(x)
        y_list.append(y)

    #x_list,y_listのグラフを作成します。
    plt.plot(x_list, y_list,'b.')
    plt.grid()
    plt.show()

他のa,bの値で試してみます。例えば、a=1,b=100。

In [17]:
draw_f(1,100)