尝试在python中使用fsolve和symsolve解决函数的多个错误

时间:2019-01-25 18:13:08

标签: python python-2.7 matlab

我正在尝试解决以下功能。我试图使用符号求解器和fsolve。两者都给我带来麻烦。第一次发布时,如果我在问题中遗漏某些东西,我会提前道歉。

有人对如何解决这个问题有建议吗?我正在求解y,其他所有都是已知变量。

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”对象没有属性“ could_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 :(得分:0)

正如我在评论中已经提到的那样,solve函数不适用于解决此类方程式。可以找到更多信息here

关于fsolve,似乎是由于使用了sympy的sincosexp函数引起的。如果将它们替换为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)