Python과 Sympy로 중적분

여기에서는 Python을 사용한 중적분에 대해 쓰고 싶습니다.

기본 형태



from sympy import *

x = symbols('x')
y = symbols('y')

f = x**2 + y**2 + 1

integrate(f,(x, 0, 1),(y,0,1))

덧붙여서

x = symbols('x')
y = symbols('y')

부분은

x = Symbol('x')
y = Symbol('y')

또는

x,y = symbols('x y')

하지만 괜찮습니다.

또한 다음과 같이 쓰면 z=f의 곡면을 그릴 수 있습니다.
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

x = y = np.linspace(-5,5)
X,Y = np.meshgrid(x,y)
f = X**2 + Y**2 + 1
fig = plt.figure(figsize = (10,10))
ax = fig.add_subplot(1,1,1,projection="3d")
ax.plot_surface(X, Y, f)



적분 영역이 삼각형


from sympy import *

x = symbols('x')
y = symbols('y')

f = x**2 + x*y*2 + 1

#左に書いてある変数から積分する。
integrate(f,( x, 0, 2-y),(y, 0, 2))

적분 영역이 부채꼴


from sympy import *

x = symbols('x')
y = symbols('y')

f = x**2 + y**2 + 1

#積分領域を不等式で書いてもうまくいかない。
integrate(f,(x, 0, sqrt(1-y**2)),(y,0,1))

스칼라장의 면적분



\vec{r}(u,v) = ( \cos u, \sin u, v)\\
D:0 \leq u \leq \pi,~~0 \leq v \leq 1\\
におけるスカラー場~f=\sqrt{x^2+y^2+z^2}の面積分の値を求めよ。
from sympy import *

u = symbols('u')
v = symbols('v')

r =Matrix([ cos(u), sin(u), v])

A = [0]*3
A[0] = diff(r,u)[0]
A[1] = diff(r,u)[1]
A[2] = diff(r,u)[2]
B = [0]*3
B[0] = diff(r,v)[0]
B[1] = diff(r,v)[1]
B[2] = diff(r,v)[2]

C = np.cross(A,B)
print(C)
#よってAとBの外積の長さは1

#pythonはcos(u)**2+sin(u)**2=1を使ってはくれないので自分で式変形。
f = sqrt(1+r[2]**2)
integrate(f,(v, 0, 1),(u,0,pi))

좋은 웹페이지 즐겨찾기