- •Содержание
- •3.1. Аппроксимация данных методом наименьших квадратов 11
- •1. Решение систем линейных алгебраических уравнений
- •1.1. Классический метод Гаусса
- •1.2. Метод Гаусса с выбором главного элемента
- •2. Метод Ньютона для снау
- •2.1. Вариант 1
- •2.2. Вариант 2
- •I, n : IntType;
- •X,y,x0,y0 : RealType;
- •3. Аппроксимация данных методом наименьших квадратов
- •3.1. Аппроксимация данных методом наименьших квадратов
- •3.2. Аппроксимация данных с другими нормами
- •3.3. Аппроксимация данных многочленом заданной степени
- •Var X,y:array[1..Nmax] of real;
- •I,n:integer;
- •4. Решение систем дифференциальных уравнений
- •4.1. Метод Эйлера
- •4.2. Методы Рунге-Кутта
- •Проверка выполнения программы
- •X, h: RealType;
- •I, j : IntType;
- •X : RealType;
- •I, j, k : IntType;
Var X,y:array[1..Nmax] of real;
sx,sy,sxy,sx2,a,b:real;
I,n:integer;
begin
writeln('Аппроксимация зависимостью a*ln(x)+b методом наименьших квадратов');
write('Количество точек N= ');
readln(n);
if n > nmax then n:=nmax;
sx:=0;
sy:=0;
sxy:=0;
sx2:=0;
for i:=1 to n do
begin
write('X(',i:2,'),
Y(',i:2,')= ');
readln(x[i],y[i]);
sx:=sx+ln(x[i]);
sy:=sy+y[i];
sxy:=sxy+(ln(x[i]))*y[i];
sx2:=sx2+sqr(ln(x[i]));
end;
a:=(sx*sy-n*sxy)/(sqr(sx)-n*sx2);
b:=(sy-a*sx)/n;
writeln('Коэффициенты зависимости a*ln(x)+b a= ',a:5:5,', b= ',b:5:5);
for i:=1 to n do
begin
writeln('X(',i:2,')= ',x[i]:5:5,' Y(',i:2,')= ',y[i]:5:5,
' Y*(',i:2,')= ',a*ln(x[i])+b:5:5);
end;
write('Нажмите <Enter> для продолжения'); readln;
end..
4. Решение систем дифференциальных уравнений
4.1. Метод Эйлера
Систему ОДУ (1) часто удается представить в каноническом виде, в так называемой форме Коши:
(3)
где k=1,2,...,n.
При формулировке задачи Коши система (3) дополняется начальными условиями (2). Для простоты рассмотрим задачу Коши для одного уравнения типа (3), а затем полученные алгоритмы обобщим на систему n уравнений
. (4)
В окрестности точки x0 функцию y(x) разложим в ряд Тейлора:
(5)
который можно применить для приближенного определения искомой функции y(x). В точке x0+h при малых значениях h можно ограничиться двумя членами ряда (5), тогда
(6)
где - бесконечно малая величина порядка h2. Заменим производную y’(x0), входящую в формулу (6), на правую часть уравнения (4):
. (7)
Теперь приближенное решение в точке x1=x0+h можно вновь рассматривать как начальное условие и по формуле (7) найти значение искомой функции в следующей точке x2=x1+h. В результате получен простейший алгоритм решения задачи Коши, который называется методом Эйлера, или методом ломаных.
На каждом шаге метода Эйлера решение y(x) определяется с погрешностью за счет отбрасывания членов ряда Тейлора, пропорциональных h в степени, выше первой. Это значит, что метод Эйлера имеет второй порядок локальной погрешности. Глобальная погрешность имеет первый порядок и при постоянном шаге h для оценки погрешности применима первая формула Рунге:
, (8)
где yh(x) - приближенное решение дифференциального уравнения в точке x, полученное с шагом h; ykh(x) - приближенное решение того же уравнения с шагом kh; p - порядок метода.
Формула (8) позволяет опытным путем определить шаг h, обеспечивающий требуемую точность решения y(x). Можно осуществлять автоматическое изменение шага в процессе интегрирования дифференциального уравнения.
Для уточнения решения применима вторая формула Рунге:
.
Формула Эйлера (7) обобщается для систем ОДУ, записанных в форме Коши (3) с начальными условиями (2):
. (9)
На практике часто пользуются модифицированным методом Эйлера, при этом формула (9) принимает следующий вид:
,
где .