Нелинейные уравнения и системы

В общем случае аналитическое решение уравнения f(х) = 0 можно найти только для узкого класса функций. Чаще всего приходится решать его численными методами. Численное решение уравнения проводят в два этапа:

  • отделяют корни уравнения, то есть находят достаточно тесные промежутки, в которых содержится только один корень, их называют интервалами изоляции корня, и определить их можно, изобразив график функции или любым другим методом, основанным на том, что непрерывная функция f(x) имеет на интервале [а; b] хотя бы один корень; если она поменяла знак f(a).f(b) < 0, а и b называют пределами интервала изоляции;
  • на втором этапе проводят уточнение отделенных корней, то есть находят корни с заданной точностью.

Любое уравнение P( х) = 0, где Р(х) - это многочлен, отличный от нулевого, называется алгебраическим уравнением (полиномом) относительно переменных x. Всякое алгебраическое уравнение относительно х можно записать в виде:

а0хn+ a1xn-1 + … + аn-1х+аn=0,

где а0 ≠ 0, n ≥ 1 и аi. - коэффициенты алгебраического уравнения n-й степени.

В MATLAB полином задается и хранится в виде вектора, элементами которого являются коэффициенты полинома от аn до a0.

Рассмотрим функции, предназначенные для действий над полиномами:

  • conv(p1, р2) - формирует вектор, соответствующий коэффициентам полинома степени n+m, полученного в результате умножения вектора p1 степени n на вектор р2 степени m, то есть вычисляет произведение двух полиномов;
  • deconv(pl, р2) -осуществляет деление полинома p1 на полином р2, то есть формирует вектор коэффициентов полинома, который является частным от деления p1 на р2; вызов функции в общем виде [q, r]=deconv(pl, р2) приводит к получению двух полиномов: q - частного от деления и r -остатка от деления;
  • polyval(p1, х) - вычисляет значение полинома с коэффициентами p1 в точке х;
  • polyder (p1 [, р2]) - формирует вектор коэффициентов полинома, являющегося производной от полинома с коэффициентами p1, то есть вычисляет производную от полинома; если в качестве аргументов указаны два вектора polyder(p1, р2), то производная вычисляется от произведения этих векторов, вызов функции в общем виде [q, r]= polyder (p1, p2) приведет к вычислению производной от частного pl/p2 и выдаст результат в виде отношения полиномов q и r.

Решить алгебраическое уравнение в MATLAB можно при помощи встроенной функции roots(p). Она формирует вектор, элементы которого являются корнями полинома с коэффициентами р. Наоборот, построить вектор р по заданному вектору его корней можно с помощью функции poly(х).

Для решения уравнений вида f(x)=0 в MATLAB применяют функцию fzero(name, x0), где:

  • name – имя М-функции, вычисляющей левую часть уравнения;
  • x0 – начальное приближение к корню или интервал его изоляции [a, b];

Формат вызова функции может выглядеть так: [x, y]=fzero(name, x0), где x – корень уравнения, y – значение функции в точке x.

Пример(использование conv и deconv):

pl=[2 0 1];

p2=[1 0 0 -1];

%Умножение полиномов: (2х^2+1) (х^3-1) = 2х^5+х^3-2х^2-1

p=conv(p2,pl)

Результат:

p =

2 0 1 -2 0 -1

%Деление полиномов: (2х^5+х^3-2х^2-1) / (х^3-1) = (2х^2+1)

deconv(p,p2)

Результат:

ans =

2 0 1

Пример(использование polival):

p1=[2 1 0 -1 0 -3];

%3начение полинома (2х^5+х^4-х^2-3) в точке х=0

polyval(p1,0)

Результат:

ans =

-3

Пример(использование polider):

p1=[2 1 0 -1 0 -3];

polyder(p1); %Производная от p1

p2=[1 0 0 -1];

polyder(p1,p2); %Производная от (p1*p2)

[q, r]=polyder(p1,p2) %Производная от частного и остатка (p1/p2)

Результат:

q =

4 1 0 -9 -4 9 2 0

r =

1 0 0 -2 0 0 1

Пример(использование roots):

Найти корни полинома 2х4 - 8х3 + 8х2 - 1 = 0.

p=[2 -8 8 0 -1];

roots(p)

%Найдем графическое решение

x=-1:0.1:3;

y=polyval(p,x);

plot(x,y,'-k'),grid

Результат:

ans =

2.3066

1.5412

0.4588

-0.3066

Пример:

Найти корни уравнения (ex/5)-2(x-1)2=0

В М-файле с именем ff.m пишем:

function y=f(x)

y=exp(x)/5-2*(x-1).^2;

end

Потом в командном окне пишем:

%Построение графика

x=-0.5:0.1:5.5;

y=exp(x)/5-2*(x-1).^2;

plot(x,y,'-k'), grid

[x(1),y(1)]=fzero('ff',[0 1]);

[x(2),y(2)]=fzero('ff',[1 2]);

[x(3),y(3)]=fzero('ff',[5 6]);

x

y

Результат:

x=

0.5778 1.7639 5.1477

y=

-0.0000 0.0000 0

Пример:

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

В М-файле с именем f25.m пишем:

function y=f25(x)

z=sin(x+1)-1.2;

y=2*x+cos(z)-2;

end

Потом в командном окне пишем:

x=0:0.01:1;

y=f25(x);

plot(x,y,'-k'), grid

Результатом будет график:

Потом находим решение системы(пишем в командном окне):

x=fzero('f25',0)

y=sin(x+1)-1.2

Результат:

x =

0.5102

y =

-0.2018

Примеры:

alg_ur1.m

alg_ur2.m

alg_ur3.m

alg_ur4.m

ff.m

f25.m

<<Назад

Далее >>