Мне интересно, можно ли отменить вычисления, содержащие функции несколько pow(), с разными (но известными) показателями. Учитывая прямой расчет, мне нужен обратный расчет.
<?php
# Forward calculation
$in = 9;
$out = pow($in, 2) + pow($in, 3); // = 810
# My attempt at an reverse calculation
$result = pow($out, 1/2) + pow($out, 1/3); // = 37.7821...
Я хочу, чтобы обратный $result был 9, но вижу 37.7821 ... Кажется, это связано с тем, что $out нужно разделить между каждой функцией pow(), но если показатели не совпадают, я не уверен, как это распределить. Так как по отдельности работает каждая обратная функция pow (), но не при сложении вместе.
В конце концов, моя цель - перевернуть полиномиальную кривую 4-го порядка. Я в основном самоучка математики, поэтому предпочитаю примеры кода уравнениям.
В общем нет. Даже кубическое уравнение, подобное приведенному выше примеру, нелегко решить аналитически. Однако вы можете использовать итеративный подход к решению, например бисекция, методы Ньютона-Рафсона, секущие методы.
Кубические многочлены могут быть легко решены аналитически (см. Википедия). Полиномы четвертой степени также имеют аналитическое решение, но их довольно сложно вычислить (см. Википедия), поэтому итерационный подход, подобный предложенному мяу, вероятно, лучше. Для полиномов высшего порядка нет аналитического решения.
Есть ли ограничения на $in? Это целое число? это ограничено диапазоном? Можно предложить двоичный поиск $in с учетом $out и знанием его вычислений ... но это только в том случае, если домен $in слишком велик для сохранения частичной функции обратного вычисления на карте.






Позвольте мне назвать вашу первую экспоненту a и вторую экспоненту b.
$out содержит $in в следующем соотношении -
1:[$in^(b-a)]
Отношение было сформировано за счет уменьшения общего множителя в обоих терминах $out.
Таким образом, вы можете изменить свой $result, включив только компонент $out в соотношении, указанном выше -
$result = pow($out*[1/(1+$in^(b-a))], 1/2) + pow($out*[$in^(b-a)/(1+$in^(b-a))], 1/3);
//the above $result will be 9 in the specific case
Значение $result будет равно $in.
OP хочет пересчитать значение $in из $out. Это круговой ответ.
Как можно использовать $in в правой части формулы, если предполагается, что $in рассчитывается явно?
Извините, если мне непонятно, для обратного расчета $in неизвестен. Но ваш код действительно работает. Узнаю здесь что-то новое, спасибо.
Как указали мяу и Нико Шертлер, решить эту проблему непросто (по крайней мере, далеко за пределами моей компетенции).
Я решил это с помощью подгонки кривой по данным прямого расчета (mycurvefit.com). Он не дает идентичных результатов, но достаточно близкое приближение для моего использования (распределение баллов для системы выравнивания).
попробуйте проверить функцию
log(): php.net/manual/en/function.log.php