【问题标题】:Solving equations with parameters Python fsolve使用参数 Python fsolve 求解方程
【发布时间】:2021-01-12 00:02:23
【问题描述】:

我试图找到几条直线的零点,一次用 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])

【问题讨论】:

  • “这不正确”是什么意思?输出是什么?你希望它是什么?
  • 您好@Code-Apprentice 我的意思是该行不正确(解释器不会理解该行)。我之所以写它,是因为我认为它很好地反映了我希望程序做什么,所以解释一下自己会很有用。在嵌套循环中,我想找到直线的零点,但在每次循环迭代中,线参数 (m,n) 应该改变,即每次都是我正在求解的不同方程
  • “行不正确”和“解释器无法理解该行”仍然没有告诉我们运行代码时会发生什么。请edit您的问题在您运行程序时显示确切的输出。
  • 这里的问题是你没有正确使用fsolve()。我建议你找一些教程并阅读文档以了解如何正确调用它来做你想做的事情。

标签: python class scipy-optimize


【解决方案1】:
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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2021-05-05
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多