用python求解超越方程组

2024-07-05 10:21:37 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下四个等式:

  1. cos(x)/x=a
  2. cos(y)/y=b
  3. a+b=1
  4. c sinc(x)=d信噪比(y)

对于未知变量x, y, ab。注意,cos(x)/x=a有多个解决方案。{cd4}与变量相似。我只对xy值感兴趣,它们是第一个正根(如果这很重要的话)。在

您可以安全地假设a, b, cd是已知的实常量,都是正的。在

在Mathematica中,解决此问题的代码类似于:

FindRoot[{Cos[x]/x == 0.2 a + 0.1, 
          Cos[y]/y == 0.2 b + 0.1, 
          a + b == 1.0, 
           1.03*Sinc[x] == Sinc[y]*1.02}, 
          {{x, .1}, {y, .1}, {a, .3}, {b, .1}}]

结果又回来了

^{pr2}$

虽然这很简单,但我不知道如何在python中执行类似的操作。因此,如果有人能指导我(或简单地告诉我如何)解决这个问题,我将非常感激。在


Tags: 代码cos解决方案感兴趣指导常量mathematica等式
1条回答
网友
1楼 · 发布于 2024-07-05 10:21:37

您可以使用^{}

^{1}$

会打印出来的

^{pr2}$

您的函数必须以一种求值为0的方式定义,例如a + b - 1而不是{}。在

快速检查:

print(your_funcs(sol2.x))

给予

[-1.9356960478944529e-11, 1.8931356482454476e-11, 0.0, -4.1039033282785908e-11]

所以,溶液应该是好的(请注意e-11基本上是0)。在

或者,也可以使用^{}

from scipy.optimize import fsolve

sol3 = fsolve(your_funcs, [0.1, 0.1, 0.3, 0.1])

结果是一样的:

^{pr2}$

可以使用args参数传递其他参数:

def your_funcs(X, fac_a, fac_b):

    x, y, a, b = X

    f = [np.cos(x) / x - fac_a * a - 0.1,
         np.cos(y) / y - fac_b * b - 0.1,
         a + b - 1,
         1.03 * np.sinc(x) - 1.02 * np.sinc(y)]

    return f

sol2 = root(your_funcs, [0.1, 0.1, 0.3, 0.1], args=(0.2, 0.2))
print(sol2.x)

这给了你“旧”的输出:

^{pr2}$

如果你跑了

sol2 = root(your_funcs, [0.1, 0.1, 0.3, 0.1], args=(0.4, 0.2))
print(sol2.x)

然后您将收到:

[ 1.26670224  1.27158794  0.34096159  0.65903841]

相关问题 更多 >