Как решить уравнение с двумя неизвестными в php?

Arime

Новичок
Например, есть выражения: y=8-x и x=9-7*y. нужно найти х и у. Как решить это по средствам php?
Делаю так:
$y = 8-$x;
$x=9-$y*7;

echo $x;
echo $y;
так не получается.
 

Redjik

Джедай-мастер
по такому же принципу, как в школе учат решать такие уравнения
 

Lionishy

Новичок
@Arime
Можно пойти путём программиста, скажем так.
Что такое $x? $x -- это какая-то функция от одной переменной.
PHP:
$x = function ($y) {
    return 9.0 - 7.0*$y;
}
Таким же образом определяем $y
PHP:
$y = function($x) {
    return 8.0 - $x;
}
Подставим одно уравнение в другое и получим уравнение только с одним неизвестным!
PHP:
$x = function ($y) {
    return 9.0 - 7.0*$y;
}

$y = function ($x) {
    return 8.0 - $x;
}

$f = function($z) {
return $x( $y( $z));
}
Интересно, что функция $f просто вычисляет значение $x по самому $x. Так что искомый $x -- это неподвижная точка $f. Т.е. нам достаточно подобрать такое число, что $f($z) === $z

Так как система линейная, то это можно сделать очень легко:
PHP:
solve_linear($g,$eps) {
    $t = $g(1.0) - $g(0.0);
    return abs($t) < eps ? array('error',$t) : array('success',-$g(0.0)/$t);
}
Здесь стоит отметить, что есть особый случай, когда $g -- прямая линия, параллельная оси аргументов (абсцисс). В этом случае для любого $x значение функции $g будет одинаково. Аналогичная ситуация возникнет, если уравнения линейно зависимы.

Окончательный вариант
PHP:
solve_linear($g,$eps) {
    $t = $g(1.0) - $g(0.0);
    return abs($t) < eps ? array('error',$t) : array('success',-$g(0.0)/$t);
}

$x = function ($y) {
    return 9.0 - 7.0*$y;
}

$y = function ($x) {
    return 8.0 - $x;
}

$g = function ($z) {
return $x( $y( $z)) - $z;
}

print_r(solve_linear($g,1.0e-8));
 

WMix

герр M:)ller
Партнер клуба
если не ошибся то так

PHP:
// система
// $a * x + $b * y = $c
// $d * x + $e * y = $f
 
 
  $delta = $a*$e - $b*$d;
  if( $delta != 0 ){
    $x = ($c*$d - $f*$a)/$delta;
    $y = ($c*$e - $f*$b)/$delta;
  }
 
Сверху