我在试着解方程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))有什么改正和建议可以让它工作吗?
发布于 2012-05-18 20:45:49
我至少可以看到两个问题:您混淆了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]发布于 2012-05-18 20:46:25
您需要这样定义f():
def f(self, x, t):
return (x - math.sin(x) - self.M0 - self.n * t)换句话说:
首先是
self (它总是这样);然后是x;fsolve().的参数
发布于 2012-05-18 20:32:43
您正在使用某种类型的寻根算法。有几个常用的,所以知道是哪一个会很有帮助。
你需要知道三件事:
,
,
,,你正在寻找的初始猜测和范围
您需要知道,有些组合可能没有任何根。
可视化感兴趣的函数可能会有所帮助。你有两个:一个线性函数和一个正弦函数。如果你要绘制这两组常量,哪组常量会给你交集?交叉点就是你要找的根。
https://stackoverflow.com/questions/10652675
复制相似问题