: ruby bin/pick_works_from_ans.rb gitignores/gw2_diff_ans.ipynb -1 '4 17 23' '13'
対数関数の狙いが先週の課題で明らかになったでしょうか. 主な応用分野は制御系の計算で,その昔は大砲の着弾距離を計算するのが主な仕事でした. では,対数・指数でexpってのがありますが, なんであんな中途半端な数を使わにゃいかんニャロって思ったことないですか. それを導いてもらおうというのが今日の狙いです.
指数関数 $$ f(x; b=2) = b^x $$ について考える. $f(x; b=2)$の表記は,$b$が助変数で,そのデフォルト値が2であることを意図している.
x | -1 | 0 | 1 | 2 | 3 |
---|---|---|---|---|---|
f(x; 2) |
from sympy import *
def f(x, b=2):
return b**x
for i in range(5):
print(f(i-1))
%matplotlib inline
x = symbols('x')
p = plot(f(x),
(x, -1, 3), ylim=[0,8],
legend=True, show=False)
p[0].line_color = 'b'
p.show()
0.5 1 2 4 8
x | -1 | 0 | 1 | 2 | 3 |
---|---|---|---|---|---|
f(x) | 0.5 | 1.0 | 2.0 | 4.0 | 8.0 |
問1.の指数関数に対して,平均変化率 $$ m0(x; h) = \frac{f(x+h)-f(x)}{x+h-x} $$ を求める式を考える.
%matplotlib inline
from sympy import *
def f(x, b=2):
return b**x
def m0(x0, h):
return (f(x0+h)-f(x0))/(h)
print(m0(0,1))
x = symbols('x')
p = plot(f(x), m0(0,2)*x+f(0),
m0(0,1)*x+f(0),
(x, -1, 3), ylim=[0,8],
legend=True, show=False)
p[0].line_color = 'b'
p[1].line_color = 'r'
p[2].line_color = 'g'
p.show()
1.0
print("%10.5f" % log(2))
が便利.問3,4,5の解答例では問1,2の解答例と違って,テキストの表記に従っているので注意せよ.
from sympy import *
x = symbols('x')
f0 = 2**x
df0 = diff(f0,x)
print(df0)
x0 = 0
a = df0.subs({x:x0})
print(a)
print("%10.5f" % log(2))
print("%10.5f" % m0(0, 0.1))
2**x*log(2) log(2) 0.69315 0.71773
f1 = a*(x-x0)+f0.subs({x:x0})
pprint(f1)
x⋅log(2) + 1
%matplotlib inline
from sympy.plotting import plot
p = plot(f0,f1,
m0(0,0.1)*x+f(0),
(x, -1,3), ylim=[0,8],
legend=True, show=False)
p[0].line_color = 'b'
p[1].line_color = 'r'
p.show()
問1.の関数とその一次導関数を同時にプロットすると次のようになる.一次導関数の意味を言葉で述べよ.
%matplotlib inline
from sympy.plotting import plot
from sympy import *
x = symbols('x')
f0 = 2**x
print(f0)
f1 = diff(f0,x)
p = plot(f0,f1,
(x, -1,3), ylim=[0,8],
show=False)
p[0].line_color = 'b'
p[1].line_color = 'r'
p.show()
2**x
関数 $$ f(x) = b^x, \, \textrm{where} \,2 < b < 3 $$ と,その一次導関数が恒等的にほぼ一致する$b$を, 上のグラフの指数関数の底’2’を色々変えて小数点以下1桁で求めよ.
%matplotlib inline
from sympy.plotting import plot
from sympy import *
x = symbols('x')
f0 = 2.7**x
print(f0)
f1 = diff(f0,x)
p = plot(f0,f1,
(x, -1,3), ylim=[0,8],
show=False)
p[0].line_color = 'b'
p[1].line_color = 'r'
p.show()
2.7**x
問5で求めた数は自然対数の底e(ネイピア数)のオイラーによる定義である.
としたときに,$b$がネイピア数であるならば$m2(h; b)$が$h \rightarrow 0$で取るべき値はなんであるか. 3. また,
plot(m2(h, 2),m2(h, exp(1)),m2(h, 3),(h, -1, 3))
で結果を確かめよ.
ネイピア数は,指数関数に於いて,一次導関数がそれ自身の関数と一致する指数関数の底となる実数として定義できる.
$f(x; b)=b^x$を平均変化率の式に入れると $$ m1(x; h, b) = \frac{b^{x+h}-b^x}{h}=b^x \frac{b^h-1}{h} $$ である.これを$h\rightarrow 0$にとると $$ \lim_{h\rightarrow 0}m1(x; h, b) = b^x \lim_{h\rightarrow 0}\frac{b^h-1}{h} $$ となる.これがその関数自身と等しくなるためには, $$ \lim_{h\rightarrow 0}\frac{b^h-1}{h} = 1 $$ である必要がある.
これを変数が$h$,助変数が$b$の関数 $$ m2(h; b) = \frac{b^h-1}{h} $$ とみなして,b = 2, exp(1), 3をとってplotすると次の通りとなる. h=0に於いて,値が1となるのは,exp(1)であることが確認できる.
%matplotlib inline
from sympy import *
def m2(h, b):
return (b**h-1)/h
h = symbols('h')
p = plot(m2(h, 2), m2(h, exp(1)),
m2(h, 3),
(h, -1,3), ylim=[0,4],
legend=True, show=False)
p[0].line_color = 'b'
p[1].line_color = 'r'
p[2].line_color = 'g'
p.show()
この$m1(x; h, b)$には少し注意が必要. $m1(x, h; b)$として扱った方がいいかも. なぜならば,平均変化率を取るときには, $h$を助変数としていたが,最後のplotでは 独立変数として導いている.
関数 $$ f_1(x) = \frac{x}{x^2-2x+4} $$ を考える.
from sympy import *
x = symbols('x')
f1 = x/(x**2 -2*x + 4)
print(f1)
print(integrate(f1,x))
f0 = integrate(f1,x)
print(diff(f0,x))
x/(x**2 - 2*x + 4) log(x**2 - 2*x + 4)/2 + sqrt(3)*atan(sqrt(3)*x/3 - sqrt(3)/3)/3 (2*x - 2)/(2*(x**2 - 2*x + 4)) + 1/(3*((sqrt(3)*x/3 - sqrt(3)/3)**2 + 1))
%matplotlib inline
from sympy import *
f2 = diff(f1,x)
p = plot(f0,f1,f2, legend=True,show=False)
p[0].line_color = 'b'
p[1].line_color = 'r'
p[2].line_color = 'g'
p.show()
$x$ | $\cdots$ | -2 | $\cdots$ | 0 | $\cdots$ | 2 | $\cdots$ |
---|---|---|---|---|---|---|---|
$f_0(x)$ | $\frown \searrow$ | . | $\smile \searrow$ | min | $\smile \nearrow$ | . | $\frown \nearrow$ |
$f_1(x)=\frac{df_0}{dx}$ | - | - | - | 0 | + | + | + |
$f_2(x)=\frac{d^2f_0}{dx^2}$ | - | 0 | + | + | + | 0 | - |