Для заданного численного метода
а) представить краткое описание, которое должно содержать:
- идею метода;
- исходные данные для использования;
- ожидаемые результаты;
- расчетные формулы;
- условия окончания вычислений;
б) разработать схему алгоритма, где указать назначение используемых переменных и массивов;
в) составить программу на языке программирования высокого уровня.
Решение систем нелинейных уравнений методом итерации
Решение
Рассмотрим на примере решения системы:
По методу простой итерации необходимо представить систему в виде
Где X – вектор .
Матрица Якоби данной системы
Таким образом норма матрицы Якоби на отрезке поиска корня
.
Т.е. условие сходимости выполняется, итерационный процесс будет сходящимся.
.
Процесс останавливается, когда
,
где - заданная точность вычисления.
Для данной задачи можно оценить примерное расположение корней графически. Из первого уравнения выражаем x, из второго :
, (1)
. (2)
Таким образом, данная система имеет один корень, за начальное приближение можно принять точку (0, 0).
б) разработать схему алгоритма, где указать назначение используемых переменных и массивов;
Входные данные: точность вычислений ε.
Выходные данные: решение системы x и y.
Используемые переменные и массивы:
k – счётчик итераций;
eps0 – заданная точность вычислений (вводится с клавиатуры);
eps – текущая достигнутая точность вычислений;
x0, y0 – текущее начальное приближение для k – ой итерации;
x1, y1 – текущее приближение к решению для k – ой итерации;
err1, err2 – текущая достигнутая точность вычислений по переменной x и y соответственно.
Используем подпрограммы функции x=F1(y) (1) и y=F2(x) (2) и подпрограмму Max(a,b) для вычисления максимума из чисел a и b.
в) составляем программу в Pascal (среда PascalABC.Net):
Var k:integer;
eps, eps0, x0, x1, y0, y1, err1, err2:real;
//подпрограмма поиска максимума из 2-х чисел
Function Max(a: real;b: real): real;
Var y:real;
begin
y:=a;
if b>y then y:=b;
Max:=y;
end;
//первое уравнение x=F1(y)
Function F1(y: real): real;
begin
F1:=0.5*cos(y+0.5);
end;
//второе уравнение y=F2(x)
Function F2(x: real): real;
begin
F2:=-0.5-sin(x);
end;
Begin
//начальное приближение
x0:=0;y0:=0;
//счётчик итераций
k:=0;
writeln('Задайте точность вычисления');
readln(eps0);
eps:=1;
//метод простой итерации
while eps>eps0 do
begin
x1:=F1(y0);
y1:=F2(x0);
err1:=abs(x0-x1);
err2:=abs(y0-y1);
eps:=Max(err1,err2);
k:=k+1;
//теперь новое приближение x1
x0:=x1;
y0:=y1;
end;
writeln('x = ', x0);
writeln('y = ', y0);
writeln('Число итераций равно ', k);
end.
Результаты выполнения программы при различном значении точности вычислений:
Таким образом, данная программа успешно находит решение системы с заданной точностью.