求解python

时间:2017-01-06 20:41:06

标签: python nonlinear-functions

我想知道如何使用python解决一组方程式。

y = arccosh(A/cos(x)) and y = arcsinh(B/sin(x))

A,B是实数。我需要为A和B的许多不同值解决问题。

我想在区间0到pi中解决这组方程(因此x位于0和pi之间,y是不受限制的)。此外,我知道有一种解决方案或没有解决方案。

通常我会做这样的事情:

def f(x, A, B):
    return arccosh(A/cos(x)) - arcsinh(B/sin(x))

if f(0, A, B) * f(pi, A, B) < 0  #there is a solution
    x_solution = scipy.optimize.bisect(f, 0, pi, args=(A,B))
    y_solution = arcsinh(B/sin(x))
    print('a solution has been found')
else:                            #there is no solution
    print('no solution')

这个问题是没有为小于1的参数定义arccosh()。因此,对于某些A值,f(0,A,B)或f(pi,A,B)返回:NaN。我也尝试过使用其他python函数,例如optimize.fsolve,但如果我使用它并且没有解决方案,我会收到错误:

  

运行时警告:经过测量,迭代没有取得良好进展   通过最近十次迭代的改进。 warnings.warn(味精,   RuntimeWarning)

(如果有解决方案scipy.optimize.fsolve给出了正确的答案)

我需要这样做,就像A和B的百万个不同的值一样。

有人知道如何最好地解决这个问题吗?非常感谢大家!

0 个答案:

没有答案