- •Лабораторная работа №1 Отделение корней
- •Метод половинного деления
- •Метод хорд
- •Метод касательных
- •Лабораторная работа №2
- •Метод Зейделя
- •Лабораторная работа №3 Метод Лангранжа
- •Лабораторная работа №4
- •Лабораторная работа №5 Метод Эйлера
- •Метод Эйлера-Коши
- •Введите шаг - 0.1
- •Классический метод Рунге-Кутта
- •Лабораторная работа №6
Классический метод Рунге-Кутта
program RungeKutta;
var d,x,a,b,h,y,k1,k2,k3,k4:real;
m,i:integer;
function f(x,y: real): real;
begin f:=(3-x-y*y)/(2-x*y*y);
end;
BEGIN writeln('Введите значения концов отрезка [a,b]');
readln(a,b);
writeln('Введите начальное значение y0=y(x0)');readln(y);
writeln('Введите число значений функции на промежутке [a,b]');
read(m);
x:=a; h:=(b-a)/m;
for i:=0 to m do
begin writeln (x:10:3, y:15:4);
k1:=h*f(x,y);
k2:=h*f(x+h/2,y+k1/2);
k3:=h*f(x+h/2,y+k2/2);
k4:=h*f(x+h,y+k3);
d:=(k1+k2*2+k3*2+k4)/6; y:=y+d; x:=x+h
end; readln;
END.
Введите значения концов отрезка [a,b]
1 2
Введите начальное значение y0=y(x0)
1
Введите число значений функции на промежутке [a,b]
10
1.000 1.0000
1.100 1.1009
1.200 1.2151
1.300 1.2361
1.400 1.4286
1.500 1.4815
1.600 1.5355
1.700 1.5893
1.800 1.6423
1.900 1.6941
2.000 1.7448
Введите значения концов отрезка [a,b]
1 2
Введите начальное значение y0=y(x0)
1
Введите число значений функции на промежутке [a,b]
5
1.000 1.0000
1.200 1.2163
1.400 1.1023
1.600 1.2808
1.800 1.3716
2.000 1.4714
Погрешность:
0
-0.00008
0.02175
0.01698
0.01805
0.01823
Лабораторная работа №6
program lin_regr;
const p=30;
var x,y,u,v: array [1..p] of real;
i,j,n,k,m: byte;
d,a,b,s,s1,s2,s3,s4: real;
begin
Write('Введите N - число пар таблицы - ');Readln(N);
Writeln('Введите попарно координаты точки X Y - ');
For i:=1 to n do readln(x[i],y[i]);
Repeat
Writeln('Выберите вид уравнения регрессии,');
Writeln(' параметры которого хотите рассчитать');
Writeln('1) y = A * x + B; 2) y = A * x^M; 3) y = A * exp(M * x)');
Writeln('Введите номер выбранного варианта - '); Readln(k);
s1:=0; s2:=0; s3:=0; s4:=0;
For i:=1 to n do
begin
case k of
1: begin U[i]:=X[i]; V[i]:=Y[i] end;
2: begin U[i]:=ln(X[i]); V[i]:=ln(Y[i]) end;
3: begin U[i]:=X[i]; V[i]:=ln(Y[i]) end;
end;
s1:=s1+U[i]; s2:=s2+v[i];
s3:=s3+U[i]*V[i]; s4:=s4+U[i]*U[i]
end; D:=N*s4-sqr(s1);
A:=(N*s3-s1*s2)/d; B:=(s4*s2-s1*s3)/d;
s:=0;
Writeln(' Y[i] V[i] (Y[i]-V[i])^2 S');
For i:=1 to n do
begin V[i]:=A*U[i]+B;
if (k=2) or (k=3) then V[i]:=exp(V[i]);
s:=s+sqr(Y[i]-V[i]) ;
writeln(y[i]:10:6,V[i]:15:6,sqr(y[i]-v[i]):15:6,' s=',s:10:6)
end;
Writeln('Уравнение линии регрессии');
case k of
1: Writeln('y = ',A:10:6,' * x + ',B:10:6);
2: Writeln('y = ', exp(B):10:6,'* x^',A:10:6);
3: Writeln('y= ', exp(B):10:6, '*exp(',A:10:6,'*X)');
end;
Writeln('S=',s:10:6);
Writeln('Если хотите использовать другой вид уравнения регрессии,');
Write('введите 1 , иначе 0 - '); Readln(m);
Until m=0;
end.
Введите N - число пар таблицы - 10
Введите попарно координаты точки X Y -
2.3 5.3
1.4 3.9
1.0 2.9
1.9 5.0
1.5 4.0
1.8 4.9
2.1 5.1
1.6 4.5
1.7 4.1
1.3 3.7
Выберите вид уравнения регрессии,
параметры которого хотите рассчитать
1) y = A * x + B 2) y = A * x^M 3) y = A * exp(M * x)
Введите номер выбранного варианта -
1
Уравнение линии регрессии
y = 1.872024 * x + 1.232440
S= 0.413988
Линейная функция
Введите номер выбранного варианта -
2
Уравнение линии регрессии
y = 3.002318* x^ 0.735463
S= 0.372022
Степенная функция
Введите номер выбранного варианта -
3
Уравнение линии регрессии
y= 2.013647*exp( 0.453706*X)
S= 0.627455
Показательная функция
Степенная функция лучше отражает зависимость между x и y, так как для неё сумма квадратов отклонений наименьшая.
