Как я могу отформатировать это, чтобы я не получил ошибку? ошибка math.cos () - PullRequest
1 голос
/ 25 февраля 2020

Я пытаюсь решить это точное уравнение с помощью python, но не могу понять, как

import sympy
import scipy
import numpy


x = sympy.symbols("x")
y = sympy.symbols("y")
M= (1/x + 2*(y**2)*x)
N= (2*y*(x**2) - numpy.cos(y))
My = scipy.diff(M,y)
Nx = scipy.diff(N,x)
print('My=',My,'and Nx=',Nx,'so the equation is NOT an exact equation.')
# NOTE that M is simpler than N, so we use mu(y) for our integrating factor
Q=(Nx-My)/M
print('Q=',Q,'which is only a function of y')
# Using dsolve to find mu
mu=scipy.Function('mu')
IntFact=scipy.dsolve(scipy.diff(mu(y),y)-Q*mu(y),mu(y))
print(IntFact) # Any C will do (except 0 of course), so let C1 = 1
IntFact=scipy.exp(2*y)/y
newM=M*IntFact
newN=N*IntFact
My=scipy.diff(newM,y)
Nx=scipy.diff(newN,x)
print("New ODE is",newM,"+ (",newN.simplify(),")y' = 0")
print('My=',My,'and Nx=',Nx,'so the equation is now an exact equation.')
# Find F(x,y)
intMx=scipy.integrate(newM,x)
intNy=scipy.integrate(newN,y)
print('The integral of M dx is',intMx)
print('The integral of N dy is',intNy)
print('So F(x,y)=',intNy,'and the solution is',intNy,'= C')

Основная ошибка заключается в этой строке

N= (2*y*(x**2) - numpy.cos(y)) 

Я не могу понять, как его отформатировать, чтобы я не получил эту ошибку

TypeError: loop of ufunc does not support argument 0 of type Symbol which has no callable cos method

Я попытался отформатировать cos (y) как символ, используя

cos = sympy.symbols("cos")

, но я я получаю сообщение об ошибке типа:

TypeError: 'Symbol' object is not callable

специально из-за этой строки

  N= (2*y*(x**2) - cos(y))

1 Ответ

2 голосов
/ 25 февраля 2020

Вы используете неправильную реализацию функции cos.

NumPy 'cos Функция в основном принимает число или массив чисел в качестве аргумента (или что-то, что может быть рассматривается как массив чисел). Эта версия функции cos не принимает символов в качестве входных данных.

Теперь SymPy имеет собственные тригонометрические функции c, которые делают символы. Вот страница для функции SymPy cos: https://docs.sympy.org/latest/modules/functions/elementary.html#cos

...