Примеры скриптов на 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