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

Дано уравнение в виде f(x)=0, где f(x) некоторая функция переменной x. Число x* называется корнем или решением данного уравнения, если при подстановке x= x* в уравнение последнее обращается в тождество f(x*)=0. Число x* называют также нулем функции y=f(x).

В общем случае уравнение может иметь одно или несколько корней, как действительных, так и комплексных. Нахождение действительных корней с заданной точностью можно разбить на два этапа. Сначала корни отделяются, т.е. определяются отрезки, которые содержат по оному корню уравнения; а затем уточняются, т.е. вычисляются с требуемой точностью ε. Отделение корней уравнения f(x)=0, в области определения, непрерывной функции f(x), можно осуществлять несколькими способами:

Табулирование – составление таблицы из равноотстоящих значений независимой переменной x и соответствующих значений функции и определение отрезков в которых смежные значения функции имеют различные знаки и следовательно содержат нулевые значения функции.

Графический - строим график функции f(x) и определяем минимальные отрезки, включающие точки пересечения графика функции с осью x.

Уточнение корня на отрезке [a,b], в котором локализован только один корень, осуществляется итерационными методами, в которых последовательно, шаг за шагом, производится уточнение начального приближения корня. Итерацией называется совокупность вычислительных операций, приводящих к новому приближенному значению корня. Если каждое последующее значение x(k) (k=1,2,3,…) находится все ближе к точному значению, говорят, что метод сходится. В противном случае метод расходится. Для реализации итерационного процесса должны быть заданы начальное приближение x(0) и точность ε, с которой найти решение уравнения. Условие окончание имеет вид: |x(k)-x(k-1)| ≤·ε.Все методы можно разделить на две группы: с условной и безусловной сходимостью.

Методы с безусловной сходимостью. Метод половинного деления. В этом методе на каждой итерации новое приближение определяется как: x(k)=(a(k-1)+b(k-1))/2, где к – номер итерации.

Алгоритм

1) Задаем функцию f(x), отрезок [a(0),b(0)], точность ε и k=1.

2) Вычисляем приближение x(k)=(a(k-1)+b(k-1))/2

3) Определяем новый отрезок [a(k),b(k)]. Проверяем, если

f(a(k-1))*f(x(k))>0, то a(k)=x(k) и b(k)=b(k-1), иначе a(k)=a(k-1) и b(k)=x(k).

4) Проверяем условие окончания, если |b(k)-a(k)| ≤·2ε, то за ответ принимаем значение равное x=(a(k)+b(k))/2 и переходим на пункт 5, иначе k=k+1 и переходим на пункт 2.

5) Выводим x и f(x).

Блок-схема метода половинного деления.

начало
f(a)*f(x)>0
x, f(x)
a, b, ε || f(x)
b:= x
a=x
x:= (b+a)/2
| b-a | £ 2ε
конец
x:= (b+a)/2
нет
да

Программа. Деление пополам.

function DATA

global a b eps n_plot_dots;

a=1;

b=3;

eps=0.01;

n_plot_dots=100;

end

 

function [ fx ] = f(x)

fx=x.^2-5;

end

 

function [ x,fx ] = fun_DelenPopolam(a,b,eps)

for i=1:100

c=(a+b)/2;

fa=f(a);

fb=f(b);

fc=f(c);

if fa*fc<0

   b=c;

else

   if fc*fb<0

       a=c;

   else

       i

       break;

   end %if

end %if

if abs(a-b)<eps

   i

   break;

end %if

end %for i

x=c;

fx=f(c);

end % function

 

function GLAV_DelenPopolam

global a b eps x fx n_plot_dots;

DATA;

[ x,fx ] = fun_DelenPopolam(a,b,eps);

REPORT;

end

 

function REPORT

global a b eps x fx n_plot_dots;

disp('Delenie Popolam');

disp(' ');

disp(['a = ' num2str(a,'%10.5f') ]);

disp(['b = ' num2str(b,'%10.5f') ]);

disp(['eps = ' num2str(eps,'%10.5f') ]);

disp('Results');

disp(['x = ' num2str(x,'%10.5f') ]);

disp(['fx = ' num2str(fx,'%10.5f') ]);

h=(b-a)/(n_plot_dots-1);

for i=1:n_plot_dots

if i==1

   xmas(i)=a;

else

   xmas(i)=xmas(i-1)+h;

end %if

fmas(i)=f(xmas(i));

end

disp(' i       x       fx '); 

disp(' ______________________________')

i=0;

for i=1:length(xmas)

xx=xmas(i);

ffx=fmas(i);

disp(sprintf('%10.3f\t%10.3f\t %10.3f',i,xx,ffx));

end %for

plot(xmas,fmas,'r.');

grid on;

xlabel('x');

ylabel('y');

title('Delenie Popolam');

end

Методы с условной сходимостью. В этих методах исходное уравнение f(x)=0 преобразуется к эквивалентному виду x=j(x). Тогда на каждой итерации новое приближение будем определять как: x(1) = j (x(0)), x(2) = j (x(1)), x(3) = j (x(2)),….., т.е. x(k)=j(x(k-1)), k=1,2,3…. За x(0) принимают любое число на заданном отрезке [a;b]. Вид функции j(x) определим исходя из достаточного условия сходимости, которое записывается как: |j’(x)| < 1, для всех значений x отрезка[a;b], т.е. максимальная производная на заданном отрезке должна быть меньше единицы.

Метод простых итераций. Для уравнения x2-5=0 можно положить j(x)=5/x или j(x)=(1/2)(x+5/x) и соответствующие итерационные формулы будут иметь вид x(k)=5/x(k-1) и x(k)=(1/2)(x(k-1)+5/x(k-1)). В первом случае метод расходится. А во втором сходится.Общий подход для получения итерационной формулы x=j(x). Помножим обе части уравнения f(x)=0 на множитель, и прибавим к обеим частям по x, тогда итерационная формула будет иметь вид: x = x + bf(x) = j(x)

Определить множитель b можно из достаточного условия сходимости.  |j’(x)| < 1 и в то же время j’(x) = 1 + bf’(x) тогда

|1 + bf’(x)| < 1 или  -1 < 1 + bf’(x) < 1 тогда -2 < bf’(x) < 0.

Мы должны выбрать максимальную по модулю производную |f’(x)| на заданном отрезке. |f’(b)|>|f’(a)| b = -2/f’(b), иначе b = -2/ f’(a).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: