18.10.2019, 09:38 | #1 (permalink) |
Новичок
Регистрация: 02.10.2019
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Метод пристрелки
Код:
program asdasd; uses CRT; const NMAX = 100; dl = 0.001; Function g2(y1, y2, x: real): real; begin g2 := -((2*x*y2 - (x + 2)*y1 + cos(x)) / (x*x + 1)); //(для поиска производной) end; Function g1(y1, y2, x: real): real; begin g1 := y2; //(для поиска значения) end; var i, n: integer; dk11, dk21, dk12, dk22, dk13, dk23, dk14, dk24: real; x, xl, xu, yp, dx, h, x0, x1, x2, d, y1, y2, f0, f1, iter: real; y: array [0 .. 2, 0 .. NMAX] of real; begin n := NMAX; d := 0.1; xl := 0; xu := 1; yp :=0; h := (xu - xl) / (n - 1); x0 := 0;//(значение функции на краю) dx := 0.01; x1 := x0 + dx; iter := 0; while (abs(d) > dl) do //and not(y[1][0]=100*y[0][0]) begin iter := iter + 1; y[1][n] := 0; y[0][n] :=x0;//хз,что поставить for i := n downto 1 do begin x := xu - h*(i - 1); y1 := y[0][i]; //значение y2 := y[1][i]; //(первая производная) dk11 := -h * g1(y1, y2, x); dk21 := -h * g2(y1, y2, x); dk12 := -h * g1(y1 + dk11/2, y2 + dk21/2, x - h/2); dk22 := -h * g2(y1 + dk11/2, y2 +dk21/2, x - h/2); dk13 := -h * g1(y1+ dk12/2, y2 + dk22/2, x - h/2); dk23 := -h * g2(y1 + dk12/2, y2 + dk22/2, x - h/2); dk14 := -h * g1(y1 + dk13, y2 + dk23, x - h); dk24 := -h * g2(y1 +dk13, y2 + dk23, x - h); y[0][i - 1] := y[0][i] + (dk11 + 2*(dk12 + dk13) + dk14) / 6; y[1][i - 1] := y[1][i] + (dk21 + 2*(dk22 + dk23) + dk24) / 6;//первая производная end; f0 := y[1][0]/100 - y[0][0]; y[0][n] := x1; for i := n downto 1 do begin x := xu - h*(i - 1); y1 := y[0][i]; //значение y2 := y[1][i]; //(первая производная) dk11 := -h * g1(y1, y2, x); dk21 := -h * g2(y1, y2, x); dk12 := -h * g1(y1 + dk11/2, y2 + dk21/2, x - h/2); dk22 := -h * g2(y1 + dk11/2, y2 +dk21/2, x - h/2); dk13 := -h * g1(y1+ dk12/2, y2 + dk22/2, x - h/2); dk23 := -h * g2(y1 + dk12/2, y2 + dk22/2, x - h/2); dk14 := -h * g1(y1 + dk13, y2 + dk23, x - h); dk24 := -h * g2(y1 +dk13, y2 + dk23, x - h); y[0][i - 1] := y[0][i] + (dk11 + 2*(dk12 + dk13) + dk14) / 6; y[1][i - 1] := y[1][i] + (dk21 + 2*(dk22 + dk23) + dk24) / 6;//первая производная end; f1 := y[1][0]/100 - y[0][0]; d := f1 - f0; x2 := x1 - f1*(x1 - x0) / d; x0 := x1; x1 := x2; writeln(x2); end; for i:=0 to n - 1 do begin x := h * i; Writeln('x= ', x: 4: 2, ' y`= ', y[1][i]: 8: 5 ,' y= ', y[0][i]: 8: 5); end; writeln('chislo iteracii= ', iter); end. |
18.10.2019, 09:38 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Поищите информативные ответы в похожих темах Метод половинного деления и метод Рунтге-Кутта Метод шаг за шагом Метод Ван Хао C++ Метод секущих Метод шифрования Rot 66 |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|