Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: PHP: скрипт решения системы уравнений с тремя неизвестными
 
 автор: coloboc66   (02.11.2011 в 10:13)   письмо автору
 
 

Система уравнений имеет следующий вид:

a1X+b1Y+c1Z=d1,
a2X+b2Y+c2Z=d2,
a3X+b3Y+c3Z=d3

где X,Y,Z - неизвестные, которые необходимо рассчитать,
а a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3 - постоянные коэффициенты, заданные в системе уравнений (положительные или отрицательные).
Может ли кто-нибудь подсказать скрипт для расчёта этой системы на ява-скрипт или рнр-скрипт? Я знаю, что программные алгоритмы существуют, в моём старом учебнике есть алгоритм для расчёта на програмируемом калькуляторе типа МК-54, но этот алгоритм для меня совершенно не читабелен:) Думаю, в скрипте нужно будет использовать массивы (для матриц).
Спасибо.

  Ответить  
 
 автор: cheops   (02.11.2011 в 12:04)   письмо автору
 
   для: coloboc66   (02.11.2011 в 10:13)
 

Ну трехмерную систему не сложно "вручную" по правилу Крамера вычислить (хорошие алгоритмы нужны на больших размерностях)
<?php
  
/****************
  4x + 7y + 2z = 34
  3x + 1y + 5z = 21
  8x + 2y + 6z = 52
  ****************/
  
$matrix[0] = array(472); 
  
$matrix[1] = array(315); 
  
$matrix[2] = array(826);
  
$b[0] = 34;
  
$b[1] = 21;
  
$b[2] = 52;
  
// Решаем уравнение
  
list($x$y$z) = solve($matrix$b);
  echo 
"Решение<br />";
  echo 
"X = $x<br />";
  echo 
"Y = $y<br />";
  echo 
"Z = $z<br />";
  
// Проверка
  
echo $x $y $z;
  echo 
"<br>";
  echo 
$x $y $z;
  echo 
"<br>";
  echo 
$x $y $z;

  function 
solve($matrix$b)
  {
    
// Вычисляем детерминант исходной матрицы
    
$determinant determinant($matrix);
    
// Формируем детерминант для переменных
    
for($i 0$i 3$i++)
    {
      
$xd[$i] = $matrix[$i];
      
$xd[$i][0] = $b[$i];
      
$yd[$i] = $matrix[$i];
      
$yd[$i][1] = $b[$i];
      
$zd[$i] = $matrix[$i];
      
$zd[$i][2] = $b[$i];
    }
    
$x determinant($xd) / $determinant;
    
$y determinant($yd) / $determinant;
    
$z determinant($zd) / $determinant;

    return array(
$x$y$z);
  }
  
// Детерминант трехмерной матрицы
  
function determinant($m)
  {
    return 
$m[0][0] * ($m[1][1] * $m[2][2] - $m[2][1] * $m[1][2]) -
           
$m[0][1] * ($m[1][0] * $m[2][2] - $m[2][0] * $m[1][2]) +
           
$m[0][2] * ($m[1][0] * $m[2][1] - $m[2][0] * $m[1][1]);
  }
?>

  Ответить  
 
 автор: coloboc66   (02.11.2011 в 12:15)   письмо автору
 
   для: cheops   (02.11.2011 в 12:04)
 

А что у вас получается при таких коэффициентах:

1x + 2y + 3z = 4 
5x + 6y + 7z = 8 
9x + 10y + 11z = 12

?

  Ответить  
 
 автор: cheops   (02.11.2011 в 13:01)   письмо автору
 
   для: coloboc66   (02.11.2011 в 12:15)
 

Ничего, детерминант нулевой, это означает, что эти уравнения линейно зависимы... и чтобы решить систему нужны еще уравнения, которые будут составлять трехмерный ортогональный базис, иначе решения нет или имеется бесконечное множество решений.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования