数式処理group work-2(関数と微分)

file:/~/python/doing_math_with_python/symbolic_math/group_works/group_work_II.ipynb
cc by Shigeto R. Nishitani 2009-2018

関数の概念

関数の概念を復習しておきます.中学以来のおつきあいですが,今一度(難しいけど理解できる)概念として見直してください.

定数,変数,助変数

数学では定数,変数,助変数という語がよく使われる. ある1つの事柄を論じている間,

  • 一定不変の数を表す文字を定数(または常数)といい,
  • 2つ以上の数のいずれをも表す文字(または記号)を変数という.
  • また,定数ではあるがその値が定まっていない場合にこの定数を助変数(またはparameter)という.

具体例:

方程式$2x-3y = a$

  • $a$は定数で,$x$および$y$は変数である.

具体例:

点$P(x_1, y_1)$を通る直線群の方程式$y-y_1= m(x-x_1)$

  • $x_1$および$y_1$は点$P$の座標であって定まった値をとるから定数であり,
  • $x$および$y$は直線上の任意の点(すなわち動点)の座標であってその値は定まっていない.すなわち,変数である.
  • 勾配$m$は1本の直線に対しては一定の値をとるから定数であるにかかわらず,$P$を通る直線は無数であるので$m$の値は一定していない.すなわち値の定まらない定数であって,いわゆる助変数(すなわちparameter)である.

数式の記号として,

  • 定数はアルファベットの初めの方の文字($a,b,c$)を用いて表し,
  • 変数はその終わりの方の文字($x,y,z$)を用いて表すけれども,
  • 必ずしもこの約束をふむにおよばない.
  • 助変数はいろいろの文字で表される.

数値

変数の表すべき個々の数をこの変数の数値(または)という.

関数

2つの変数$x, y$があり,$x$の数値を定めると, それにつれて$y$の数値もまた定まるという場合, $y$は$x$の関数であるといい,たとえば$y =f(x)$としるす. このとき,$x$を独立変数,$y$を従属変数といって区別する.

具体例:

$y = \sqrt{-x^2+1}$では,$x$は独立変数で,$y$は従属変数である.

  • この例の$y$は$-1 \leq x \, \&\, x \leq 1$において実数値を持つ.
  • 値は$0 \leq y \, \&\, y \leq 1$である.

これを略して

  • $y$の定義域は $-1 \leq x \leq 1$,
  • $y$の値域は$0 \leq y \leq 1$

という.

$y = f(x)$において$y$の定義域の1点を$\alpha$とし, $\alpha$における$f(x)$の値を$f(\alpha)$と書く.

グラフ

$x$のある区間において定義された関数 $y =f(x)$ を与え,

  • 直交座標軸の横軸に沿って独立変数$x$の値を示し,
  • 縦軸に沿って従属変数$y$の値を求め,
  • $x$および$y$の対応した値の組を$(x,y)$とし,
  • これを座標に持つ点の集合を考えるならば,

1つ以上の線が描かれる.

この線のことを関数$y = f(x)$のグラフという.

方程式

2つの変数$x, y$に関する方程式$F(x, y) =0$が与えられたとする.

  • ある点の座標がこの方程式を満足するとき,その点はこの方程式を満足するという.
  • 一般に1つの方程式を満足する点は無数にあって,それらの点の集まりは1つの図形を表している.
    • ここに図形とは直線,曲線,またはそれらの集まりのことである.
  • この図形を方程式$F(x, y) =0$を満足する点の軌跡(またはグラフ)といい,
    • また,方程式$F(x, y) =0$は軌跡を表すといってもよい.
  • すなわち与えられた方程式で表される幾何学的条件を満足する点の集まりがこの方程式の軌跡である.
    • もっと簡単に言うと,方程式は軌跡を表している

具体例:

$f(x) = 3x -4$のグラフを描く.

In [5]:
%matplotlib inline
from sympy import *
def f(x):
    return 3*x-4
    
x = Symbol('x')
plot(f(x),(x, -1, 3))
Out[5]:
<sympy.plotting.plot.Plot at 0x11ab6e320>

具体例:

f(0), f(1),f(5)を求めよ.また,f(x)=0となるxを求めよ.

In [1]:
from sympy import *
def f(x):
    return 3*x-4
    
x = Symbol('x')
print(f(0))
print(f(1))
print(f(5))

solve(f(x),x)
-4
-1
11
Out[1]:
[4/3]

具体例2:

y=f(x)とy=g(x)の2直線の交点を求めよ.さらに連立方程式を立てて求めよ.交点のx座標をy=f(x)-g(x)としてプロットし,確認せよ.

In [13]:
%matplotlib inline
from sympy import *
def f(x):
    return 3*x-4
def g(x):
    return -2*x+4

x = Symbol('x')
p = plot(f(x),g(x),(x, -1, 3),legend=True, show=False)
p[0].line_color = 'b'
p[1].line_color = 'r'
p.show()
In [15]:
solve(f(x)-g(x),x)
Out[15]:
[8/5]
In [18]:
x, y = symbols('x y')
solve({y-f(x),y-g(x)},(x,y))
Out[18]:
{x: 8/5, y: 4/5}
In [23]:
plot(f(x)-g(x),(x, -1, 3))
print(8/5)
1.6

その他の用語

関数と逆関数

$y$が$x$の関数であるとき,逆に$x$が$y$の関数となることがある. すなわち,独立変数と従属変数とが交換できるときがある. このとき一方を他方の逆関数という.

たとえば,$y= f(x)$の逆関数は$x = g(y)$である. したがって,独立変数の区間と従属変数の値域とが全く入れ替わる.

$y = f(x)$の逆関数を$x =f(y)^{-1}$と書くこともある. これは$y = f(x)$を$x$について解いたという意味であって, $x = 1/f(x)$というのではない.

逆関数の求め方

一般に$y = f(x)$の逆関数を求めるには次の手順を踏む.

  1. 定義域$x$と値域$y$を入れ替え$x = f(y)$という方程式をたてる.
  2. これを$y$について解く.
  3. 得られた関数$y = g(x)$が$y = f(x)$の逆関数である.

2つの関数$y = g(x)$と$y = f(x)$とを同時にプロットすると 直線$y = x$に関して線対称の位置をとることがわかる.

具体例:

指数関数($\exp$)の逆関数を求め,プロットして,直線$y = x$に関して線対称であることを確かめよ.

In [24]:
%matplotlib inline
from sympy import *

x, y = symbols('x y')
solve(x - exp(y),y)
Out[24]:
[log(x)]
In [29]:
%matplotlib inline
from sympy import *

plot(exp(x),log(x),x,(x, -4,4), ylim=[-4,4])
Out[29]:
<sympy.plotting.plot.Plot at 0x11bded6a0>

単値関数と多値関数

$y = f(x)$を定義する$x$の区間の1つの値に対する$y$の値がただ1つであるとき, $y$を$x$の単値関数(または一価関数)といい, $y$の値が2つ以上ある場合に,$y$を$x$の多値関数(または多価関数)という.

多値関数は多くの単値関数の集まりであると考えるとき, その各単値関数をもとの多値関数のということがある. ときとして枝の中の1つを主枝(または主値)と名付けることがある.

具体例:

sin関数についても逆関数を求め,プロットして,直線$y = x$に関して線対称であるとともに,多値関数となっていることを確かめよ.

In [30]:
%matplotlib inline
from sympy import *

x, y = symbols('x y')
solve(x - sin(y),y)
Out[30]:
[-asin(x) + pi, asin(x)]
In [51]:
%matplotlib inline
from sympy import *

p = plot(sin(x),-asin(x)+pi,asin(x),x,(x, -6,6), ylim=[-6,6],
         legend=True, show=False)
p[0].line_color = 'b'
p[1].line_color = 'r'
p[2].line_color = 'g'
p[3].line_color = 'm'
p.show()
In [56]:
%matplotlib inline
import sympy as sp

sp.init_session()
p = plot(sin(x),-asin(x)+pi,asin(x),x,(x, -6,6), ylim=[-6,6])
p[0].line_color = 'b'
p[1].line_color = 'r'
p[2].line_color = 'g'
p[3].line_color = 'm'
fig = p._backend.fig
ax = p._backend.ax
ax.set_aspect('equal')
fig.show()
IPython console for SymPy 1.0 (Python 3.6.1-64-bit) (ground types: python)

These commands were executed:
>>> from __future__ import division
>>> from sympy import *
>>> x, y, z, t = symbols('x y z t')
>>> k, m, n = symbols('k m n', integer=True)
>>> f, g, h = symbols('f g h', cls=Function)
>>> init_printing()

Documentation can be found at http://docs.sympy.org/1.0/

陽関数と陰関数

$x$の関数$y$が直接に$x$で表されているとき,$y$は$x$の陽関数であるといい, $y$が間接にしか$x$で表されていない場合に,$y$は$x$の陰関数であるという. したがって,陽関数は$y= f(x)$の形をとるが,陰関数$y$は例えば$\phi(x, y) = 0$の形をとっている. しかも,陰関数$y$を定義する$x$の区間は容易に見つけにくいのが普通である.

問1.

指数関数 $$ f(x; b=2) = b^x $$ についてここでは考える.なお$f(x; b=2)$の表記は, $b$が助変数で,そのデフォルト値が2であることを意図している.

  1. 次の表を埋めよ.また,
  2. 関数$f(x; 2)$をプロットして確認せよ.
x -1 0 1 2 3
f(x; 2)

問2.

問1.の指数関数に対して,平均変化率 $$ m0(x; h) = \frac{f(x+h)-f(x)}{x+h-x} $$ を求める式を考える.

  1. x=0..2およびx=0..1の傾きを求めよ.
  2. それらの点の間を結ぶ直線の方程式を求めよ.
  3. また,元の関数と同時にプロットせよ.

x=0..2では下記の通りになる.

In [4]:
%matplotlib inline
from sympy import *
def f(x, b=2):
    return b**x
def m0(x0, h):
    return (f(x0+h)-f(x0))/(h)

x = symbols('x')    
p = plot(f(x), m0(0,2)*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()

print(m0(0,2))
1.5

問3.

  1. 問1.の関数に対して,x=0における接線の傾きを微分により求めよ.また問2.でx=0..0.1に対して求めた値と小数点以下5桁で比べよ.
    1. なお浮動小数点数での表示は,print("%10.5f" % log(2))が便利.
  2. 問1.の関数に対して,x=0における接線の方程式を求め,同時にプロットせよ.
  3. 問2.で作成したプロットをx=0..0.1に対して行い,1.で作成した関数と同時プロットして比較せよ.

問4.

問1.の関数とその一次導関数を同時にプロットすると次のようになる.一次導関数の意味を言葉で述べよ.

In [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

問5.

関数 $$ f(x) = b^x, \, \textrm{where} \,2 < b < 3 $$ とその一次導関数が恒等的にほぼ一致する$b$を上のグラフの指数関数の底’2’を色々変えて小数点以下1桁で求めよ.

問6.

問5で求めた数は自然対数の底e(ネイピア数)のオイラーによる定義である.

  1. ネイピア数の定義を,この導出にしたがって,言葉で述べよ.
  2. $f(x; b)=b^x$を問2.の平均変化率の定義に代入し変形することによって, $$ m2(h; b) = \frac{b^h-1}{h} $$ としたときに,$b$がネイピア数であるならば$m2(h; b)$が$h \rightarrow 0$で取るべき値はなんであるか.
  3. また,

plot(m2(h, 2),m2(h, exp(1)),m2(h, 3),(h, -1, 3))

で結果を確かめよ.

おまけ(時間が余ったらやってください)

関数 $$ f_1(x) = \frac{x}{x^2-2x+4} $$ を考える.

  1. $f_1(x)$を積分した関数$f_0(x)$を求めよ.
  2. また,関数$f_1(x)$の1次導関数$f_2(x)$を求め,3つの関数を同時にプロットせよ.
  3. この$f_0$関数の極小値,変曲点の$x$座標をグラフから求めよ.
  4. また,この$f_0$関数の増減表を作れ.
In [ ]: