2009-02-03 3 views
19

나는 extreamly 수학과 프로그래밍 및 계획 시작에 상징적 인 수학 프로젝트 에서 처음부터 관심이입니다.상징 수학 Python?

  1. 좋은 프로젝트 아이디어입니까?

  2. 어디서부터 시작해야할까요?

  3. 어떻게하면 프로젝트에 접근해야합니까?

  4. 좋은 자료가 있습니까?

미리 감사드립니다.

답변

19
  1. 그것은 프로그래밍 기술을 연습 할 수있는 좋은 프로젝트입니다. 당신이

  2. 시작하는 다른 사람들이 당신이 allone 처음부터 시작하지 않으 프로젝트입니다 사용하고자하는 실제 라이브러리를 ... 만들고 싶은 경우 :는 솔루션에서보세요 그것들은 이미 거기에 있고 당신이 다른 것을하고 싶은 것이 무엇인지 생각합니다. 프로젝트가 다른 프로젝트와 어떻게 다른가요?

  3. 리소스 : SymPy is a Python library for symbolic mathematics

+4

다른 라이브러리 옵션은 Sage (http://www.sagemath.org/)를 사용하는 것입니다. –

4

@Resources : pythonica을 볼 수 있습니다. 이것은 Python으로 Mathematica 유형 프로그램을 구현하려는 시도입니다 (소스 코드는 다운로드 할 수 있음).

3

pySym Blog은 아이디어와 시작을 ​​얻고 다른 사람들이 python & 상징적 인 수학으로 무엇을하는지에 대해 관심을 가질 수 있습니다. SympyCore : 자원의 방법으로

1

SympyCore 프로젝트의 목적은 파이썬 프로그래밍 언어로 상징적 인 표현을 표현하고 조작 할 수있는 새로운 고성능 솔루션을 추구하고, 새로운 시도하는 것입니다

(Computer Algebra System, CAS)로 확장하기 쉽도록 근본적으로 일관되고 충분히 일반적인 상징적 모델을 달성 할 수있는 상징적 모델을 제공합니다.

7

기호 수학이 재미있는 프로젝트입니다. 다른 사람이 질문에 상관없이 나타나는지는 알 수 없습니다.

나는 두 가지를 수년에 걸쳐 작성했습니다. 가장 멋진 부분은 SQL에 대한 절이었습니다. 절은 SQL에 대한 몇 가지 간단한 기호 조작을 통해 몇 가지 추가 AND 조건에서 접을 수있었습니다. 완전한 "솔버"또는 "옵티마이 저"가 아니거나 가능한 모든 SQL where 절의 기호 조작입니다. 덜 차가운 것은 디버거 용이었습니다. (수학적으로) 스택 오프셋을 계산하기 위해 복잡한 수학을 수행했습니다. 피연산자, 연산자, 함수 등 당신은 이러한 개체에 참여해야 조작 무엇을 결정해야

-

당신은 수학적 표현의 요소 클래스를 정의하여 시작합니다.표현식에 대한 구체적인 가치를 얻는 것은 쉽고 분명합니다. 모든 변수에 바인딩이있는 경우부터 시작하십시오.

그런 다음 일부 변수가 언 바운드 상태 인 사례를 처리하면 식의 부분 만 평가할 수 있습니다.

그런 다음 정규식으로 표현식을 재 배열하십시오. 즉, 부분적으로 평가를했고 Add(Variable(x), Add(Variable(x), Lit(3)))이 있습니다. 이것을 Add(Multiply(Lit(2), Variable(x)), Lit(3))으로 변환하는 규칙을 작성해야합니다.

아주 멋진 연습 중 하나는 괄호를 최적화하여 출력물의 의미를 파악하는 데 필요한 괄호가 가장 적도록하는 것입니다.

우리가 대수 조작을하기 위해 학교에서 배운 많은 "표현 변형"규칙이 많이 있습니다. 그들 중 많은 것들.

특히 변수를 분리하기 위해 방정식을 재정렬하면 어떤 경우에는 정말 어려울 수 있습니다.

파생 변환은 쉽지만, 상징적 통합은 엄청난 특별한 경우에 실제로 정말 어렵습니다.

기본 사항은 재미 있습니다. 얼마나 멀리 가고 싶은가에 따라 점점 더 어려워집니다.

10

1이 훌륭한 프로젝트 아이디어입니까?

예; 아주 빨리 프로그래밍 능력을 테스트하고 확장 할 수있는 흥미로운 작업을 끊임없이 제공 할 것으로 기대됩니다.

2. 시작 하시겠습니까?

두 번째는 기존 작품을 살펴보아야한다는 것입니다. SAGE는 매우 인상적입니다. 제가 조언을 구한 적이 있다면, 우선 숫자와 기호로 산술을 수행하는 기본 시스템을 작성하는 것이 좋습니다. 그런 다음 SAGE를보고 시스템을 확장하는 모듈을 작성하십시오. 다시 말해서, 자체적으로 모든 것을 시도하기보다는 커다란 것의 제공자가됩니다. Mathematica와 Maple, Macsyma와 Axiom도보십시오. 후자 2는 무료 다 (나는 생각한다). 그러나 그들은 모두 잘 문서화되어 있고 아이디어와 도전의 위대한 원천이다.

3.이 프로젝트에 어떻게 접근해야합니까?

사람이 코끼리를 먹는 것에 접근합니다. 한 번에 하나씩 물지. 좀 더 진지하게 말하자면, 표현의 표현과 치아를자를 수있는 몇 가지 기본 기능 (다항식에 대한 산술)과 같은 몇 가지 핵심 쟁점이 있다고 생각합니다.

4. 좋은 리소스가 있습니까?

로트 및 로트. Google은 '컴퓨터 대수학', '용어 재 작성'을 말합니다. Amazon에서 사용할 수있는 기능을 살펴보십시오. 액세스 권한이있는 경우 ACM 디지털 라이브러리를 확인하십시오.

행운을 빈다.

1

필자는이 기술 수준의 프로그래머에게 훌륭한 프로젝트라고 생각합니다. 유용하기에 충분할만큼 강력한 상징적 인 계산기를 구현하는 것은 꽤 쉽습니다. 폭 넓은 작업을 계속한다면, 오랫동안 자신을 차지할 수있는 재미있는 기능이 많이 있습니다. 당신이 깊이를 선택하면, 곧 그 것들이 매우 열심히 얻을 것을 발견 할 것이다. 그것이 당신이 좋아하는 것이라면, 당신은 무한정 도전 할 수 있습니다.

많은 훌륭한 자료가 있습니다.나는 zur Gathen과 Gerhard가 "Modern Computer Algebra"라는 책을 추천한다. 비록 그것이 일반적인 기호 조작보다 특별한 형태 (다항식, 정수, 행렬)의 산술에 더 관심이있다. 처음 시작할 때 상징적 인 수학은 Lisp에서 개념적으로 매우 간단하고 Python으로 상징 엔진을 만들 수 있기 때문에 실제로 Lisp 또는 Scheme 튜토리얼을 살펴보면 도움이 될 것입니다. mini-Lisp을 기초로 구현하십시오.

다른 사람들이 지적했듯이 SymPy와 sympycore에서 영감이나 구체적인 알고리즘을 볼 수 있습니다. 두 프로젝트 중 하나의 소스 코드는 약간 복잡합니다 (그러나 배우기는 너무 어렵지 않습니다).

(주말 프로젝트로 사용하기 때문에 조금 뒤틀리고 나중에 작업하지는 않았습니다.) 약 200 줄의 코드로 일반적인 심볼릭 엔진을 구현합니다. Symbolic arithmetic과 symbolic boolean algebra를 구현하는 300 줄의 코드가 있습니다. SymPy보다 더 쉽게 파고들 수는 있지만, 거기에는 모두 당신이 쉽게 발견 할 수있는 것들이 있습니다.)