>  기사  >  백엔드 개발  >  Python의 Sympy 대수 기호 연산 소개

Python의 Sympy 대수 기호 연산 소개

不言
不言앞으로
2019-03-29 11:04:386902검색

이 글은 Python의 Sympy 대수적 기호 연산에 대해 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

중학교, 고등학교, 대학교에서 거의 10년 동안 공부하면서 수학은 항상 매우 큰 역할을 해왔지만, 과거를 되돌아보면 우리는 많은 시간을 소비했다는 것을 알 수 있습니다. 문제를 반복적으로 푸는 시간, 연속계산에 있어서는 계산방법, 계산능력, 작문능력, 수학공식의 기억력이 우리가 수학을 배우는 모든 것이 된 것 같습니다. 이러한 기억과 기술은 몇 년 안에 잊혀지지만, 많은 사람들은 여전히 ​​펜 계산과 문제 해결이 AI, 그래픽, 데이터 분석 등의 소프트웨어로 대체된다는 것을 기억합니다. 그렇다면 우리 학생 시절의 수학에는 무엇이 남았습니까?

계산기와 수학

수학 계산기라고 하면 우리는 흔히 덧셈, 뺄셈, 곱셈, 나눗셈의 4가지 산술 연산을 사용합니다. , 우리는 할 수 있습니다. 서면계산과 암산의 고통을 없앨 수 있습니다. 4자리 이상의 덧셈, 뺄셈, 곱셈, 나눗셈은 사실 수학적 원리상 어렵지 않습니다. 하지만 계산기에 의존하지 않고 계산 능력(작문, 암산)에만 의존한다면 계산의 정확도는 크게 떨어지지만 계산이 더욱 어려워지기도 합니다.

네 가지 사칙연산은 너무나 간단하지만, 여러 자리 연산의 암산은 우리 삶에서 천재적인 능력으로 분류됩니다. 그러나 수학의 응용은 단순히 천재를 위한 특허가 아닌 실용적이고 대중화되어야 한다. 이것이 계산기의 매력이다.
계산기는 거듭제곱, 제곱근, 지수, 로그, 삼각함수 등과 같은 과학적인 연산도 할 수 있습니다. 이 지식은 중학교 시절 펜과 종이로도 계산할 수 있지만 한계가 있습니다. 일부 그것은 매우 일반적이고 간단한 작업입니다. 복잡해지면 펜과 종이를 사용하여 계산을 수행하는 것도 복잡한 프로젝트가 됩니다. 따라서 계산기를 사용하면 수학 의 응용에 더 가까워질 수 있습니다.

하지만 우리가 학생 시절 배운 수학은 이것보다 훨씬 더 많습니다. 특히 고급 수학(미적분학), 선형 대수학, 확률 및 통계 및 기타 수학적 지식이 널리 사용됩니다(나중에야 배웠습니다). 그런데 그 연산이 매우 복잡하기 때문에 이 지식을 숙지하더라도 적용하기가 쉽지 않습니다. 미적분, 선형대수, 확률, 통계 등의 계산기가 있나요?

답은 그렇습니다. CAS라고 불리는 컴퓨터 대수학 시스템입니다. Python의 Sympy 라이브러리 는 수학 기호를 사용하여 미적분학, 선형 대수학 등도 지원합니다. 계산을 수행합니다.

계산기를 사용하면 진정으로 수학의 복잡한 문제풀이에서 벗어나 수학적 원리와 응용을 배우는 데 에너지를 쏟을 수 있다는 것이 (일의 측면에서) 수학 학습의 의미입니다.

컴퓨터 대수학 시스템

Sympy는 수학 기호에 대한 연산을 구현하고 이를 사용하여 수학 표현식의 기호 파생 및 검증을 수행하고 도함수, 극한 및 미적분학 시스템을 처리할 수 있습니다. 방정식, 행렬 등은 공학용 계산기만큼 간단합니다. Computer Algebra System CAS와 유사합니다. CAS는 일반적으로 시각화 소프트웨어이지만 Wikipedia에서는 Sympy도 CAS로 분류합니다.

Mathematica, Maxima, Matlab(Symbolic Math Toolbox 필요)#🎜🎜과 같은 몇 가지 잘 알려진 수학 소프트웨어 # , Maple 등은 모두 기호 연산을 수행할 수 있습니다. 이전 기사에서는 Python을 R 및 Matlab과 비교한 적이 있습니다. 분명히 Python은 특정 시나리오에서 매우 분명한 이점을 갖고 있으므로 몇 가지 조사를 해보았습니다. . Sympy와 Mathematica의 비교 Sympy는 공식 ​​입력과 차트 생성에 실제로 능숙하지 않습니다. (Python에는 이를 보완하는 다른 라이브러리가 있습니다.) Mathematica가 할 수 있는 모든 것은 기본적으로 Sympy가 할 수 있습니다.

그래서 전문 수학 분야(수학, 데이터 과학 등)에서 Python은 매우 크고 강력한 타사 라이브러리를 보유하고 있어 매우 완벽한 생태학적 체인을 형성합니다. 세상에서 가장 강력하고 하드코어한 소프트웨어도 마찬가지다.

파이썬을 이용한 수학 학습 칼럼의 다음 호에서는 수학 학습을 더욱 쉽고 생생하게 만들어주는 매우 실용적인 수학적 도구와 수학 교육 자료를 소개합니다.
Sympy의 기호 연산

이전에 수학을 공부하고 컴퓨터 대수학 시스템 CAS에 대해 배웠다면 프로그래머라면 수학 기호의 연산에 더 익숙할 것입니다. 이전에는 조금 이해가 안 되실 수도 있으니 아래에서 살펴보겠습니다.

Sympy와 Math 함수의 차이점

먼저 Sympy 라이브러리와 Python에 내장된 Math 함수가 수치를 처리하는 방법을 살펴보겠습니다. 계산이 달라요. 코드를 실행 가능하게 만들기 위해 다음 코드는 Python3의 전체 코드를 기반으로 합니다.

import sympy,math
print(math.sqrt(8))
print(sympy.sqrt(8))
실행 후 결과는 다음과 같이 표시됩니다.

2.8284271247461903
2*sqrt(2)
math 모듈은 부동 소수점 값을 직접 해결하는 반면 Sympy는 LaTex와 결합하여 수학적 기호를 사용하여 결과를 표현합니다. 문법은 교과서에서 가장 친숙한 $2sqrt{2}$를 얻을 수 있습니다.

수학적 기호 및 표현

我们要对数学方程组、微积分等进行运算时,就会遇到变量比如x,y,z,f等的问题,也会遇到求导、积分等代数符号表达式,而Sympy就可以保留变量,计算有代数符号的表达式的。

from sympy import *
x = Symbol('x')
y = Symbol('y')
k, m, n = symbols('k m n')
print(3*x+y**3)

输出的结果为:3*x + y**3,转化为LaTex表示法之后结果为$3x+y^3$,输出的结果就带有x和y变量。Symbol()函数定义单个数学符号;symbols()函数定义多个数学符号。

折叠与展开表达式

factor()函数可以折叠表达式,而expand()函数可以展开表达式,比如表达式:$x^4+xy+8x$,折叠之后应该是$x(x^3+y+8)$。我们来看具体的代码:

from sympy import *
x,y = symbols('x y')
expr=x**4+x*y+8*x
f_expr=factor(expr)
e_expr=expand(f_expr)
print(f_expr)
print(e_expr)

表达式的折叠与展开,对应的数学知识就是因式分解,相关的数学知识在人教版初二的教程里。用Python学习数学专栏的目的就是要Python与初高中、大学的数学学习结合起来,让数学变得更加简单生动。

表达式化简

simplify()函数可以对表达式进行化简。有一些表达式看起来会比较复杂,就拿人教版初二上的一道多项式的乘法为例,简化$(2x)^3(-5xy^2)$。

from sympy import *
x,y = symbols('x y')
expr=(2*x)**3*(-5*x*y**2)
s_expr=simplify(expr)
print(s_expr)

求解方程组

在人教版的数学教材里,我们初一上会接触一元一次方程组,初一下就会接触二元一次方程、三元一次方程组,在初三上会接触到一元二次方程,使用Sympy的solve()函数就能轻松解题。

解一元一次方程

我们来求解这个一元一次方程组。(题目来源于人教版七年级数学上)
$$6 \times x + 6 \times(x-2000)=150000$$

from sympy import *
x = Symbol('x')
print(solve(6*x + 6*(x-2000)-150000,x))

我们需要掌握Python的代码符号和数学符号之间的对应关系,解一元一次方程就非常简单。

解二元一次方程组

我们来看如何求解二元一次方程组。(题目来自人教版七年级数学下)

$$ \begin{cases} x+ y =10,\\ 2 \times x+ y=16   \end{cases} $$

from sympy import *
x,y = symbols('x y')
print(solve([x + y-10,2*x+y-16],[x,y]))

很快就可以得出{x: 6, y: 4},也就是
$$x=6,y=4$$。

解三元一次方程组

我们来看如何解三元一次方程组。(题目来自人教版七年级数学下)

$$ \begin{cases} x+y+z=12,\\ x+2y+5z=22,\\ x=4y.   \end{cases} $$

执行之后,很快可以得出结果{x: 8, y: 2, z: 2},也就是
$$x=8,y=2,z=2$$

解一元二次方程组

比如我们来求解人教版九年级一元二次方程组比较经典的一个题目,$ax^2+bx+c=0$.

from sympy import *
x,y = symbols('x y')
a,b,c=symbols('a b c')
expr=a*x**2 + b*x + c
s_expr=solve( expr, x)
print(s_expr)

执行之后得出的结果为[(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)],我们知道根与系数的关系二次方程会有两个解,这里的格式就是一个列表。转为我们常见的数学公式即为:
$$\frac{-b+\sqrt{-4ac+b^2}}{2a} 、-\frac{b+\sqrt{-4ac+b^2}}{2a}$$

微积分Calculus

微积分是大学高等数学里非常重要的学习内容,比如求极限、导数、微分、不定积分、定积分等都是可以使用Sympy来运算的。
求极限
Sympy是使用limit(表达式,变量,极限值)函数来求极限的,比如我们要求$\lim \limits_{x \to 0} \frac{sinx(x)}{x}$的值。

from sympy import *
x, y, z = symbols('x y z')
expr = sin(x)/x
l_expr=limit(expr, x, 0)
print(l_expr)

执行后即可得到结果为1。

求导

可以使用diff(表达式,变量,求导的次数)函数对表达式求导,比如我们要对$sin(x)e^x$进行$x$求导,以及求导两次,代码如下:

from sympy import *
x,y = symbols('x y')
expr=sin(x)*exp(x)
diff_expr=diff(expr, x)
diff_expr2=diff(expr,x,2)
print(diff_expr)
print(diff_expr2)

求导一次的结果就是exp(x)*sin(x) + exp(x)*cos(x),也就是$e^xsin(x)+e^xcos(x)$;求导两次的结果是2*exp(x)*cos(x),也就是
$$2e^xcosx$$

求不定积分

Sympy是使用integrate(表达式,变量)来求不定积分的,比如我们要求$\int(e^x\sin{(x)} + e^x\cos{(x)})\,dx$

from sympy import *
x,y = symbols('x y')
expr=exp(x)*sin(x) + exp(x)*cos(x)
i_expr=integrate(expr,x)
print(i_expr)

执行之后的结果为:exp(x)*sin(x) 转化之后为:
$$e^xsin(x)$$

求定积分

Sympy同样是使用integrate()函数来做定积分的求解,只是语法不同:integrate(表达式,(变量,下区间,上区间)),我们来看如果求解
$\int_{-\infty}^\infty \sin{(x^2)}\,dx$

from sympy import *
x,y = symbols('x y')
expr=sin(x**2)
i_expr=integrate(expr, (x, -oo, oo))
print(i_expr)

执行之后的结果为sqrt(2)*sqrt(pi)/2,也就是
$$\frac{\sqrt{2}\sqrt{\pi}}{2}$$

Sympy能够做的也远不止这些,初高中、大学的数学运算题在Sympy极为丰富的功能里不过只是开胃入门小菜而已。

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的python视频教程栏目!

위 내용은 Python의 Sympy 대수 기호 연산 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제