1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
program odeiv1te;
uses
typ,
ode;
var
ex, nv, i, term: ArbInt;
a, b, d, ya, yb, ae: ArbFloat;
function f(x, y: ArbFloat): ArbFloat;
begin
f := -10 * (y - sqr(x));
end; {f}
function g(x, y: ArbFloat): ArbFloat;
begin
g := -100 * (y - sin(x)) + cos(x);
end; {g}
function h(x, y: ArbFloat): ArbFloat;
begin
h := 15 * y;
end; {h}
function phi(x: ArbFloat): ArbFloat;
begin
phi := -exp(-10 * x) * 0.02 + sqr(x) - x * 0.2 + 0.02;
end; {phi}
begin
Write(' program results odeiv1te');
case sizeof(ArbFloat) of
4: writeln('(single)');
6: writeln('(real)');
8: writeln('(double)');
end;
Read(nv);
writeln('program results odeiv1te');
writeln;
writeln(' number of examples: ', nv: 2);
for ex := 1 to nv do
begin
writeln;
writeln(' example number :', ex: 2);
Read(a, b, ya, ae);
d := b - a;
writeln('a': 3, 'b': 5, 'yb': 12, 'phi(b)': 20, 'ae': 10, 'term': 9);
for i := 1 to 5 do
begin
odeiv1(@f, a, ya, b, yb, ae, term);
writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', phi(b): numdig, ae: 9, term: 3);
a := b;
ya := yb;
b := b + d;
end; {i}
writeln(' -------------------------------------------------');
end; {ex}
a := 0;
ya := 1;
b := 1;
ae := 1e-6;
odeiv1(@g, a, ya, b, yb, ae, term);
writeln(a: 5: 2, b: 5: 2, ' ', yb - sin(1): numdig, ' ', ae: 9, term: 3);
a := 0;
ya := 1e-3;
b := 1;
ae := 1e-4;
odeiv1(@h, a, ya, b, yb, ae, term);
writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', 1e-3 * exp(15): numdig, ae: 9, term: 3);
a := 0;
ya := 1e-3;
b := 1;
ae := 1e-6;
odeiv1(@h, a, ya, b, yb, ae, term);
writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', 1e-3 * exp(15): numdig, ae: 9, term: 3);
a := 0;
ya := 1e-3;
b := a;
ae := 1e-6;
odeiv1(@h, a, ya, b, yb, ae, term);
writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', 1e-3 * exp(15): numdig, ae: 9, term: 3);
a := 0;
ya := 1e-3;
b := a;
ae := 0;
odeiv1(@h, a, ya, b, yb, ae, term);
writeln(a: 5: 2, b: 5: 2, ' ', yb: numdig, ' ', 1e-3 * exp(15): numdig, ae: 9, term: 3);
Close(input);
Close(output);
end.
|