Как решить математическое уравнение на языке программирования?
Мне нужна помощь, чтобы решить эту формулу ((n * 2) + 10) / (n + 1) = 3
, желательно на PHP. (Числа 2, 10 и 3 должны быть переменными, которые могут изменяться.)
Я могу легко решить это уравнение на бумаге. Однако, когда я пытаюсь реализовать это в PHP, я не уверен, с чего начать. Я сделал несколько запросов Google и поисков здесь, и ничего не помогает. Мне не хватает правильного подхода к решению этой проблемы.
любые советы и указатели были бы великолепны, и если вы укажите точный код, Пожалуйста, объясните, как вы добрались до этого результата.
5 ответов
<?php
// ((x * n) + y)/(n + 1) = z)
// => n=(y-z)/(z-x)
function eq ($x=0,$y=0,$z=0)
{
if ($z!=$x)
{
$n=($y-$z)/($z-$x);
} else
{
$n='NAN';
}
return $n;
}
?>
(моя алгебра старая и шелушащаяся, но я думаю, что это правильно)
вы хотите решить уравнение, а не реализовать его. Есть разница. Реализовать уравнение было бы так же просто, как ввести его. Вероятно, вы захотите сделать его оператором равенства (==
) хотя.
решатели уравнений сложные, сложные вещи. Я бы не пытался сделать его, когда есть такие хорошие (http://en.wikipedia.org/wiki/Comparison_of_computer_algebra_systems) лежа вокруг.
вы можете использовать http://pear.php.net/package/PHP_ParserGenerator/redirected чтобы разобрать математические выражения в синтаксическое дерево, затем выполните математику.
((n * 2) + 10) / (n + 1) = 3
будет выглядеть так:
идея состоит в том, чтобы принести на правом поддереве (здесь ...
) все числа, а слева все неизвестные, как и на бумаге.
В конце концов у вас будет:
+
/ \
n -7
что равно 0. И у вас есть решение для любого математического выражения (с одной неизвестной переменной).
Я оставлю алгоритм вам.
Как насчет использования грубой силы??!?! может быть, медленно и не точно:
$step = 0.00001;
$err = 0.1; //error margin
$start = 0;
$response = 3;
for($i = $start;$i <= 3;$i += $step){
if((($i * 2) + 10) / ($i + 1) >= $response - $err){
echo "the answer is $i";
}
}
вы можете импровизировать этот ответ.. на каждом цикле вы можете рассчитать расстояние между текущим ответом и желаемым ответом и настроить параметры, соответствующие этому..
это напоминает мне мой старый A. I. class =)
Удачи
вот как решить это уравнение в C# с помощью символизм библиотека компьютерной алгебры:
var n = new Symbol("n");
(((n * 2) + 10) / (n + 1) == 3)
.IsolateVariable(n)
.Disp();
при выполнении этого кода на консоли отображается следующее:
n == 7