Я думаю, что его стоит изучить поведение функции, прежде чем пытаться ее решить. Не делая этого, вы не знаете, есть ли уникальное решение, множество решений или нет решения. (Самая большая проблема заключается в многих решениях, где числовые методы могут не дать вам решение, которое вам нужно/ожидайте, - и если вы вслепую его используете, могут возникнуть «плохие вещи»). Вы хорошо изучаете поведение, используя scipy и ipython. Это пример ноутбук, который делает это
# -*- coding: utf-8 -*-
# <nbformat>3.0</nbformat>
# <codecell>
s = 10014.6
c = 6339.06
mu = 398600.0
dt = 780.0
# <codecell>
def sin_alpha_2(x):
return numpy.sqrt(s/(2*x))
def sin_beta_2(x):
return numpy.sqrt((s-c)/(2*x))
def alpha(x):
return 2*numpy.arcsin(numpy.clip(sin_alpha_2(x),-0.99,0.99))
def beta(x):
return 2*numpy.arcsin(numpy.clip(sin_beta_2(x),-0.99,0.99))
# <codecell>
def fn(x):
return alpha(x)-beta(x)-numpy.sin(alpha(x))+numpy.sin(beta(x)) - dt * numpy.sqrt(mu/numpy.power(x,3))
# <codecell>
xx = numpy.arange(1,20000)
pylab.plot(xx, numpy.clip(fn(xx),-2,2))
# <codecell>
xx=numpy.arange(4000,10000)
pylab.plot(xx,fn(xx))
# <codecell>
xx=numpy.arange(8000,9000)
pylab.plot(xx,fn(xx))
Это показывает, что мы ожидаем, чтобы найти решение с между 8000 и 9000. d изгиб на кривой около 5000 и более ранний раствор при температуре около 4000 обусловлен отсечением, необходимым для того, чтобы заставить арксин вести себя. Действительно, уравнение не имеет смысла ниже около а = 5000. (точное значение - a0, заданное в решении Rays). Это дает хороший диапазон, который можно использовать с методами в решении Rays.
Не могли бы вы привести пример ввода и вывода? – Serdalis
@ Сердалис, что ты имеешь в виду? – dustin
это довольно сложно, и это очень поможет любому, кто пытается воссоздать его, если вы представили пример формулы в действии. Ничего такого грандиозного, как разработка, но решение для набора ценностей было бы весьма полезно. – Serdalis