Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по матану.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
45 Кб
Скачать
☆

Классический метод Рунге-Кутта

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, так как для неё сумма квадратов отклонений наименьшая.