Методы численного решения систем нелинейных уравнений. Операнды - неприводимые типы - Pascal
Формулировка задачи:
Собственно задание - Решить нелинейные уравнения методом Зейделя.
Вся проблема в передаче значения в функцию. Давно не писал коды на Паскале , может что забыл.
Просьба запустить и указать на ошибку.
Ошибку нашел.
Решение задачи: «Методы численного решения систем нелинейных уравнений. Операнды - неприводимые типы»
textual
Листинг программы
program Zeidel; const e=0.0001; var k:integer; x,y:array[0..50] of real; function f1(x,y:real):real; begin f1:=1-exp(-x)*cos(y); end; function f2(x,y:real):real; begin f2:=exp(-x)*sin(y)+1; end; begin write('X[0] = '); readln(x[0]); write('Y[0] = '); readln(y[0]); k:=-1; repeat inc(k); x[k+1]:=f1(x[k],y[k]); y[k+1]:=f2(x[k+1],y[k]); writeln('X = ',x[k+1]:5:5); writeln('Y = ',y[k+1]:5:5); until (sqrt(sqr(x[k+1]-x[k])+sqr(y[k+1]-y[k])))<=e; end.
Объяснение кода листинга программы
В данном коде реализуется метод Зейделя для численного решения системы нелинейных уравнений.
- Объявлены переменные:
- k (счетчик итераций) типа integer;
- x, y (массивы для хранения приближенных значений координат) типа array[0..50] of real;
- e (точность решения) константа типа real.
- Определены функции f1 и f2, представляющие левые части уравнений системы.
- В блоке begin происходит ввод начальных приближений для x[0] и y[0] с помощью функции readln, а затем инициализируется переменная k значением -1.
- Далее следует цикл while, который выполняется до тех пор, пока значение функции не будет достаточно мало (т.е. пока выполняется условие (sqrt(sqr(x[k+1]-x[k])+sqr(y[k+1]-y[k])))<=e).
- Внутри цикла происходит обновление приближений x[k+1] и y[k+1] с помощью функций f1 и f2 соответственно.
- Затем с помощью функции writeln выводятся значения приближений x[k+1] и y[k+1] с точностью до 5 знаков после запятой.
- После окончания цикла выводится сообщение об успешном завершении итерационного процесса.