Return to Maxima で理工系の数学C

Maxima で偏微分

偏微分:多変数関数の微分

Maxima での偏微分は(常微分と同様の書き方ですが)以下のように書きます。

$\displaystyle \frac{\partial}{\partial x} f(x, y) = $ diff(f(x, y), x);

$\displaystyle \frac{\partial}{\partial y} f(x, y) = $ diff(f(x, y), y);

Maxima-Jupyter では偏微分の表示が $\displaystyle \frac{\partial}{\partial x}$ や $\displaystyle \frac{\partial}{\partial y}$ ではなく,$\displaystyle \frac{d}{dx}$ や $\displaystyle \frac{d}{dy}$ となってしまいますが,ご了承ください。

In [1]:
diff(f(x, y), x);
diff(f(x, y), y);
Out[1]:
\[\tag{${\it \%o}_{1}$}\frac{d}{d\,x}\,f\left(x , y\right)\]
Out[1]:
\[\tag{${\it \%o}_{2}$}\frac{d}{d\,y}\,f\left(x , y\right)\]

例題

次の関数 $z$ の偏導関数を求めよ。

(1) $ z = x^3 – 4 x^2 y + x y + 3 y^2$

In [2]:
z: x**3 - 4 * x**2 * y + x * y + 3 * y**2;

diff(z, x);
diff(z, y);
Out[2]:
\[\tag{${\it \%o}_{3}$}3\,y^2-4\,x^2\,y+x\,y+x^3\]
Out[2]:
\[\tag{${\it \%o}_{4}$}-8\,x\,y+y+3\,x^2\]
Out[2]:
\[\tag{${\it \%o}_{5}$}6\,y-4\,x^2+x\]

(2) $\displaystyle z = \tan^{-1} \frac{y}{x} $

In [3]:
z: atan(y/x);

diff(z, x);
diff(z, y);
Out[3]:
\[\tag{${\it \%o}_{6}$}\arctan \left(\frac{y}{x}\right)\]
Out[3]:
\[\tag{${\it \%o}_{7}$}-\frac{y}{x^2\,\left(\frac{y^2}{x^2}+1\right)}\]
Out[3]:
\[\tag{${\it \%o}_{8}$}\frac{1}{x\,\left(\frac{y^2}{x^2}+1\right)}\]

偏微分はしてくれましたが,分母はもうちょっとがんばって簡単化していただきたいところ。
ratsimp() 関数で「簡単化」してみます。

In [4]:
dzdx: diff(z, x)$
dzdx = ratsimp(dzdx);
Out[4]:
\[\tag{${\it \%o}_{10}$}-\frac{y}{x^2\,\left(\frac{y^2}{x^2}+1\right)}=-\frac{y}{y^2+x^2}\]
In [5]:
dzdy: diff(z, y)$
dzdy = ratsimp(dzdy);
Out[5]:
\[\tag{${\it \%o}_{12}$}\frac{1}{x\,\left(\frac{y^2}{x^2}+1\right)}=\frac{x}{y^2+x^2}\]

全微分

2変数関数 $z = f(x, y)$ の全微分 $dz$ とは

$$ dz = df(x,y) = \frac{\partial f}{\partial x} dx + \frac{\partial f}{\partial y} dy$$

Maxima で全微分を求めるときは $df(x,y) = $ diff(f(x, y)); と書きます。

例題

次の関数 (z) の全微分を求めよ。

(1) $ z = \sqrt{x^2 – y^2} $

(2) $ z = x y^2 $

In [6]:
z: sqrt(x**2 - y**2)$

'diff(z) = diff(z);
Out[6]:
\[\tag{${\it \%o}_{14}$}d\left(\sqrt{x^2-y^2}\right)=\frac{x\,dx}{\sqrt{x^2-y^2}}-\frac{y\,dy}{\sqrt{x^2-y^2}}\]
In [7]:
z: x * y**2$

'diff(z) = diff(z);
Out[7]:
\[\tag{${\it \%o}_{16}$}d\left(x\,y^2\right)=2\,x\,y\,dy+y^2\,dx\]

高階偏導関数

Maxima が2階偏導関数に関して

$$ \frac{\partial^2 f}{\partial x \partial y} = \frac{\partial^2 f}{\partial y \partial x} $$

のように,偏微分の順序を変えてもよいことを知っているか確認。

In [8]:
diff(diff(f(x, y), y), x) - diff(diff(f(x, y), x), y);
Out[8]:
\[\tag{${\it \%o}_{17}$}0\]

テイラー展開(2変数)

1変数関数 $f(x)$ のテイラー展開の復習

$f(x)$ を $x = a$ のまわりで $n = 5$ 次($x^5$)まで展開するときは,Maxima では
taylor(f(x), x, a, 5); のように書く。

例として,$f(x) = e^{x}$ を $x = 0$ まわりで $5$ 次まで展開してみる。

In [9]:
f(x):= exp(x);

taylor(f(x), x, 0, 5);
Out[9]:
\[\tag{${\it \%o}_{18}$}f\left(x\right):=\exp x\]
Out[9]:
\[\tag{${\it \%o}_{19}$}\frac{x^5}{120}+\frac{x^4}{24}+\frac{x^3}{6}+\frac{x^2}{2}+x+1\]

Maxima-Jupyter ではなぜかテイラー展開の結果表示が項の順番が降べきになっている。昇べきの順に表示させたいときは,trunc() を使って…

In [10]:
trunc(taylor(f(x), x, 0, 5));
Out[10]:
\[\tag{${\it \%o}_{20}$}1+x+\frac{x^2}{2}+\frac{x^3}{6}+\frac{x^4}{24}+\frac{x^5}{120}+\cdots \]

2変数関数 $f(x, y)$ のテイラー展開

本題である2変数関数 $f(x, y)$ のテイラー展開も taylor() 関数を使って書く。 $f(x, y)$ を$x = a, y = b$ のまわりで$3$次まで展開するときは,
taylor(f(x, y), [x, y], [a, b], [3, 3]); のように。

例として,$\displaystyle f(x, y) = \frac{1-y}{1 + \sin x}$ を $x = 0, y = 0$ のまわりで $2$ 次まで展開してみる。

In [11]:
f(x,y):= (1-y)/(1 + sin(x));
Out[11]:
\[\tag{${\it \%o}_{21}$}f\left(x , y\right):=\frac{1-y}{1+\sin x}\]
In [12]:
trunc(taylor(f(x, y), [x, y], [0, 0], [2, 2]));
Out[12]:
\[\tag{${\it \%o}_{22}$}1-x+x^2-y+x\,y+\cdots \]

合成関数の偏微分

例題

\begin{eqnarray}
z &=& f(x, y) = x y \\
x &=& x(u, v) = u\cos v \\
y &=& y(u, v) = u \sin v \\
\therefore\ \ z &=& f\left(x(u, v), y(u, v)\right) = z(u, v)
\end{eqnarray}

について,以下を求める。

$$ 1. \ \frac{\partial z}{\partial u} \quad 2. \ \frac{\partial z}{\partial v} $$

In [13]:
x: u * cos(v);
y: u * sin(v);

z: x * y;
Out[13]:
\[\tag{${\it \%o}_{23}$}u\,\cos v\]
Out[13]:
\[\tag{${\it \%o}_{24}$}u\,\sin v\]
Out[13]:
\[\tag{${\it \%o}_{25}$}u^2\,\cos v\,\sin v\]

$\displaystyle \frac{\partial z}{\partial u}$ を計算すると…

In [14]:
diff(z, u);
Out[14]:
\[\tag{${\it \%o}_{26}$}2\,u\,\cos v\,\sin v\]
In [15]:
/* 上の結果を簡単化。*/
/* trigreduce() は三角関数の積をなるべく減らして簡単化します。*/
trigreduce(%);
Out[15]:
\[\tag{${\it \%o}_{27}$}u\,\sin \left(2\,v\right)\]

同様にして,$\displaystyle \frac{\partial z}{\partial v}$ を計算すると…

diff(z, u) は $\displaystyle \frac{\partial z}{\partial u}$ ですが,Maxima は $\partial $ とは書けないようです。計算そのものはちゃんと偏微分しています。

In [16]:
'diff(z, v) = diff(z, v);
Out[16]:
\[\tag{${\it \%o}_{28}$}\frac{d}{d\,v}\,\left(u^2\,\cos v\,\sin v\right)=u^2\,\cos ^2v-u^2\,\sin ^2v\]
In [17]:
/* 上の結果の右辺 rhs を簡単化。*/
/* trigreduce() は三角関数の積をなるべく減らして簡単化します。*/
trigreduce(rhs(%));
Out[17]:
\[\tag{${\it \%o}_{29}$}u^2\,\cos \left(2\,v\right)\]

陰関数定理

In [18]:
/* これまでの x, y の定義を念のために消去。*/
kill(x, y, z)$

例題

$f(x, y) = x^2 + y^2 -1 = 0$ を満たす陰関数 $y=y(x)$ の微分を求める。

陰関数定理を使って解く

陰関数定理より,

$$ \frac{dy}{dx} = – \frac{\frac{\partial f}{\partial x}}{\frac{\partial f}{\partial y}}$$

これを Maxima で導いてみます。

まず,$f(x, y) = 0$ より $y$ は $x$ の(陰)関数となるので,$y(x)$。

これを Maxima で表現するには,yx に依存する (depends()) という意味で以下のように書きます。
depends(y, x);

In [19]:
depends(y, x);
Out[19]:
\[\tag{${\it \%o}_{31}$}\left[ y\left(x\right) \right] \]

$y$ の $x$ 依存性を宣言した上で,$f(x, y) = x^2 + y^2 -1 = 0$ を $x$ で微分します。

In [20]:
f(x, y):= x**2 + y**2 - 1;
Out[20]:
\[\tag{${\it \%o}_{32}$}f\left(x , y\right):=x^2+y^2-1\]

$f(x, y) = 0$ の両辺を $x$ で微分し,変数 df に代入します。

In [21]:
df: diff(f(x, y) = 0, x);
Out[21]:
\[\tag{${\it \%o}_{33}$}2\,y\,\left(\frac{d}{d\,x}\,y\right)+2\,x=0\]

上式を $\displaystyle \frac{dy}{dx}$ について解きます。

In [22]:
ans: solve(df, diff(y,x));
Out[22]:
\[\tag{${\it \%o}_{34}$}\left[ \frac{d}{d\,x}\,y=-\frac{x}{y} \right] \]
陽関数として表して微分する

別解として,陽関数として表して解く場合。

$f(x, y) = x^2 + y^2 – 1 = 0$ を $y$ について解く。
Maxima では,solve(f(x, y) = 0, y); と書く。解を sol に代入。

In [23]:
sol: solve(f(x, y) = 0, y);
Out[23]:
\[\tag{${\it \%o}_{35}$}\left[ y=-\sqrt{1-x^2} , y=\sqrt{1-x^2} \right] \]

1つ目の解は sol[1] のように取り出す。

In [24]:
sol[1];
Out[24]:
\[\tag{${\it \%o}_{36}$}y=-\sqrt{1-x^2}\]

そしてそれを微分すると…

In [25]:
dy1: 'diff(y, x) = diff(rhs(sol[1]), x);
Out[25]:
\[\tag{${\it \%o}_{37}$}\frac{d}{d\,x}\,y=\frac{x}{\sqrt{1-x^2}}\]

微分した結果 (dy1)の右辺 (rhs()) の分母を $\sqrt{1-x^2} = -y$ を代入して評価 (ev()) する。

In [26]:
dai1: -rhs(sol[1]) = -lhs(sol[1]);
lhs(dy1) = ev(rhs(dy1), dai1);
Out[26]:
\[\tag{${\it \%o}_{38}$}\sqrt{1-x^2}=-y\]
Out[26]:
\[\tag{${\it \%o}_{39}$}\frac{d}{d\,x}\,y=-\frac{x}{y}\]

2つ目の解 sol[2] についても同様に。

In [27]:
sol[2];
dy2: 'diff(y, x) = diff(rhs(sol[2]), x);
Out[27]:
\[\tag{${\it \%o}_{40}$}y=\sqrt{1-x^2}\]
Out[27]:
\[\tag{${\it \%o}_{41}$}\frac{d}{d\,x}\,y=-\frac{x}{\sqrt{1-x^2}}\]
In [28]:
dai2: rhs(sol[2])=lhs(sol[2]);
lhs(dy2) = ev(rhs(dy2), dai2);
Out[28]:
\[\tag{${\it \%o}_{42}$}\sqrt{1-x^2}=y\]
Out[28]:
\[\tag{${\it \%o}_{43}$}\frac{d}{d\,x}\,y=-\frac{x}{y}\]

以上のことから,1つ目の解 sol[1] についても2つ目の解 sol[2] についても,

$$\frac{dy}{dx} = – \frac{x}{y}$$

となることがわかる。これは陰関数定理で求めた解と一致する。

例題

$f(x,y) = x^2 + y^2 -1 = 0$ を満たす陰関数 $y = y(x)$ の極大値と極小値を求めよ。

極値を求めるには $\displaystyle \frac{dy}{dx}$ と極大・極小(上に凸・下に凸)を判断するために $\displaystyle \frac{d^2y}{dx^2}$ が必要。

陰関数の1階微分

すでに,$\displaystyle \frac{dy}{dx} = – \frac{x}{y}$ は求めていて,変数 ans[1] に格納している。

In [29]:
ans[1];
Out[29]:
\[\tag{${\it \%o}_{44}$}\frac{d}{d\,x}\,y=-\frac{x}{y}\]
陰関数の2階微分

ans[1] をもう1階 $x$ で微分して $\displaystyle \frac{d^2y}{dx^2}$ を求める。

In [30]:
ddy: diff(ans[1], x);
Out[30]:
\[\tag{${\it \%o}_{45}$}\frac{d^2}{d\,x^2}\,y=\frac{x\,\left(\frac{d}{d\,x}\,y\right)}{y^2}-\frac{1}{y}\]

上式の右辺に ans[1] つまり $\displaystyle \frac{dy}{dx} = – \frac{x}{y}$ を代入して評価(ev())してやると…

In [31]:
ddy: ev(ddy, ans[1]);
Out[31]:
\[\tag{${\it \%o}_{46}$}\frac{d^2}{d\,x^2}\,y=-\frac{1}{y}-\frac{x^2}{y^3}\]

極値となりそうな $x$ の値は

$\displaystyle \frac{dy}{dx} = – \frac{x}{y} = 0$ より $x = 0$.

そのときの $y$ の値は連立方程式 $x = 0, \ f(x, y)=0$ を解いて…

In [32]:
sols: solve([x = 0, f(x, y) = 0], [x, y]);
Out[32]:
\[\tag{${\it \%o}_{47}$}\left[ \left[ x=0 , y=-1 \right] , \left[ x=0 , y=1 \right] \right] \]

sols[1] つまり $(x, y) = (0, -1)$ のとき,$\displaystyle \frac{d^2y}{dx^2}$ つまり ddy の右辺の値を評価すると…

In [33]:
rddy: rhs(ddy)$
lhs(ddy) = ev(rddy, sols[1]);
Out[33]:
\[\tag{${\it \%o}_{49}$}\frac{d^2}{d\,x^2}\,y=1\]

… となり,$\displaystyle \frac{d^2y}{dx^2} = 1 > 0$ だからここでは下に凸,つまり極小値(最小値)。

同様に sols[2] つまり $(x, y) = (0, 1)$ の場合は…

In [34]:
lhs(ddy) = ev(rddy, sols[2]);
Out[34]:
\[\tag{${\it \%o}_{50}$}\frac{d^2}{d\,x^2}\,y=-1\]

… となり,$\displaystyle \frac{d^2y}{dx^2} = -1 < 0$ だからここでは上に凸,つまり極大値(最大値)。

参考:陰関数のグラフ

Maxima では $f(x, y) = 0$ という陰関数表示のままでグラフを描くことができる。

In [35]:
/* plot2d() で描く場合 */
plot2d(f(x, y) = 0, 
       [x, -1.2, 1.2], [y, -1.2, 1.2], 
       [same_xy], 
       [title, "f(x, y) = 0"]
)$

In [36]:
/* draw2d() で描く場合 */
/* 冗長だがいろいろ設定が可能 */

draw2d(
  /* 滑らかにするために ip_grid を多めに 
  ip_grid = [200, 200], */
  /* 縦横比 */
  proportional_axes = xy, yrange = [-1.2, 1.5],
  /* x 軸 y 軸の表示 */
  xaxis = true, yaxis = true, 
  
  title = "f(x, y) = 0",
  implicit(f(x, y) = 0, x, -1.2, 1.2, y, -1.2, 1.2), 

  point_type = 7, point_size = 0.7,
  key = "y(x) の最大値",
  color = "red",
  points([[0,1]]), 

  key = "y(x) の最小値",
  color = "blue",
  points([[0,-1]])
)$