@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));