Помощь - Поиск - Пользователи - Календарь
Полная версия: Вычисление определенного интеграла
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Murlika
Ребят, помогите, пожалуйста, исправить программу.


f1(x)=x*exp(1/3*ln(1+x))

fi=exp(-x);
ksi=sqrt(x*x+1)/(x*x+3)

a1=9; b1=9

С использованием ЭВМ получить таблицу значений функции,вычисленных с точностью Е в точках t(i)=c+ih, где I=0..m, h=(d-c)/m, f2(t,x)= (t/1+x)+sx) (x).
В качестве результата на печать необходимо вывести значение I, число шагов N квадратурной формулы, последовательность значений t(i) и F(t(i)).

Формула трапеций

Цитата
program pr6;
uses crt;
{$f+}
const
a1=1; b1=9; e=0.00001;
s=0.01; a2=0.5; b2=1.5; c=2; d=3; m=10; e1=0.0001;
type func=function (t,x:real):real;
var
n,j,k,i:integer;
x1,x2,t,r:real;

function f1(t,x:real):real;
begin
f1:=x*exp(1/3*ln(1+x));
end;

function fi(x:real):real;
begin
fi:=exp(-x);
end;
function ksi (x:real):real;
begin
ksi:=sqrt(x*x+1)/(x*x+3);
end;

function f2 (t,x:real):real;
begin
f2:=fi(t/(1+x)+s*x)*ksi(x);
end;

procedure int (a,b,e:real; f:func; t:real;var sum:real; var sum1:real);
begin
repeat
k:=k+1;
n:=n*2;
sum1:=sum;
sum:=0;
for j:=1 to n do
begin
x1:=a+((b-a)/n)*(j-1);
x2:=a+((b-a)/n)*j;
sum:=sum+((f(t,x1)+f(t,x2))/2)*(b-a)/n;
end;
until abs(sum-sum1)<e;
end;

var s1,s2:real;
begin
clrscr;
n:=1;
k:=0;
s1:=((f1(t,b1)+f1(t,a1))/2)*(b1-a1);
int (a1,b1,e,f1,1,s1,s2);
writeln('I=',s2:2:6,' chislo shagov-',k,' proverka ',s2-s1:1:6);
writeln;

for i:=0 to m do
begin
t:=c+i*((d-c)/m);
s1:=((f2(t,b2)+f2(t,a2))/2)*(b2-a2);
n:=1;
k:=0;
int (a2,b2,e1, f2, t,s1,s2);
writeln('i=',i,' t(i)=',t:2:6,' F(t(i))=',s1:2:6,' chislo shagov-',k);
end;
readkey;
end.



Почему выделенная часть нерациональна????
volvo
Цитата
Почему выделенная часть нерациональна?
Потому, что (b-a)/n вычисляется при каждой итерации 3 раза, хотя можно было это сделать 1 раз и навсегда еще до цикла...
Murlika
wacko.gif
Этого злые тети еще не заметили

Цитата(volvo @ 25.12.2005 12:37) *

Потому, что (b-a)/n вычисляется при каждой итерации 3 раза, хотя можно было это сделать 1 раз и навсегда еще до цикла...


Они говорят, что сама формула вычисления,т.е. формула трапеции "хромает"
volvo
Кстати, почему не ищем по форуму?
Интеграл, Вычислить определённый интеграл методами
Murlika
Цитата(volvo @ 25.12.2005 12:43) *


Почему же не ищем, все найденные темы на 2 страницах писка,уже посмотрела.
Уверяю, что если б мне стало ясно, я не просила бы Вас о помощи!
volvo
Понимаешь, в чем недостаток твоей программы... Она делает лишние действия, смысл которых - неясен... И разбираться просто лень... Вот так считается сам интеграл методом трапеций:
function int(a, b: real; f: func; t: real): real;
var
s, h: real;
begin
h := (b - a) / n;
s := 0;
for i := 1 to n - 1 do begin
s := s + (f(t, a + i*h));
end;
s := (s + (f(t, a) + f(t, b))/2) * h;
int := s;
end;

а все остальное, извини, просто лишнее...

Кстати, если тебе по заданию не нужно вычислять интеграл, зачем ты его вообще приплела? Покажи мне в своем первом посте хоть какое-то упоминание о площади, интеграле, или методе трапеций !!!
Цитата
С использованием ЭВМ получить таблицу значений функции,вычисленных с точностью Е в точках t(i)=c+ih, где I=0..m, h=(d-c)/m, f2(t,x)= (t/1+x)+sx) (x).
В качестве результата на печать необходимо вывести значение I, число шагов N квадратурной формулы, последовательность значений t(i) и F(t(i)).
Где что-то написано? У тебя элементарное табулирование функции, решаемое одним циклом, так что не морочь голову...
Murlika
[quote

Кстати, если тебе по заданию не нужно вычислять интеграл, зачем ты его вообще приплела? Покажи мне в своем первом посте хоть какое-то упоминание о площади, интеграле, или методе трапеций !!!
Где что-то написано? У тебя элементарное табулирование функции, решаемое одним циклом, так что не морочь голову...
[/quote]

Да нет, лаба как раз называется вычисление определнных интегралов.
Прога сама написана вроде правильно, мне препод сказала, только часть нерациональна.

Спасибо за поиощь
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.