我正在尝试解决以下功能。我试图使用符号求解器和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);
答案 0 :(得分:0)
正如我在评论中已经提到的那样,solve
函数不适用于解决此类方程式。可以找到更多信息here。
关于fsolve
,似乎是由于使用了sympy的sin
,cos
和exp
函数引起的。如果将它们替换为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)