Решение системы уравнений на php

Примеры скриптов на PHP

Решение системы уравнений с тремя и более неизвестными

Скрипт предназначен для решения системы уравнений с тремя неизвестными по правилу Крамера.

Напоминаем, что если детерминант матрицы равен 0, это означает, что система уравнений линейно зависима и получить единственное решение невозможно.

При решении систем с более чем тремя переменными, следует прибегать к более сложным алогиритмам. Одним из таких алгоритмов является метод Гаусса-Жордана, который часто используют и при ручном вычислении систем линейных уравнений. Ниже приведена возможная реализация для все той же системы с тремя неизвестными, но в отличие от представленного выше скрипта, здесь можно увеличивать количество неизвестных в системе.

Функция gaussj() принимает два параметра: квадратную матрицу коэффециентов $a и вектор свободных членов $b. На выходе также возвращаются два решения: $b содержит значения переменных, а $a — обратную матрицу. Если задача состоит только в нахождении обратной матрицы можно воспользоваться решением из темы Как найти обратную матрицу?

Все для веб-программиста

Много полезной информации для веб-программиста. Статьи, программы, рецепты

Свежие записи

Рубрики

Решение системы уравнений с тремя и более неизвестными

Скрипт предназначен для решения системы уравнений с тремя неизвестными по правилу Крамера.

Напоминаем, что если детерминант матрицы равен 0, это означает, что система уравнений линейно зависима и получить единственное решение невозможно.

При решении систем с более чем тремя переменными, следует прибегать к более сложным алогиритмам. Одним из таких алгоритмов является метод Гаусса-Жордана, который часто используют и при ручном вычислении систем линейных уравнений. Ниже приведена возможная реализация для все той же системы с тремя неизвестными, но в отличие от представленного выше скрипта, здесь можно увеличивать количество неизвестных в системе.

Метод Гаусса-Жордана
= $big)
<
$big = abs($a[$j][$k]);
$irow = $j;
$icol = $k;
>
>
else if($ipiv[$k] > 1)
<
return «Матрица сингулярна»;
>
>
>
>
$ipiv[$icol] = $ipiv[$icol] + 1;
if ($irow != $icol)
<
for($l = 0; $l = 0; $l—)
<
if($indxr[$l] != $indxc[$l])
<
for($k = 1; $k
Функция gaussj() принимает два параметра: квадратную матрицу коэффециентов $a и вектор свободных членов $b. На выходе также возвращаются два решения: $b содержит значения переменных, а $a — обратную матрицу. Если задача состоит только в нахождении обратной матрицы можно воспользоваться решением из темы Как найти обратную матрицу?

Решение уравнений и их систем – команда solve

Дата добавления: 2015-06-12 ; просмотров: 5185 ; Нарушение авторских прав

Для решения систем уравнений и одиночных уравнений служит команда

solve(expr1, expr2. exprN, var1, var2. varN). Она возвращает значения переменных varI, при которых соблюдаются равенства, заданные выражениями exprI. Если в выражениях не используются знаки равенства, то полагается, что exprI = 0.

Результат может быть возвращен в следующих формах:

для одного уравнения и одной переменной решение возвращается в виде одномерного или многомерного массива ячеек;

при одинаковом числе уравнений и переменных решение возвращается в упорядоченном по именам переменных виде.

Команда solve позволяет найти не только вещественные, но и комплексные решения систем уравнений и одиночных уравнений. Справку по этой команде можно получить, введя команду doc solve.

Решить уравнение x 3 — 1 = 0.

В результате получены три разных значения корня x1 = 1, x2 = , x3 = , которые хранятся соответственно в элементах S(1), S(2), S(3) массива S.

С помощью subs (разд. 7.7) подставим найденные значения корней в выражение x 3 — 1:

Выражение x 3 — 1 принимает значение 0 при подстановке любого из найденных корней, поэтому x1, x2, x3 являются точными корнями уравнения x 3 — 1 = 0.

Команда roots (см. разд. 6.1) нашла бы только приближенные значения корней уравнения x 3 — 1 = 0. В общем случае полиномиальное уравнение степени выше 4 не может иметь точного решения, выраженного с помощью радикалов.

Команда solve позволяет решать уравнения, представленные в аналитическом виде.

Решить квадратное уравнение ax 2 +bx+c = 0.

Команда solve возвратила известные выражения корней x1,2 = квадратного уравнения ax 2 +bx+c = 0. Точно также можно выразить с помощью радикалов решения кубического уравнения ax 3 +bx 2 +cx+d = 0, хотя эти выражения достаточно сложные.

Решить трансцендентное уравнение x lnx +1 — 1 = 0.

В данном случае solve нашла точные значения корней x1 = 1, x2 = e −1 .

Решить трансцендентное уравнение lnx + 3 — x = 0.

Команда solve возвратила значения корней, выраженные через функцию Ламберта.

Команда vpa возвращает приближенные значения этих корней, вычисленные с 20 значащими цифрами:

Каждый из приближенных корней этого уравнения был найден по отдельности в разделе 6.2 с помощью команды fzero. Отметим, что команда solve нашла приближенные значения двух корней одновременно с высокой точностью. При этом не пришлось графически определять интервалы изоляции корней.

Решение любого трансцендентного уравнения, в том числе и тригонометрического (разд. 7.17), достаточно сложная и серьезная проблема. Иногда solve возвращает неверные решения.

Решить трансцендентное уравнение sinx lnsinx +x x — 2 = 0.

Найденное решение неверное, т. к. оно не прошло проверку подстановкой.

Команда solve может возвратить не все решения.

Решить трансцендентное уравнение sinx+lnx+e x — 1 = 0.

Возвратив приближенный комплексный корень уравнения x1 = -3,0553 — 1,7145i, solve не нашла вещественный корень. С помощью команды ezplot (разд. 7.16) графически определяем, что он находится вблизи значения 0,4 (рис. 7.2):

Вещественный корень со стартовым приближением 0,4 найдем с помощью команды fzero(разд. 6.2):

Итак, приближенное значение вещественного корня x2=0,4072.

Перейдем теперь к системам уравнений.

Решить систему уравнений

Результатом выполнения команды solve является структура S с полями x и y, каждое из которых содержит символьное представление решения:

Выведем в командное окно содержимое структуры:

Для проверки подставим в выражения Y1 = x+y — 3 и Y2 = xy 2 — 4 вначале первое решение, а затем второе:

>> disp(subs([Y1 Y2],[x y],[S.x(1) S.y(1)])

>> disp(subs([Y1 Y2],[x y],[S.x(2) S.y(2)])

Как видим, найдены точные решения, т. к. выражения Y1 и Y2 при их подстановке обратились в 0.

Команда solve допускает использование символьных переменных в качестве выходных аргументов. Эквивалентное обращение к solve в предыдущем примере имеет вид:

Команда solve позволяет решать системы уравнений, заданные в аналитическом виде.

Решить систему уравнений относительно x, y, z


источники:

http://twodayweb.ru/%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B-%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9-%D1%81-%D1%82%D1%80%D0%B5%D0%BC%D1%8F-%D0%B8-%D0%B1%D0%BE/

http://life-prog.ru/2_23009_reshenie-uravneniy-i-ih-sistem—komanda-solve.html