7.13 Решение уравнений и их систем – команда solve
Для решения систем уравнений и одиночных уравнений служит команда
solve(expr1, expr2,..., exprN, var1, var2,..., varN). Она возвращает значения переменных varI, при которых соблюдаются равенства, заданные выражениями exprI. Если в выражениях не используются знаки равенства, то полагается, что exprI = 0.
Результат может быть возвращен в следующих формах:
для одного уравнения и одной переменной решение возвращается в виде одномерного или многомерного массива ячеек;
при одинаковом числе уравнений и переменных решение возвращается в упорядоченном по именам переменных виде.
Команда solve позволяет найти не только вещественные, но и комплексные решения систем уравнений и одиночных уравнений. Справку по этой команде можно получить, введя команду doc solve.
Пример:
Решить уравнение x3 - 1 = 0.
Решение:
>> syms x,y=x^3-1;S=solve(y)
S =
[ 1]
[ -1/2+1/2*i*3^(1/2)]
[ -1/2-1/2*i*3^(1/2)]
В результате получены три разных значения корня x1 = 1, x2 = , x3 = , которые хранятся соответственно в элементах S(1), S(2), S(3) массива S.
С помощью subs (разд. 7.7) подставим найденные значения корней в выражение x3 - 1:
>> subs(y,x,S)
ans =
[ 0]
[ (-1/2+1/2*i*3^(1/2))^3-1]
[ (-1/2-1/2*i*3^(1/2))^3-1]
>> [m]=simple(ans)
m =
[ 0]
[ 0]
[ 0]
Выражение x3 - 1 принимает значение 0 при подстановке любого из найденных корней, поэтому x1, x2, x3 являются точными корнями уравнения x3 - 1 = 0.
Команда roots (см. разд. 6.1) нашла бы только приближенные значения корней уравнения x3 - 1 = 0. В общем случае полиномиальное уравнение степени выше 4 не может иметь точного решения, выраженного с помощью радикалов.
Команда solve позволяет решать уравнения, представленные в аналитическом виде.
Пример:
Решить квадратное уравнение ax2+bx+c = 0.
Решение:
>> S=solve('a*x^2+b*x+c=0',x)
S =
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]
Команда solve возвратила известные выражения корней x1,2 = квадратного уравнения ax2+bx+c = 0. Точно также можно выразить с помощью радикалов решения кубического уравнения ax3+bx2+cx+d = 0, хотя эти выражения достаточно сложные.
Пример:
Решить трансцендентное уравнение xlnx+1 - 1 = 0.
Решение:
>> syms x
>> S=solve('x^(log(x)+1)-1',x)
S =
[ exp(0)]
[ exp(-1)]
Проверка:
>> subs(x^(log(x)+1)-1,x,S)
ans =
[ 0]
[ 0]
В данном случае solve нашла точные значения корней x1 = 1, x2 = e−1.
Пример:
Решить трансцендентное уравнение lnx + 3 - x = 0.
Решение:
>> solve('log(x)+3-x=0')
ans =
[ -lambertw(-exp(-3))]
[ -lambertw(-1,-exp(-3))]
Команда solve возвратила значения корней, выраженные через функцию Ламберта.
Команда vpa возвращает приближенные значения этих корней, вычисленные с 20 значащими цифрами:
>> vpa(ans,20)
ans =
[ .52469097457714872410e-1]
[ 4.5052414957928833670]
Каждый из приближенных корней этого уравнения был найден по отдельности в разделе 6.2 с помощью команды fzero. Отметим, что команда solve нашла приближенные значения двух корней одновременно с высокой точностью. При этом не пришлось графически определять интервалы изоляции корней.
Решение любого трансцендентного уравнения, в том числе и тригонометрического (разд. 7.17), достаточно сложная и серьезная проблема. Иногда solve возвращает неверные решения.
Пример:
Решить трансцендентное уравнение sinxlnsinx+xx - 2 = 0.
Решение:
>> syms x
Y=sin(x)^log(sin(x))+x^x-2;
>> S=solve(Y)
S =
1/2*pi
>> subs(Y,S)
ans =
-1+(1/2*pi)^(1/2*pi)
>> vpa(ans,5)
ans =
1.0327
Найденное решение неверное, т. к. оно не прошло проверку подстановкой.
Команда solve может возвратить не все решения.
Пример:
Решить трансцендентное уравнение sinx+lnx+ex - 1 = 0.
Решение:
>> syms x
>> Y=sin(x)+log(x)+exp(x)-1;
>> S=solve(Y);
>> vpa(S,5)
ans =
-3.0553-1.7145*i
>> subs(Y,S)
ans =
-.8e-31-.1e-30*i
Возвратив приближенный комплексный корень уравнения x1 = -3,0553 - 1,7145i, solve не нашла вещественный корень. С помощью команды ezplot (разд. 7.16) графически определяем, что он находится вблизи значения 0,4 (рис. 7.2):
>> ezplot('sin(x)+log(x)+exp(x)-1',[0 ,1,-1, 3])
>> grid
Рис.7.2
Вещественный корень со стартовым приближением 0,4найдем с помощью командыfzero (разд.6.2):
>> format long
>> [X,f]=fzero('sin(x)+log(x)+exp(x)-1',0.4)
X =
0.40716029855672
f =
-2.220446049250313e-016
Итак, приближенное значение вещественного корня x2=0,4072.
Перейдем теперь к системам уравнений.
Пример:
Решить систему уравнений
Решение:
Результатом выполнения команды solveявляется структураSс полямиxиy, каждое из которых содержит символьное представление решения:
>> syms x y
>> Y1=x+y-3;
>> Y2=x*y^2-4;
>> S=solve(Y1,Y2,x,y)
S =
x: [3x1 sym]
y: [3x1 sym]
Выведем в командное окно содержимое структуры:
disp([S.x S.y])
[ 4, -1]
[ 1, 2]
[ 1, 2]
Получили три решения (x1;y1) = (4; -1) и (x2;y2) = (1;2) (второе – кратности 2), причем (x1;y1) хранится в [S.x(1) S.y(1)], а (x2;y2) – в [S.x(2) S.y(2)]:
>> disp([S.x(1) S.y(1)])
[ 4, -1]
>> disp([S.x(2) S.y(2)])
[ 1, 2]
Для проверки подставим в выражения Y1 = x+y - 3 и Y2 = xy2 - 4 вначале первое решение, а затем второе:
>> disp(subs([Y1 Y2],[x y],[S.x(1) S.y(1)])
[ 0, 0]
>> disp(subs([Y1 Y2],[x y],[S.x(2) S.y(2)])
[ 0, 0]
Как видим, найдены точные решения, т. к. выражения Y1 и Y2 при их подстановке обратились в 0.
Команда solve допускает использование символьных переменных в качестве выходных аргументов. Эквивалентное обращение к solve в предыдущем примере имеет вид:
>> [x,y]=solve(Y1,Y2,x,y)
x =
[ 4]
[ 1]
[ 1]
y =
[ -1]
[ 2]
[ 2]
Команда solve позволяет решать системы уравнений, заданные в аналитическом виде.
Пример:
Решить систему уравнений относительно x, y, z
Решение:
>> syms a b c x y z
>> Y1=(a+b)/(x+y)+(b+c)/(y+z)-(c+a)/(z+x)-1;
>> Y2=(a+b)/(x+y)-(b+c)/(y+z)+(c+a)/(z+x)-1;
>> Y3=-(a+b)/(x+y)+(b+c)/(y+z)+(c+a)/(z+x)-1;
>> S=solve(Y1,Y2,Y3,x,y,z)
S =
x: [1x1 sym]
y: [1x1 sym]
z: [1x1 sym]
>> disp([S.x S.y S.z])
[ a, b, c]
Проверим найденное решение (a;b;c) подстановкой в систему:
>> subs([Y1 Y2 Y3],[x y z],[S.x S.y S.z])
ans =
[ 0, 0, (-a-b)/(a+b)+1]
>> disp(simplify(ans))
[ 0, 0, 0]
Убеждаемся, что решение найдено верно.
Иногда системе MATLAB можно помочь, преобразовав уравнение или систему уравнений к эквивалентному виду.
Например, уравнение ln(4 - 2x)+x2 - 2 = 0имеет эквивалентный видe2−x²+2x - 4 = 0. Можно проверить, что для каждого из этих уравнений командаsolveвозвращает свой вещественный корень. Это будут разные корни, но каждый из них удовлетворяет исходному уравнению. Существует и третий вещественный корень, который можно найти с помощью командыfzero.
Пример:
Решить систему трансцендентных уравнений
Решение:
>> syms x y
>> Y1=3^y*9^x-81;
>> Y2=log10((y+x)^2)-log10(x)-2*log10(3);
>> S=solve(Y1,Y2,x,y)
S =
x: [4x1 sym]
y: [4x1 sym]S =
>> R=[S.x S.y];
>> disp(vpa(R,10))
[ 16.00000002, -28.00000004]
[ 16.00000002, -3.999999992]
[ 1.000000000, -3.999999996]
[ 1.000000000, 1.999999996]
Получили 4 приближенных решения c 10 значащими цифрами. Однако системе удовлетворяют только первое и последнее из них. Убедимся в этом подстановкой:
>> disp(vpa(subs([Y1,Y2],[x y],[S.x(1) S.y(1)]),15))
[ .1e-12, .15e-13]
>> disp(vpa(subs([Y1,Y2],[x y],[S.x(2) S.y(2)]),15))
[ 22876792454891.6, .25e-13]
>> disp(vpa(subs([Y1,Y2],[x y],[S.x(3) S.y(3)]),15))
[ -80.8888888888889, .31e-13]
>> disp(vpa(subs([Y1,Y2],[x y],[S.x(4) S.y(4)]),15))
[ -.71e-11, .18e-13]
Приближенное равенство [Y1,Y2] [0,0] выполняется только при подстановке в систему первого и последнего решений. В остальных случаях [Y1,Y2] ≠ [0,0].
Алгебраическими преобразованиями приведем исходную систему к эквивалентной системе
Решим ее:
>> syms x y
>> S=solve('y+2*x=4','(y+x)^2/x=9',x,y);
>> [S.x S.y]
ans =
[ 1, 2]
[ 16, -28]
Получили два точных решения, являющихся также решениями исходной системы.
Пример:
Решить cистему нелинейных уравнений
Решение:
>> syms x y z
>> Y1=x+x^2-2*y*z-.1;
>> Y2=y-y^2+3*x*z+.2;
>> Y3=z+z^2+2*x*y-.3;
>> S=solve(Y1,Y2,Y3,x,y,z);
>> R=[S.x S.y S.z];
>> disp(vpa(R,6))
[ -.541941+.626019e-1*i, -.179057-.433417*i, .148543-.344892*i]
[ -.541941-.626019e-1*i, -.179057+.433417*i, .148543+.344892*i]
[ .128241e-1, -.177801, .244688]
[ -1.08804, -.130325, .161425e-1]
[ .578802e-1, .156279e-1, -1.24040]
[ .374678+.356411*i, .353227-.580416*i, -.281751+.419593*i]
[ .374678-.356411*i, .353227+.580416*i, -.281751-.419593*i]
[ .121093, 1.17493, .152166e-1]
Получено 8 приближенных решений с 6 значащими цифрами, 4 из которых вещественные (c 3 - го по 5 - е и 8 - е). В разделе 6.2 командой fsolve было найдено 4 - е решение. Проверим все 8 решений подстановкой с помощью цикла for:
>> for i=1:8
T=subs([Y1 Y2 Y3],[x y z],[S.x(i) S.y(i) S.z(i)]);
disp(vpa(T,6))
end
[ -.5e-31-.1471e-30*i, -.32e-30+.71e-30*i, .25e-30+.103e-29*i]
[ -.5e-31+.1471e-30*i, -.32e-30-.71e-30*i, .25e-30-.103e-29*i]
[ .12e-30, .9e-31, -.13e-30]
[ .8e-31, .14e-30, -.3e-31]
[ .2e-31, -.6e-31, -.14e-30]
[ .637e-29+.829e-29*i, -.754e-29+.15e-30*i, .709e-29-.346e-29*i]
[ .637e-29-.829e-29*i, -.754e-29-.15e-30*i, .709e-29+.346e-29*i]
[ .17422e-27, -.1012e-28, .12735e-27]
При подстановке любого из решений [Y1 Y2 Y3] [0 0 0]. Значит, каждое из них удовлетворяет системе уравнений.
Yandex.RTB R-A-252273-3- Основы работы и программирования, компьютерная математика Учебный курс
- Isbn ооо «Харвест», 2008
- Предисловие
- Введение
- Глава 1 знакомство с matlab и простейшие вычисления
- 1.1. Рабочая средаMatlab
- 1.2. Арифметические вычисления
- 1.3. Вещественные числа
- 1.4. Форматы вывода результата вычислений
- 1.5 Комплексные числа
- 1.6 Векторы и матрицы
- 1.7 Встроенные функции. Функции, задаваемые пользователем
- 1.8 Сообщения об ошибках и их исправление
- 1.9 Просмотр и сохранение переменных
- 1.10 Матричные и поэлементные операции над векторами и матрицами
- 1.11 Решение систем линейных уравнений
- Вопросы для самопроверки
- Глава 2 работа с массивами
- 2.1 Создание векторов и матриц
- 2.2 Применение команд обработки данных к векторам и матрицам
- 2.3 Создание специальных матриц
- 2.4 Создание новых массивов на основе существующих
- 2.5 Вычисление собственных значений и собственных векторов. Решение типовых задач линейной алгебры
- Вопросы для самопроверки
- Глава 3 м-файлы
- 3.1 Файл-программы
- 3.2 Файл-функции
- Вопросы для самопроверки
- Глава 4 программирование
- 4.1 Операторы отношения и логические операторы
- 4.2 Операторы цикла
- 4.3 Операторы ветвления
- 4.4 Оператор переключения switch
- 4.5 Оператор прерывания цикла break
- 4.6 Пример сравнения быстродействия матричных и скалярных операций
- Вопросы для самопроверки
- Глава 5 высокоуровневая графика
- 5.1 2D графика
- 5.1.1 Графики в линейном масштабе
- 5.2 Специальные виды 2d - графиков
- 5.2.1 Представление функции в виде дискретных отсчетов
- 5.2.2 Лестничные графики
- 5.2.3 Графики с указанием погрешности
- 5.2.4 Графики в логарифмическом и полулогарифмическом масштабах
- 5.2.5 Графики параметрических функций
- 5.3 3D графика
- 5.3.1 Линейчатые поверхности
- 5.3.2 Каркасные поверхности
- 5.3.3 Контурные графики
- 5.3.4 Сплошная освещенная поверхность
- 5.4 Оформление, экспорт и анимация
- 5.4.1 Оформление графиков
- 5.4.2 Сохранение и экспорт графиков
- 5.4.3 Анимация
- Вопросы для самопроверки
- Глава 6 прикладная численная математика
- 6.1 Операции с полиномами
- 6.2 Решение уравнений и их систем
- 6.3 Минимизация функции одной переменной
- 6.4 Минимизация функции нескольких переменных
- 6.5 Вычисление определенных интегралов
- 6.6 Решение дифференциальных уравнений
- 6.7 Аппроксимация и интерполяция данных
- 6.8 Интерполяция двумерных и многомерных данных
- Вопросы для самопроверки
- Глава 7 символьные вычисления
- 7.1 Символьные переменные, константы и выражения
- 7.2 Вычисления с использованием арифметики произвольной точности
- 7.3 Команды упрощения выражений – simplify, simple
- 7.4 Команда расширения выражений – expand
- 7.5 Разложение выражений на простые множители – команда factor
- 7.6 Приведение подобных членов – команда collect
- 7.7 Обеспечение подстановок – команда subs
- 7.8 Вычисление пределов – команда limit
- 7.9 Вычисление производных – команда diff
- 7.10 Вычисление интегралов – команда int
- 7.11 Разложение в ряд Тейлора – команда taylor
- 7.12 Вычисление суммы ряда – команда symsum
- 7.13 Решение уравнений и их систем – команда solve
- 7.14 Решение дифференциальных уравнений – команда dsolve
- 7.15 Прямое и обратное преобразования Лапласа – команды laplace,ilaplace
- 7.16 Графики символьных функций – команды ezplot, ezpolar
- 7.17 Прямой доступ к ядру системы Maple – командаmaple
- 7.18 Разложение рациональной дроби на сумму простейших дробей
- 7.19 Интерполяционный полином Лагранжа
- 7.20 Решение неравенств и систем неравенств
- 7.21 Разложение в ряд Тейлора функции нескольких переменных
- 7.22 Решение дифференциальных уравнений с помощью степенных рядов
- 7.23 Решение тригонометрических уравнений
- Вопросы для самопроверки
- Приложения Приложение 1. Справочная система matlab
- Приложение 2. Знакомство с пакетами расширения системыMatlab
- Приложение 3. Задания для самостоятельной работы
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Литература