我正在尝试解决等式f(x) = x-sin(x) -n*t -m0
在此等式中,n
和m0
是我班级中定义的属性。此外,t
是等式中的常数整数,但每次都必须改变。
我已经解决了这个等式,所以我得到了一个'新的等式'。我已经导入了scipy.optimize
def f(x, self):
return (x - math.sin(x) -self.M0 - self.n*t)
def test(self,t):
return fsolve(self.f, 1, args=(t))
是否有任何更正和建议可以使其发挥作用?
答案 0 :(得分:4)
我至少可以看到两个问题:您已将参数的顺序混为f
,并且您未授予f
t
import math
from scipy.optimize import fsolve
class Fred(object):
M0 = 5.0
n = 5
def f(self, x, t):
return (x - math.sin(x) -self.M0 - self.n*t)
def test(self, t):
return fsolve(self.f, 1, args=(t))
的访问权限。这样的事情应该有效:
M0
[请注意,我很懒,并n
和>>> fred = Fred()
>>> fred.test(10)
array([ 54.25204733])
>>> import numpy
>>> [fred.f(x, 10) for x in numpy.linspace(54, 55, 10)]
[-0.44121095114838482, -0.24158955381855662, -0.049951288133726734,
0.13271070588400136, 0.30551399241764443, 0.46769772292130796,
0.61863201965219616, 0.75782574394219182, 0.88493255340251409,
0.99975517335862207]
班级成员
给出:
{{1}}
答案 1 :(得分:1)
您需要像这样定义f()
:
def f(self, x, t):
return (x - math.sin(x) - self.M0 - self.n * t)
换句话说:
self
首先出现(它总是这样); x
; fsolve()
的论据。答案 2 :(得分:0)
您正在使用某种根查找算法。有几个常用,所以知道哪一个是有帮助的。
您需要了解三件事:
您需要知道某些组合可能没有任何根源。
可视化感兴趣的功能可能会有所帮助。你有两个:一个线性函数和一个正弦函数。如果你要绘制两个,哪些常量会给你交叉?交叉点是您正在寻找的根。