• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите решить

Вилена

Ученик
Регистрация
6 Янв 2015
Сообщения
7
Реакции
0
Баллы
0
Помогите решить

Составить программу вычисления приближенных значений определенного интеграла методом трапеций и парабол(методом Симпсона), а также точное значение по первообразной. Вычислить абсолютную и относительную ошибки для каждого приближенного метода. Пределы интгерирования a и b, а также число N подынтервалов задавать при вводе. Выполняя программу при вводимых N = 10k, где к = 1, 2,..,8, установить зависимость величин ошибок от N.
Подынтегральная функция ((e^(x))-e^(-x))/2
Первообразная подынтегральной функции ((e^(x))+e^(-x))/2

Очень нужна срочно помощь!
буду благодарна премного, если напишете код!:tehnari_ru_837:
 
ах да, программа нужна на Pascal
 
Вилена, и Вам здравствовать, и Вас с Рождеством! Впрочем, судя по имени, Рождество для Вас не актуально.
Теперь по заданию.
Вообще-то подобные задачки у нас рассматривались неоднократно, ну да ладно, получите:
Код:
Var
 a,b,AV,T,S:Real;
 k:Byte;

Function F(x:Real):Real;
begin
 F:=0.5*(Exp(x)-Exp(-x));
end;

Function Antiderivative(x:Real):Real;
begin
 Antiderivative:=0.5*(Exp(x)+Exp(-x));
end;

Function Trapezium(N:Byte):Real;
var
 i:Byte;
 Sum,h:Real;
begin
 h:=(b-a)/N;
 Sum:=(F(a)+F(b))/2*h;
 for i:=1 to N-1 do
  Sum:=Sum+h*F(a+h*i);
 Trapezium:=Sum;
end;

Function Simpson(N:Byte):Real;
var
 i,N1:Byte;
 Sum,h:Real;
begin
 N1:=N div 2;
 h:=(b-a)/(2*N1);
 Sum:=(F(a)+F(b))/3*h;
 for i:=1 to N1 do
  Sum:=Sum+4.0*h/3.0*F(a+h*(2*i-1));
 for i:=2 to N1 do
  Sum:=Sum+2.0*h/3.0*F(a+h*(2*i-2));
 Simpson:=Sum;
end;

Begin
 Write('a = ');
 Readln(a);
 Write('b = ');
 Readln(b);
 AV:=Antiderivative(b)-Antiderivative(a);
 WriteLn('Accurate value: ', AV:0:8);
 Writeln;
 for k:=1 to 8 do
  begin
   T:=Trapezium(k*10);
   S:=Simpson(k*10);
   Writeln('k= ',k, '     Trapezium: ',T:0:8, '     Abs.Err: ',Abs(T-AV):0:8,'     Rel.Err: ',Abs(T-AV)/AV*100:0:8,'%');
   Writeln('k= ',k, '     Simpson:   ',S:0:8, '     Abs.Err: ',Abs(S-AV):0:8,'     Rel.Err: ',Abs(S-AV)/AV*100:0:8,'%');
  end;
 Readln;
End.
 
Здравствуйте. Я русская, не волнуйтесь, но из-за сессии любые праздники не актуальны очень.
и Вас с Рождеством!
Спасибо большое за программу!
 
Я русская, не волнуйтесь, но из-за сессии любые праздники не актуальны очень.
А, так эта шпилька с моей стороны не по поводу национальности - ни в коем случае. Просто имена "Вилен", "Вилена" - это новоделы 20-30 годов прошлого века, и произошли от Владимир Ильич Ленин. Вот я и подумал - может быть, Вы воспитаны на коммунистической идеологии, потому так и написал.
Извините за некоторую вольность.
 
нет-нет, все нормально!
Это, сказать можно, прозвище мое.

По поводу задания - хотела спросить, а есть ли возможность то же самое сделать, только без использования функций?
Мы их еще не проходили...
 
Ну вот, пожалуйста.
Хотя, сами видите - получилось громоздко, нечитабельно и некрасиво. Так что осваивайте работу с процедурами и функциями! :)
Код:
Var
 a,b,AV,T,S,h:Real;
 i,k,N:Byte;

Begin
 Write('a = ');
 Readln(a);
 Write('b = ');
 Readln(b);
 AV:=0.5*(Exp(b)+Exp(-b))-0.5*(Exp(a)+Exp(-a));
 WriteLn('Accurate value: ', AV:0:8);
 Writeln;
 for k:=1 to 8 do
  begin
   h:=(b-a)/(k*10);
   T:=(0.5*(Exp(a)-Exp(-a))+0.5*(Exp(b)-Exp(-b)))/2*h;
   for i:=1 to k*10-1 do
    T:=T+h*0.5*(Exp(a+h*i)-Exp(-a-h*i));
   N:=k*10 div 2;
   h:=(b-a)/(2*N);
   S:=(0.5*(Exp(a)-Exp(-a))+0.5*(Exp(b)-Exp(-b)))/3*h;
   for i:=1 to N do
    S:=S+4.0*h/3.0*0.5*(Exp(a+h*(2*i-1))-Exp(-a-h*(2*i-1)));
   for i:=2 to N do
    S:=S+2.0*h/3.0*0.5*(Exp(a+h*(2*i-2))-Exp(-a-h*(2*i-2)));
   Writeln('k= ',k, '    Trapezium: ',T:0:8, '    Abs.Err: ',Abs(T-AV):0:8,'    Rel.Err: ',Abs(T-AV)/AV*100:0:8,'%');
   Writeln('k= ',k, '    Simpson:   ',S:0:8, '    Abs.Err: ',Abs(S-AV):0:8,'    Rel.Err: ',Abs(S-AV)/AV*100:0:8,'%');
  end;
 Readln;
End.
 
Благодарю!
увы, преподаватель пока требует так, чтоб по программе:)
 
Назад
Сверху