2009-02-03 6 views
19

Je suis extreamly intéressé par les mathématiques et la programmation et la planification pour commencer maths symboliques projet à partir de zéro.Mathématiques symboliques Python?

  1. Est-ce une bonne idée de projet?

  2. Par où commencer?

  3. Comment devrait-on aborder ce projet ?

  4. De bonnes ressources?

Merci d'avance.

Répondre

19
  1. Il est un bon projet pour la pratique des compétences en programmation. Mais si vous voulez créer une véritable bibliothèque que d'autres personnes veulent utiliser est un projet que vous ne voulez pas commencer à partir de zéro et allone ...

  2. où commencer: Jetez un oeil sur les solutions qui sont déjà là et pensez à ce que vous voulez faire différemment. Comment votre projet sera différent des autres?

  3. ressources: SymPy is a Python library for symbolic mathematics

+4

Une autre option de bibliothèque est d'utiliser Sage (http://www.sagemath.org/) –

4

@Resources: Vous pouvez jeter un oeil à pythonica - c'était une tentative d'implémenter un programme de type Mathematica en Python (le code source est disponible en téléchargement).

3

Cette pySym Blog pourrait également vous intéresser pour obtenir des idées et des démarreurs, et apprendre ce que les autres font avec python & maths symboliques.

1

Plus de la manière des ressources: SympyCore:

L'objectif du projet SympyCore est de rechercher de nouvelles solutions de haute performance pour représenter et manipuler des expressions symboliques dans le langage de programmation Python, et d'essayer de nouvelles des modèles symboliques pour réaliser un modèle symbolique fondamentalement cohérent et suffisamment général qui serait facile à étendre à un système d'algèbre informatique (CAS).

7

mathématiques symbolique est un projet amusant. Que quelqu'un l'utilise ou non ne semble pas avoir d'importance dans votre question, alors plongez.

J'ai écrit deux d'entre eux au fil des ans. Le plus cool était un pour SQL où clauses - il a fait quelques manipulations symboliques triviales sur le SQL pour replier certaines conditions ET supplémentaires. Pas un "solveur" complet ou "optimiseur" ou quoi que ce soit, juste quelques manipulations symboliques de tout SQL où clause possible. Le moins cool était pour un débogueur; il a fait des calculs complexes pour calculer (offensivement) des offsets pour les variables.

Vous commencez par définir des classes pour les éléments d'une expression mathématique - opérandes, opérateurs, fonctions, etc.

Vous devez décider quelles manipulations ces objets doivent participer.Obtenir une valeur concrète pour une expression est une chose facile et évidente. Commencez par le cas où toutes les variables ont une liaison.

Puis gérer le cas où certaines variables restent non liées, et vous pouvez seulement évaluer des parties de l'expression.

Puis gérer réorganiser une expression dans une forme canonique. Par exemple, vous avez effectué une évaluation partielle et avez Add(Variable(x), Add(Variable(x), Lit(3))). Vous devez écrire des règles pour transformer ceci en Add(Multiply(Lit(2), Variable(x)), Lit(3)).

Un exercice très cool optimise la parenthèse pour que la sortie imprimée ait le moins de parenthèses nécessaire pour capturer la signification.

Il y a beaucoup, beaucoup d'autres règles de "transformation d'expression" que nous apprenons tous à l'école pour faire des manipulations algébriques. Beaucoup d'entre eux.

En particulier, réarranger une équation pour isoler une variable peut être très difficile dans certains cas.

Faire la transformation dérivée est facile, mais l'intégration symbolique est vraiment, vraiment difficile avec une tonne de cas particuliers.

Les bases sont amusantes. Selon la distance que vous voulez aller, il devient progressivement plus difficile.

10

1.Est-ce une bonne idée de projet?

Oui; Je m'attendrais à ce qu'il fournisse une source inépuisable de travail intéressant qui, assez rapidement, testera et étendra vos pouvoirs de programmation.

2.Où commencer?

Je seconde les autres suggestions que vous devriez regarder le travail existant. SAGE est très impressionnant et si vous aviez demandé mon avis, je vous suggérerais d'abord d'écrire un système de base pour faire de l'arithmétique avec des nombres et des symboles; Ensuite, jetez un oeil à SAGE et écrivez un module pour étendre le système, en d'autres termes, devenez un contributeur à quelque chose de plus grand plutôt que d'essayer de le faire tout seul. Regardez aussi Mathematica et Maple, Macsyma et Axiom. Les deux derniers sont gratuits (je pense) mais ils sont tous bien documentés en ligne et une excellente source d'idées et de défis.

3.Comment aborder ce projet? Comme on s'approcherait de manger un éléphant. Une bouchée à la fois. Plus sérieusement, je pense qu'il y a quelques problèmes de base, tels que la représentation des expressions, et certaines fonctionnalités de base (arithmétique sur les polynômes) sur lesquelles vous pouvez vous couper les dents.

4.Toutes bonnes ressources?

Beaucoup et beaucoup. google pour 'computer algebra', 'réécriture de termes'. Jetez un oeil à ce qui est disponible sur Amazon. Et, si vous avez accès, consultez la bibliothèque numérique ACM

Bonne chance.

1

Je pense que c'est un excellent projet pour un programmeur de n'importe quel niveau de compétence. Il est assez facile de mettre en œuvre une calculatrice symbolique qui est juste assez puissante pour être utile. Si vous continuez à travailler sur la largeur, il ya tellement de fonctionnalités amusantes à ajouter que vous pouvez vous occuper de lui pendant une longue période. Si vous choisissez d'aller pour la profondeur, vous trouverez que les choses vont bientôt très dur. Vous pouvez vous défier indéfiniment, si c'est ce que vous aimez.

Il existe de nombreuses ressources utiles.Je recommande le livre "Modern Computer Algebra" de zur Gathen et Gerhard, bien qu'il s'intéresse plus à l'arithmétique dans des formes spéciales (polynômes, entiers, matrices) qu'à la manipulation symbolique générale. Quand vous débutez, vous pouvez être mieux aidé en regardant un tutoriel Lisp ou Scheme, parce que les mathématiques symboliques sont conceptuellement très simples à faire en Lisp, et pour construire un moteur symbolique en Python, vous devrez plus ou moins implémenter un mini-Lisp comme fondation.

Comme d'autres l'ont souligné, vous pouvez utiliser SymPy et sympycore pour trouver des algorithmes d'inspiration ou des algorithmes concrets. Le code source de chaque projet est un peu complexe (mais certainement pas trop difficile à apprendre).

(Si je peux brancher un peu, il y a un peu de temps (comme un projet de fin de semaine - il est très petit et je n'ai pas travaillé dessus depuis) ​​Il implémente un moteur symbolique générique dans environ 200 lignes de code et puis il y a 300 lignes de code qui implémentent l'arithmétique symbolique et l'algèbre booléenne symbolique, avec une simplification très rudimentaire, peut-être plus facile à creuser que SymPy, mais tout ce que vous pouvez facilement découvrir est peut-être plus amusant. Cela est possible.)

Questions connexes