END.
REPEAT
Begin
Begin
Begin
END.
Else
REPEAT
Begin
Begin
VAR
End.
REPEAT
Begin
Begin
VAR
xp, e, x0, x:REAL;
Function f(x:real): real;
f:= x*x-2;
end;
writeln('введите начальное приближение х и точность');
read(x0,e);
x:=x0;
xp:=x;
x:=f(x);
UNTIL ABS(x-xp)<e;
writeln('корень уравнения =', x);
В данной программе используется подпрограмма функция f, которая вычисляет левую часть преобразованного уравнения:
.
Переменная xp используется в программе для сохранения предыдущего значения х.
Численное решение нелинейных уравнений
методом бисекции
Метод состоит в построении последовательности вложенных отрезков, на концах которых F(х) имеет разные знаки. Каждый последующий отрезок получают делением пополам предыдущего. Этот процесс построения последовательности вложенных отрезков позволяет найти нуль функции (F(х) = 0) с любой заданной точностью.
|
|
Опишем подробно один шаг итерации (рис. 28). Пусть на k-м шаге найден отрезок [аk, bk], на концах которого F(х) меняет знак. Заметим, что обязательно [аk, bk] Î [а, b].
1. Разделим теперь отрезок [аk, bk] пополам и выделим F(ck), где ck – середина [аk, bk].
2. Здесь возможны два случая:
§ первый, когда F(ck) = 0, тогда мы говорим, что корень найден;
§ второй, когда F(ck) ¹ 0, тогда сравниваем знак F(ck) с F(аk) и F(bk) и из двух половин [аk, ck] и [ck, bk] выбираем ту, на концах которой функция меняет свой знак. Таким образом, аk+1 = аk, bk+1 = ck, если F(ck)F(аk) < 0 (рис. 27), и аk+1 = ck, bk+1 = bk, если F(ck)F(bk) < 0.
При заданной точности e деление пополам продолжают до тех пор, пока длина отрезка не станет меньше 2e, тогда координата середины последнего найденного отрезка и есть значение корня требуемой точности.
Рисунок 28 – Геометрическая интерпретация решения уравнения методом бисекции
a) k–й шаг; b) k+1-й шаг.
Приведём программу, реализующую итерационный метод уточнения корня уравнения:
.
program Bisect;
A,B,E:REAL; X: REAL;
Function f(x:real): real;
f:= x*x-x-2;
end;
writeln('введите отрезок локализации корня [a,b] и точность');
read(a,b,e);
k:=0;
X:= (A+B)*0.5;
IF f(X)*f(B)<0 THEN
a:=x
b:=x
UNTIL ABS(B-A)<e;
writeln('корень уравнения =', (A+B)*0.5);
В данной программе используется подпрограмма функция f, которая вычисляет левую часть исходного уравнения:
.
Переменная x используется в программе для сохранения значения середины отрезка [a, b].
Численное решение нелинейных уравнений
методом Ньютона
Положим:
,
где x – корень уравнения f(x) = 0, hn считаем малой величиной. Отсюда, применяя формулу Тейлора, получим:
|
|
.
Следовательно, . Подставив это выражение, получим:
Геометрическая интерпретация метода представлена на рисунке 29.
Через точку А0(х,у) с координатами х = x0, у = f(x0) проводим касательную. По формуле
находим точку пересечения касательной с осью ОХ (точка х1).
Находим точку А1(х1,у), проводим касательную через точку А1 для нахождения х2.
Этот процесс продолжаем до тех пор, пока разница |хi+1-xi| не станет меньше, чем значение e, т.е. пока не будет найдено значение корня с заданной точностью e.
Рисунок 29 – Геометрическая интерпретация решения уравнения методом Ньютона
Приведём программу, реализующую итерационный метод уточнения корня уравнения:
.
program Newton;
VAR xp,E,x0:REAL; X: REAL;
Function f(x:real): real;
f:= x*x-x-2;
end;
Function df(x:real): real;
df:= 2*x-1;
end;
writeln('введите начальное приближение х и точность');
read(x0,e);
x:=x0;
xp:=x;
x:=x-f(x)/df(x);
UNTIL ABS(x-xp)<E;
writeln('корень уравнения =', x);
В данной программе используется подпрограмма функция f, которая вычисляет левую часть исходного уравнения:
а также подпрограмма функция df, которая вычисляет значение дифференциала:
.
Переменная xp используется в программе для сохранения предыдущего значения х.
К решению систем линейных алгебраических уравнений с большим числом неизвестных приводят многие практически важные задачи. Разработано множество методов, предназначенных для решения систем с матрицей того или иного вида. Все эти методы можно разделить на два больших класса: прямые (или точные) и итерационные.
Прямые методы дают решение системы за конечное число арифметических операций. Если коэффициенты системы не содержат погрешностей, а арифметические операции выполняются точно (без округления), то решение получается точным. Недостатки прямых методов: иногда требуется выполнение неприемлемо большого числа арифметических и логических операций; погрешности округления могут очень сильно исказить результат.
Итерационные методы позволяют получить приближенное решение с любой заданной точностью ε. Они дают искомое решение как предел последовательности приближений и различаются способами построения таких последовательностей. Недостатком этих методов является то, что построенные последовательности нередко оказываются расходящимися, т.е. конечного предела таких последовательностей может не существовать. Поэтому оказывается необходимым исследование сходимости.
Численное решение систем линейных
уравнений методом Гаусса
Система линейных алгебраических уравнений выглядит следующим образом:
в матричной форме такая система выглядит так:
,
где А – матица коэффициентов системы уравнений:
,
– вектор свободных членов (правых частей) уравнений, – вектор неизвестных:
Метод Гаусса (метод последовательного исключения неизвестных) состоит из прямого и обратного хода.
В результате прямого хода матрицы системы за m преобразований приводится к треугольному виду:
.
Количество преобразований исходной матрицы (m) в общем случае равно количеству уравнений в системе (n).
На каждом k -ом шаге преобразования выбирается ведущая строка (k) и ведущий элемент .
Формулы прямого хода метода Гаусса на k -ом шаге преобразования имеют следующий вид: для ведущей строки:
;
для строк, лежащих под ведущей строкой:
.
Элемент называется ведущим.
Обратный ход используется для вычисления значений неизвестных.
Система уравнений с треугольной матрицей А имеет следующий вид:
Очевидно, что
.
Формула обратного хода метода Гаусса (нахождения остальных неизвестных в обратном порядке) имеет вид:
.
При разработке программы необходимо учитывать то, что принципы индексации, принятые в математике и используемые при разработке программы, могут различаться: коэффициенту уравнения соответствует элемент массива А[j,i] (см. пункт«Описания массивов» стр. 38).
|
|
Приведём программу, использующую метод Гаусса для решения системы линейных уравнений (обратите внимание на комментарии, поясняющие назначение ключевых фрагментов программы):
program gauss;
const n = 3;
var A:array[1..n,1..n]of real;
x,b:array[1..n] of real;
i,j,n,p,ii,jj:integer; aii,akk:real;