PYTHON PARA INGENIEROS (PPI)

Independiente de que seas o no ingeniero los conceptos básicos de programación son una herramienta necesaria para resolver problemas y Python es un lenguaje practico y fácil de aprender.

domingo, 7 de abril de 2024

Problemas en Sympy de Python

 Fuente: https://docs.sympy.org/latest/tutorials/intro-tutorial/gotchas.html

Problemas

Para empezar, debemos dejar claro algo sobre SymPy. SymPy no es nada más que una biblioteca de Python, como NumPy, Django, o incluso módulos en el Biblioteca estándar de Python syso re. Lo que esto significa es que SymPy no No agregar nada al lenguaje Python. Limitaciones inherentes a la El lenguaje Python también es inherente a SymPy. También significa que SymPy intenta Utilice modismos de Python siempre que sea posible, lo que facilita la programación con SymPy. aquellos que ya están familiarizados con la programación con Python. Como ejemplo sencillo, SymPy usa la sintaxis de Python para crear expresiones. Multiplicación implícita (como 3xo 3 x) no está permitido en Python y, por lo tanto, no está permitido en SymPy. Multiplicar 3y x, debes escribir 3*xcon el *.

Símbolos

Una consecuencia de este hecho es que SymPy se puede utilizar en cualquier entorno. donde Python está disponible. Simplemente lo importamos, como lo haríamos con cualquier otro. biblioteca:

from sympy import *

Esto importa todas las funciones y clases de SymPy a nuestro interactivo Sesión de Python. Ahora supongamos que comenzamos a hacer un cálculo.

x + 1
Traceback (most recent call last):
...
NameError: name 'x' is not defined

¡Ups! ¿Que pasó aquí? Intentamos usar la variable. x, pero nos dice eso xno está definido. En Python, las variables no tienen significado hasta que están definidos. SymPy no es diferente. A diferencia de muchas manipulaciones simbólicas sistemas que haya utilizado, en SymPy, las variables no se definen automáticamente. Para definir variables debemos utilizar symbols.

x = symbols('x')
x + 1
x + 1

symbolstoma una cadena de nombres de variables separados por espacios o comas, y crea símbolos a partir de ellos. Luego podemos asignarlos a nombres de variables. Más adelante, investigaremos algunas formas convenientes en las que podemos solucionar este problema. Por ahora, definamos simplemente los nombres de variables más comunes, x, y, y z, para uso durante el resto de esta sección

x, y, z = symbols('x y z')

Como nota final, observamos que el nombre de un Símbolo y el nombre del La variable a la que está asignada no necesita tener nada que ver entre sí.

a, b = symbols('b a')
a
b
b
a

Aquí hemos hecho lo muy confuso de asignar un símbolo con el nombre aa la variable by un símbolo del nombre ba la variable a. Ahora la variable de Python llamada aapunta al símbolo SymPy llamado b, y viceversa. Qué confuso. También podríamos haber hecho algo como

crazy = symbols('unrelated')
crazy + 1
unrelated + 1

Esto también muestra que los símbolos pueden tener nombres de más de un carácter si desear.

Por lo general, la mejor práctica es asignar símbolos a las variables de Python del mismo nombre, aunque hay excepciones: Los nombres de los símbolos pueden contener caracteres que no están permitidos en los nombres de variables de Python, o que simplemente quieran evitar escribir nombres largos asignando símbolos con nombres largos a una sola letra Python variables.

Para evitar confusiones, a lo largo de este tutorial, los nombres de los símbolos y las variables de Python Los nombres siempre coincidirán. Además, la palabra “Símbolo” se referirá a un El símbolo SymPy y la palabra "variable" se referirán a una variable de Python.

Finalmente, asegurémonos de comprender la diferencia entre símbolos SymPy y Variables de Python. Considera lo siguiente:

x = symbols('x')
expr = x + 1
x = 2
print(expr)

¿Cuál crees que será el resultado de este código? si pensaras 3, te equivocas. veamos que pasa realmente

x = symbols('x')
expr = x + 1
x = 2
print(expr)
x + 1

Cambiando xa 2no tuvo ningún efecto sobre expr. Esto es porque x = 2 cambia la variable de Python xa 2, pero no tiene ningún efecto en SymPy Símbolo x, que fue lo que usamos para crear expr. cuando creamos expr, la variable de Python xera un símbolo. Después de que lo creamos, nosotros cambió la variable de Python xa 2. Pero exprsigue siendo el mismo. Este El comportamiento no es exclusivo de SymPy. Todos los programas Python funcionan de esta manera: si un se cambia la variable, las expresiones que ya fueron creadas con esa variable no cambie automáticamente. Por ejemplo

x = 'abc'
expr = x + 'def'
expr
'abcdef'
x = 'ABC'
expr
'abcdef'

Consejo rapido

Para cambiar el valor de un símbolo en una expresión, use subs

x = symbols('x')
expr = x + 1
expr.subs(x, 2)
3

En este ejemplo, si queremos saber qué expres con el nuevo valor de x, necesitamos reevaluar el código que creó expr, a saber, expr = x + 1. Esto puede resultar complicado si se crean varias líneas. expr. Uno La ventaja de utilizar un sistema de cálculo simbólico como SymPy es que podemos construir una representación simbólica para expry luego sustituir xcon valores. La forma correcta de hacer esto en SymPy es usar subs, Cuál podría ser discutido con más detalle más adelante.

x = symbols('x')
expr = x + 1
expr.subs(x, 2)
3

Signos iguales

Otra consecuencia muy importante del hecho de que SymPy no se extiende La sintaxis de Python es esa =no representa igualdad en SymPy. Más bien es la asignación de variables de Python. Esto está codificado en el lenguaje Python, y SymPy no intenta cambiar eso.

Puedes pensar, sin embargo, que ==, que se utiliza para pruebas de igualdad en Python, se usa para SymPy como igualdad. Esto tampoco es del todo correcto. Dejar veamos qué pasa cuando usamos ==.

x + 1 == 4
False
en lugar de tratar x + 1 == 4simbólicamente, acabamos de llegar False. En simpy, ==representa una prueba exacta de igualdad estructural. Esto significa que a == bsignifica que estamos preguntando si

. Siempre recibimos un boolcomo el resultado de ==. Hay un objeto separado, llamado Eq, que puede ser utilizado para crear igualdades simbólicas

Eq(x + 1, 4)
Eq(x + 1, 4)
Hay una advertencia adicional sobre ==también. Supongamos que queremos saber si

. Podríamos intentar algo como esto:

(x + 1)**2 == x**2 + 2*x + 1
False
Tenemos Falsede nuevo. Sin embargo, es igual

. Qué esta pasando aqui? ¿Encontramos un error en SymPy o simplemente no es potente? ¿Suficiente para reconocer este hecho algebraico básico?

Recuerda desde arriba que ==representa exacta de igualdad estructural. "Exacta" aquí significa que dos expresiones se compararán igual ==sólo si son exactamente iguales estructuralmente. Aquí,

y

son No es lo mismo estructuralmente. Uno es la potencia de la suma de dos términos, y el otro es la suma de tres términos.

Resulta que al usar SymPy como biblioteca, tener ==prueba de exactitud La igualdad estructural es mucho más útil que representar valores simbólicos. igualdad, o hacer que pruebe la igualdad matemática. Sin embargo, como nuevo usuario, probablemente le interesarán más los dos últimos. ya hemos visto una alternativa a la representación simbólica de las igualdades, Eq. para probar si dos cosas son iguales, es mejor recordar el hecho básico de que si

, entonces . Por lo tanto, la mejor manera de comprobar si es tomar

aprenderemos Más adelante que la función para hacer esto se llama simplify. Este El método no es infalible; de ​​hecho, se puede demostrar teóricamente que es imposible. determinar si dos expresiones simbólicas son idénticamente iguales en general, pero para la mayoría de las expresiones comunes, funciona bastante bien.

a = (x + 1)**2
b = x**2 + 2*x + 1
simplify(a - b)
0
c = x**2 - 2*x + 1
simplify(a - c)
4*x

También existe un método llamado equalsque prueba si dos expresiones son iguales evaluándolos numéricamente en puntos aleatorios.

a = cos(x)**2 - sin(x)**2
b = cos(2*x)
a.equals(b)
True

Dos notas finales: ^y /

Quizás hayas notado que hemos estado usando **para la exponenciación en su lugar de la norma ^. Esto se debe a que SymPy sigue las convenciones de Python. En Pitón, ^representa lógica exclusiva o. SymPy sigue esta convención:

True ^ False
True
True ^ True
False
Xor(x, y)
x ^ y

Finalmente, conviene realizar una pequeña discusión técnica sobre cómo funciona SymPy. Cuando escribes algo como x + 1, el símbolo SymPy xse agrega a la Python entero 1. Las reglas del operador de Python permiten que SymPy le diga a Python que los objetos SymPy saben cómo agregarse a las entradas de Python, y así 1es convertido automáticamente al objeto SymPy Integer.

Este tipo de magia del operador ocurre automáticamente detrás de escena, y usted Rara vez necesitamos siquiera saber lo que está sucediendo. Sin embargo, hay uno excepción. Siempre que combine un objeto SymPy y un objeto SymPy, o un SymPy objeto y un objeto Python, obtienes un objeto SymPy, pero siempre que combinas dos objetos Python, SymPy nunca entra en juego, por lo que obtienes un Python objeto.

type(Integer(1) + 1)
<class 'sympy.core.numbers.Integer'>
type(1 + 1)
<... 'int'>

Por lo general, esto no es gran cosa. Las entradas de Python funcionan de manera muy similar a SymPy Números enteros, pero hay una excepción importante: la división. En SymPy, el La división de dos Enteros da un Racional:

Integer(1)/Integer(3)
1/3
type(Integer(1)/Integer(3))
<class 'sympy.core.numbers.Rational'>

Pero en Python /representa división entera o punto flotante división, dependiendo de si estás en Python 2 o Python 3, y dependiendo sobre si has corrido o no from __future__ import divisionen pitón 2 que ya no es compatible con versiones superiores a SymPy 1.5.1:

from __future__ import division
1/2
0.5

Para evitar esto, podemos construir el objeto racional explícitamente.

Rational(1, 2)
1/2

Este problema también surge cada vez que tenemos una expresión simbólica más grande con int/inten eso. Por ejemplo:

x + 1/2
x + 0.5

Esto sucede porque Python primero evalúa 1/2en 0.5, y luego que se convierte en un tipo SymPy cuando se agrega a x. Nuevamente podemos obtener alrededor de esto creando explícitamente un Racional:

x + Rational(1, 2)
x + 1/2

Hay varios consejos para evitar esta situación en los errores y trampas. documento.

Otras lecturas

Para obtener más información sobre los temas tratados en esta sección, consulte Errores y dificultades .

By L.S.R at abril 07, 2024
Enviar esto por correo electrónicoBlogThis!Compartir en XCompartir en FacebookCompartir en Pinterest
Labels: matematica, math, Python, sympy

No hay comentarios.:

Publicar un comentario

Entrada más reciente Entrada antigua Página Principal
Suscribirse a: Comentarios de la entrada (Atom)

Entradas recientes

Sympy: Mecanica, Ejemplo de oscilador con un pendulo

  Oscilador Duffing con un péndulo En este ejemplo demostramos el uso de la funcionalidad proporcionada en sympy.physics.mechanics para de...

Entradas Populares

  • Sympy: Indice de tutoriales de fisica
      Tutoriales de física Los tutoriales de física tienen como objetivo presentar a Sympy a los usuarios que no lo han hecho previamente usó ...
  • Sympy: Mas herramientas
      Sobre Sympy es una biblioteca de Python para las matemáticas simbólicas. Su objetivo es convertirse en un sistema de ...
  • Sympy: Mecanica, Ejemplo de oscilador con un pendulo
      Oscilador Duffing con un péndulo En este ejemplo demostramos el uso de la funcionalidad proporcionada en sympy.physics.mechanics para de...
  • TESPy: Bomba de calor.
        Fig1. Topología típica de una bomba de calor  Este tutorial es la continuación del tutorial de la introducción . Primero, revisaremos ...
  • MatplotLib: Guia de inicio rapido para Dummies
      Guía de inicio rápido Este tutorial cubre algunos patrones de uso básicos y las mejores prácticas para ayudarlo a comenzar con matplotlib....
  • Importar modulos personalizados de Pthton en Google Colab. ¿Una tarea imposible?
      Cómo importar módulos personalizados en Google Colab Google Colab es una plataforma en línea popular para ejecutar ex...
  • Quieres compartir una aplicacion de Python con el mundo? entonces requieres Pyinstaller
      Manual de Pyinstaller Versión : Pyinstaller 6.14.1 Página de inicio : https://pyinstaller.org/ Contacto : pyinstaller @ googlegroups . ...
  • Fluids en Python: Herramienta para ingenieros quimicos, mecanicos y civiles
    ¡Bienvenido a la documentación de Fluids! Fluids es un software de código abierto para ingenieros y técnicos que trabajan en el Campos ...
  • Sympy: Indice de tutoriales
      Tutorial introductorio Este tutorial tiene como objetivo brindar una introducción a SymPy para alguien que aún no lo ha hecho. Usé la bi...
  • Sympy: Indice de Tutoriales de biomecanica
      Tutoriales de biomecánica Estos tutoriales proporcionan una guía completa sobre el uso de Sympy para Simulaciones y análisis biomecánicos....

Buscar este blog

  • PAGINA PRINCIPAL
  • CANAL DE YOUTUBE
  • PYTHON BÁSICO
  • PYTHON INTERMEDIO
  • PYTHON AVANZADO
  • PYTHON POO
  • GOOGLE COLAB

CONTADOR DE VISITANTES

contador de visitas para mi web

Colaboradores

  • L.S.R
  • Python

Archivo del Blog

  • ►  2025 (158)
    • ►  junio 2025 (15)
    • ►  abril 2025 (18)
    • ►  marzo 2025 (22)
    • ►  febrero 2025 (64)
    • ►  enero 2025 (39)
  • ▼  2024 (57)
    • ►  noviembre 2024 (20)
    • ►  octubre 2024 (2)
    • ►  septiembre 2024 (2)
    • ►  agosto 2024 (7)
    • ►  julio 2024 (1)
    • ►  junio 2024 (6)
    • ►  mayo 2024 (4)
    • ▼  abril 2024 (7)
      • PySDR: una guía para SDR y DSP usando Python by Dr...
      • Introducciòn a la libreria Scikit-learn
      • Bokeh: otra libreria de visualizacion de Python
      • Una introduccion a la Libreria Bokeh en Python
      • Funciones de Sympy en Pyhton
      • Problemas en Sympy de Python
      • Que es la computacion simbolica en python. Introdu...
    • ►  marzo 2024 (6)
    • ►  enero 2024 (2)
  • ►  2023 (43)
    • ►  noviembre 2023 (1)
    • ►  octubre 2023 (2)
    • ►  septiembre 2023 (1)
    • ►  julio 2023 (10)
    • ►  abril 2023 (15)
    • ►  marzo 2023 (7)
    • ►  febrero 2023 (3)
    • ►  enero 2023 (4)
  • ►  2022 (63)
    • ►  septiembre 2022 (2)
    • ►  julio 2022 (21)
    • ►  junio 2022 (40)

Links para aprendizaje de Python

  • Aprenda Python con Alf
  • Aprende Python por tu cuenta
  • Basicos de ciencia e ingeniería
  • Blog sobre programación
  • Clcoding.com
  • Freecodecamp.org
  • J2logoPython.com
  • LearnPython.org
  • ProgramarYa.com
  • Sitio de google dedicado a Python
  • Sitio oficial de la fundación python

Traductor

Wikipedia

Resultados de la búsqueda

Mi lista de blogs

  • LUBRICATION´S ROOM (L.S.R)
    Articulo de Revista del año 1998. Machinery Lubrication Magazine. Analisis de aceite y analisis de vibraciones - Estudio de caso de integración de análisis de aceite y análisis de vibracionesDrew Troyer Para industrias como la generación de energía y la petroquími...
    Hace 1 día.
  • INGENIERÍA MECÁNICA Y ALGO MÁS
    Pildoras para la memoria: MSN messenger - *MSN Messenger * *MSN Messenger,* también conocido como Messenger, fue un programa de mensajería instantánea creado por Microsoft que permitía a los usuari...
    Hace 1 día.
  • LEARNING ENGLISH IN COLOMBIA
    ¿Mi hijo o hija debería aprender inglés americano o británico? - Preguntas y respuestas sobre el direccionamiento para el aprendizaje del ingles en niños y niñas Fuente: Cambridge University ¿Mi hijo debería aprender in...
    Hace 3 meses.

Seguidores

Etiquetas

  • ** (1)
  • **Kwargs (1)
  • *args (1)
  • / (1)
  • // (1)
  • % (1)
  • acumulador (1)
  • Alf (3)
  • algebra (3)
  • Algoritmo (14)
  • Anaconda (2)
  • aprendizaje automatico (1)
  • areas (1)
  • aritmetica (2)
  • array (2)
  • articulo (1)
  • audio (1)
  • avanzado (1)
  • biomecanica (1)
  • BlockChain (2)
  • Bokeh (2)
  • bolean (7)
  • bucles (4)
  • calculo (2)
  • Calendar (2)
  • captchas (1)
  • Cheatsheets (1)
  • ciencia de datos (15)
  • Clcoding (4)
  • cloud (1)
  • codigo (5)
  • código (4)
  • Colab (27)
  • colecciones (1)
  • comentarios (2)
  • compartir (1)
  • concatenar (1)
  • conceptos (7)
  • condicional (1)
  • confiabilidad (3)
  • contador (1)
  • convertidor (2)
  • coursera (26)
  • curso (53)
  • curvas (1)
  • datos (3)
  • Datos simples (10)
  • def (1)
  • depuracion (2)
  • desafios (2)
  • dibujo (3)
  • diccionarios (3)
  • Django (1)
  • Docstring (2)
  • DSP (1)
  • ecuaciones (7)
  • editores (8)
  • Efrain Oviedo (8)
  • ejercicio (5)
  • ejercicios (8)
  • elif (13)
  • else (14)
  • entorno virtual (2)
  • error (9)
  • escritura (1)
  • estadistica (5)
  • estilos (1)
  • estructura (1)
  • False (4)
  • ficheros (3)
  • files (2)
  • fisica (3)
  • float (5)
  • fluids (1)
  • for (9)
  • Función (3)
  • funciones (35)
  • GitHub (1)
  • glosario (2)
  • Google (2)
  • Grabadora (1)
  • graficos (9)
  • gratis (1)
  • Hola Mundo (3)
  • IA (1)
  • IDE (4)
  • idiomas (1)
  • If (22)
  • import (1)
  • ing. mecanica (10)
  • ingenieria (11)
  • Ingles (1)
  • input() (6)
  • int (7)
  • Ipython (1)
  • Jupyter (21)
  • Kernel (1)
  • Key words (2)
  • Learning (16)
  • lenguaje (2)
  • librerias (1)
  • libros (3)
  • Link (1)
  • Linkedin (2)
  • listas (11)
  • Logica (15)
  • Lógica (1)
  • matematica (15)
  • math (7)
  • Matplotlib (10)
  • matriz (1)
  • Microsoft (12)
  • modulos (11)
  • mp3 (1)
  • nivel básico (4)
  • Notebook (3)
  • Numba (1)
  • numbers (2)
  • numeros (8)
  • Numpy (23)
  • ofimatica (1)
  • open Source (1)
  • operadores (9)
  • ortografia (1)
  • Pandas (14)
  • parametros (1)
  • pdf (3)
  • PipManager (2)
  • POO (3)
  • Practical_books (3)
  • principiantes (6)
  • print (5)
  • probabilidad (1)
  • producto (1)
  • programación (60)
  • pruebas (1)
  • py (1)
  • Pycharm (1)
  • Pyfiglet (2)
  • Pyinstaller (1)
  • Python (308)
  • Pytips (4)
  • QR (6)
  • quiz (16)
  • Radio (1)
  • random (4)
  • range (2)
  • recursos (9)
  • Reliability (3)
  • resta (1)
  • reto (2)
  • RF (1)
  • Saltos de línea (1)
  • Scikit-learn (1)
  • Scipy (8)
  • SDR (1)
  • SENA (4)
  • Señales (1)
  • series (2)
  • set (1)
  • sin(x) (1)
  • sintaxis (1)
  • solucion (1)
  • Spyder (1)
  • str (1)
  • strings (11)
  • suma (1)
  • sympy (12)
  • temperatura (1)
  • termodinamica (1)
  • tespy (3)
  • test (2)
  • textos (2)
  • Thermo (1)
  • thinkCspy (55)
  • Time (1)
  • Tinyurl (2)
  • tips (3)
  • tkinter (1)
  • transferencia de calor (3)
  • Trucos (18)
  • True (4)
  • TTS (1)
  • tuplas (3)
  • turtle (10)
  • tutorial (7)
  • type (6)
  • UniAndes (29)
  • valores (2)
  • variables (10)
  • video (1)
  • visual Studio code (43)
  • voz (1)
  • wav (1)
  • while (6)
  • wifi (1)
  • YouTube (1)
  • zodiaco (2)

Suscribirse a

Entradas
Atom
Entradas
Comentarios
Atom
Comentarios
Construcción: lubricationsroom755@gmail.com. Tema Filigrana. Imágenes del tema de fpm. Con tecnología de Blogger.