我想知道如何使用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的百万个不同的值一样。
有人知道如何最好地解决这个问题吗?非常感谢大家!