Многочисленные ошибки при попытке решить функцию с помощью fsolve и sym решить в python - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь решить функцию ниже. Я пытался использовать символический решатель и fsolve. Оба доставляют мне неприятности. При первой публикации я заранее прошу прощения, если что-то упустил в своем вопросе.

У кого-нибудь есть предложения, как это решить? Я решаю для вас, все остальное является известной переменной.

cos(y) + ((xi - tdd) / y) * sin(y)) - exp(xi - tii)

Я попытался сделать это в python двумя способами, оба не работали. Первый:

import numpy as np
from scipy.optimize import fsolve
import sympy as sym
from sympy import *

def fi(y):
    return ((cos(y) + ((xi - tdd) / y) * sin(y)) - exp(xi - tii))
y = fsolve(fi,0.01)

С этим кодом я получаю эту ошибку:

AttributeError: у объекта 'ImmutableDenseNDimArray' нет атрибута 'able_extract_minus_sign'

Я тоже пробовал это:

y = symbols('y')
init_printing(use_unicode=True)
yi = solve(cos(y) + ((xi - tdd) / y) * sin(y)) - exp(xi - tii))

И получил эту ошибку:

NotImplementedError: множественные генераторы [y, tan (y / 2)] Не реализованы алгоритмы для решения уравнения y * (10000000000000000 * (- tan (y / 2) ** 2 + 1) / (tan (y / 2) ) ** 2 + 1) - 9849605264665270) - 300789470669454 * tan (y / 2) / (tan (y / 2) ** 2 + 1)

Вот как я решил это в Matlab (i и j, потому что у меня есть значения x в матрице, которые нужно решить):

fi = @(y,x) (cos(y) + (((x-tdd)/y)*sin (y))) - exp((x - tii));
yi(i) = fzero(@(y) fi(y,xi(i,j)),.01);

1 Ответ

0 голосов
/ 25 января 2019

Как я уже упоминал в комментарии, функция solve не предназначена для решения таких уравнений.Более подробную информацию можно найти здесь .

Что касается fsolve, похоже, что проблема вызвана тем, что вы используете функции sin, cos и exp от sympy,Если вы замените их на функции из модуля math, код должен работать.

В частности, ваш код должен выглядеть следующим образом:

import math
from scipy.optimize import fsolve

def fi(y):
    return ((math.cos(y) + ((xi - tdd) / y) * math.sin(y)) - math.exp(xi - tii))

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