Sympy ValueError: первая переменная не может быть числом - PullRequest
1 голос
/ 10 октября 2019

Итак, я кодирую проблему кинематики для физики. У меня есть формула для смещения. Код правильно дает мне производную (скорость) и вторую производную (ускорение). Но когда я пытаюсь найти переменную из любого из производных, я получаю странные ошибки. Это даст мне ценность смещения, хотя!

import numpy as np
import sympy
import matplotlib.pyplot as plt

from sympy import *
x, y, z, t = symbols('x y z t')
i, j, k = symbols('i j k')
init_printing(use_unicode=True)

# **********************************************************************************

#Question 1 - The position of an electron is given by r = 3.0t(i) − 4.0t^2(j) + 2.0(k) (where t is in
#seconds and the coefficients have the proper units for r to be in meters). 
#(a) What is v(t) for the electron? 
#(b) In unit–vector notation, what is v at t = 2.0 s?
#(c) What are the magnitude and direction of v just then?

def r(t):
  return (3*t)*i-(4*t*t)*j+2*k

def v(t):
  return diff(r(t), t)

def a(t):
  return diff(v(t), t)

print("Questions 1 -")
print("a)")
print("r(t) = ", r(t))
print("v(t) = ", v(t))
print("a(t) = ", a(t))
print("")
print('b)')
print("R(2) = ", r(2))
print("v(2) = ", v(2))

Когда я нажимаю Run, это вывод:

Questions 1 -
a)
r(t) =  3*i*t - 4*j*t**2 + 2*k
v(t) =  3*i - 8*j*t
a(t) =  -8*j

b)
R(2) =  6*i - 16*j + 2*k
Traceback (most recent call last):
  File "/tmp/sessions/b12e4bdebdf741f3/main.py", line 48, in <module>
    print("v(2) = ", v(2))
  File "/tmp/sessions/b12e4bdebdf741f3/main.py", line 35, in v
    return diff(r(t), t)
  File "/usr/local/lib/python3.6/dist-packages/sympy/core/function.py", line 1979, in diff
    return Derivative(f, *symbols, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/sympy/core/function.py", line 1156, in __new__
    raise ValueError("First variable cannot be a number: %i" % v)
ValueError: First variable cannot be a number: 2

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Краткий ответ:

v(2) означает дифференцирование r(2) относительно 2.

2 не является символом, поэтому вы получаете ошибку. Вам нужен дополнительный аргумент в вашей функции v().

def v(t,at_point):
    return diff(r(t), t, at_point)

v(t,2)
#-8⋅j

Длинный ответ:

Проблема заключается в следующемто, что когда вы делаете:

v(2)

, вы запрашиваете:

diff(r(2), 2)

Последнее означает дифференцировать r(2) относительно 2. 2 не является символом, поэтому вы получите ошибку. Вам нужен дополнительный аргумент.

def v(t,at_point):
    return diff(r(t), t, at_point)
0 голосов
/ 10 октября 2019

Вы должны определить свою функцию следующим образом:

def v(t,t0):
   return diff(r(t), t, t0)

и затем вызвать ее, используя v(t,2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...