首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用scipy解方程解方程

用scipy解方程解方程
EN

Stack Overflow用户
提问于 2012-05-18 20:28:47
回答 3查看 14.5K关注 0票数 0

我在试着解方程f(x) = x-sin(x) -n*t -m0

在这个等式中,nm0是在我的类中定义的属性。此外,t在等式中是一个常量整数,但每次都必须改变。

我已经解了这个方程式,所以我得到了一个“新方程式”。我导入了scipy.optimize

代码语言:javascript
复制
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))

有什么改正和建议可以让它工作吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-18 20:45:49

我至少可以看到两个问题:您混淆了f的参数顺序,并且没有让f访问t。像这样的东西应该是有效的:

代码语言:javascript
复制
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))

请注意,我很懒,让M0n类成为成员

这就给出了:

代码语言:javascript
复制
>>> 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]
票数 4
EN

Stack Overflow用户

发布于 2012-05-18 20:46:25

您需要这样定义f()

代码语言:javascript
复制
  def f(self, x, t):
    return (x - math.sin(x) - self.M0 - self.n * t)

换句话说:

首先是

  1. self (它总是这样);然后是x;
  2. then的当前值,然后是您提供给fsolve().

的参数

票数 1
EN

Stack Overflow用户

发布于 2012-05-18 20:32:43

您正在使用某种类型的寻根算法。有几个常用的,所以知道是哪一个会很有帮助。

你需要知道三件事:

  1. ,你正在使用的算法,

  1. ,方程,你正在寻找的根,

,,你正在寻找的初始猜测和范围

您需要知道,有些组合可能没有任何根。

可视化感兴趣的函数可能会有所帮助。你有两个:一个线性函数和一个正弦函数。如果你要绘制这两组常量,哪组常量会给你交集?交叉点就是你要找的根。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10652675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档