Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Вычисление интеграла

Автор: Boxer 19.12.2010 22:30

Условие:
F1:=2^x+1
F2:=x^5
F3:=(1-x)/3

Задание:
1. решить уравнения методом деления отрезка пополам(короч найти границы интегрирования)
2. найти интеграл полученной фигуры методом прямоугольников

p.s. в чем ошибка не знаю. компилировать не хочет, находит только границы интегрирования, помогите исправить!!! нужна помощь!!!

Код:

{$N+}
program integral;

uses crt;

type
func=function (x:Real):Real;

function F12(x:real):real;far;
begin
F12:=exp(ln(2)*x)-x*x*x*x*x+1;
end;

function F13(x:real):real;far;
begin
F13:=exp(ln(2)*x)+1-(1-x)/3;
end;

function F23(x:real):real;far;
begin
F23:=x*x*x*x*x-(1-x)/3;
end;

function root(F:func; x, y: Real): Real;
const
eps = 0.001;
var
mid, fx, fy, fm: Real;
begin
fx := F(x);
fy := F(y);
if fx * fy > 0.0 then Halt;
repeat
if Abs(fx) < eps then
begin
root:=x;
Exit;
end
else if Abs(fy) < eps then
begin
root:=y;
Exit;
end
else begin
mid := 0.5 * (x + y);
fm := F(mid);
if fx*fm <= 0 then
begin
у := mid;
fy := fm;
end
else begin
x := mid;
fx := fm;
end;
end
until false;
end;

function F1(x:real):real;far;
begin
F1:=exp(ln(2)*x)+1;
end;

function F2(x:real):real;far;
begin
F2:=x*x*x*x*x;
end;

function F3(x:real):real;far;
begin
F3:=(1-x)/3;
end;

function solution(f:Func; a,b:Real; n:integer):Real;
var
h,g,sum,x,y:Real;
i:integer;
begin
h:=(b-a)/n;
sum:=0;
x:=a;
for i:= 1 to n do
begin
y:=x;
x:=x+h;
G:=f((x+y)/2);
sum:=sum+G;
end;
solution:=sum*h;
end;

function accuracy(f:Func; a,b:Real; var n:integer):Real;
const
eps=0.001;
var
i1,i2:real;
begin
i1:=solution(f,a,b,n);
n:=n+n;
i2:=solution(f,a,b,n);
while abs(i1-i2)>2*eps do
begin
if n>=16383 then break;
i1:=i2;
n:=n+n;
i2:=solution(f,a,b,n);
end;
accuracy:=i2;
end;

var
a,b,c,I,I1,I2,I3,x,y:real;
n:integer;
begin
clrscr;
x:=-3;
y:=2;
writeln('Point of intersection of graphs');
WriteLn('F12= ', root(F12,x,y):10:10);
WriteLn('F13= ', root(F13,x,y):10:10);
WriteLn('F23= ', root(F23,x,y):10:10);
ReadLn;
a:=root(F13,x,y);
b:=root(F12,x,y);
c:=root(F23,x,y);
I1:=accuracy(F1,a,b,n);
I2:=accuracy(F2,a,c,n);
I3:=accuracy(F3,c,b,n);
I:=I1-I2-I3;
writeln('Required integral:= ',I);
end.

Автор: Boxer 19.12.2010 22:56

можно засунуть solution в accuracy, но все равно интег не печатает(


function accuracy(f:Func; a,b:Real; var n:integer):Real;
function solution(n:integer):Real;
var
h,g,sum,x,y:Real;
i:integer;
begin
h:b-a)/n;
sum:;
x:=a;
for i:= 1 to n do
begin
y:=x;
x:=x+h;
G:=f((x+y)/2);
sum:=sum+G;
end;
solution:=sum*h;
end;
const
eps.001;
var
i1,i2:real;
begin
i1:=solution(n);
n:=n+n;
i2:=solution(n);
while abs(i1-i2)>2*eps do
begin
if n>=16383 then break;
i1:=i2;
n:=n+n;
i2:=solution(n);
end;
accuracy:=i2;
end;

Автор: volvo 19.12.2010 23:06

Цитата
находит только границы интегрирования, помогите исправить!!!

Цитата
function solution(f:Func; a,b:Real; n:integer):Real; 
var
h,g,sum,x,y:Real;
i:integer;
begin
h:=(b-a)/n; { <--- Вот в этом месте }
чему у тебя равно N? Нулю. Вылет: "Деление на 0". Присвой N какое-то значение. Тысячу раз говорено: описал переменную - инициализируй ее!!!

Автор: Boxer 19.12.2010 23:44

Доделал(без описания n) good.gif


Прикрепленные файлы
Прикрепленный файл  INT1.PAS ( 2.63 килобайт ) Кол-во скачиваний: 242