Мне трудно даже начать решать эту проблему. Все примеры, которые я нашел, либо слишком просты, либо слишком сложны для усвоения.
Я хочу найти значение S
с учетом серии входов. Функция одномерна, но нелинейна. S
всегда будет между -3 .. 3.
Я бы хотел использовать библиотеку Apache Commons, так как у меня был опыт работы с другими разделами этого кода.
Каждый раз, когда я хочу решить свою проблему, я знаю следующую информацию:
double R =250.0;
double om1 = 5.0;
double om2 = 15.0;
double th21 = 29.07965;
double th22 = 29.69008;
double D_obs = th21 - th22;
Фактические значения будут меняться между решениями, но они фиксированы для любого конкретного решения.
Значение, которое я хочу найти:
double S = 0.0;
такой, что
double d1 = delta(R,om1,th21,S);
double d2 = delta(R,om2,th22,S);
double D_calc = d1 - d2;
есть значения, чтобы сделать
double minme = Math.abs(D_obs - D_calc);
минимум или поочередно, решить
double minme = D_obs - D_calc;
, где minme=0
.
Функция delta
определяется как
public static double delta(double R, double om, double th2, double s)
{
if(Math.abs(s) <= 0.0001) //is the displacement == 0?
{
return 0.0;
}
else
{
return Math.toDegrees((-1*Cos(th2)*s-R*Sin(om)+Sqrt(-1*Math.pow(Cos(th2),2)*Math.pow(s,2)+2*Cos(th2)*Sin(om)*R*s-Math.pow(Cos(om),2)*Math.pow(R,2)+Math.pow(R,2)+2*Math.pow(s,2)))/(Sin(th2)*s));
}
}
где, например, Cos
определяется в другом месте как Math.cos(Math.toRadians(val))
Где / что я могу прочитать / сделать, чтобы начать эту проблему?