微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用参数求解方程 Python fsolve

如何解决用参数求解方程 Python fsolve

我正在尝试使用 fsolve 函数一次找到几条直线的零点来解决其中一条。我无法编写一个体面的代码来做到这一点,以下是我迄今为止最好的尝试,非常感谢任何帮助。我认为最好的方法是定义一个类(该类是具有两个属性的线,即斜率和 y 截距),但我不知道如何做到这一点。

import numpy as np
from scipy.optimize import fsolve


def straight_line(parameters):
    m = parameters[0]             # This is the first parameter of the line i.e the slope
    n = parameters[1]             # This is the second parameter of the line i.e. the y-axis intercept
    x = parameters[3]             # This is the variable of the function,I want to find x such that m * x + n = 0
    return m * x + n


for m in range(-10,10):
    for n in range(-10,10):
        guess = 1
        zero = fsolve(straight_line([m,n]),guess)   # This is not correct
        print([m,n,zero])

解决方法

zero = fsolve(straight_line([m,n]),guess)

问题在于您调用 straight_line() 并将计算出的值发送到 fsolve。如果您阅读 the documentation,您会看到 fsolve 的第一个参数必须是“可调用的”。换句话说,你需要传递函数本身:

zero = fsolve(straight_line,guess)

您还需要通过 args 来定义直线,在本例中为斜率和 y 截距:

zero = fsolve(straight_line,guess,args=(m,n))

此外,您必须确保 x 值是 straight_line() 的第一个参数:

def straight_line(x,m,b):
    return m*x + b

我没有测试过这个,所以它可能不完全正确。它可能无法解决所有问题。我建议您阅读更多教程和示例以了解其工作原理。请参阅文档以确保您正确使用 fsolve()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。