Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 07.01.2015, 00:49   #1 (permalink)
Вилена
Новичок
 
Регистрация: 07.01.2015
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Exclamation Помогите решить

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

Очень нужна срочно помощь!
буду благодарна премного, если напишете код!
Вилена вне форума   Ответить с цитированием

Старый 07.01.2015, 00:49
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Сейчас лучшее, что можно сделать - это прочитать схожие посты

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

Старый 07.01.2015, 00:50   #2 (permalink)
Вилена
Новичок
 
Регистрация: 07.01.2015
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

ах да, программа нужна на Pascal
Вилена вне форума   Ответить с цитированием
Старый 07.01.2015, 09:47   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Вилена, и Вам здравствовать, и Вас с Рождеством! Впрочем, судя по имени, Рождество для Вас не актуально.
Теперь по заданию.
Вообще-то подобные задачки у нас рассматривались неоднократно, ну да ладно, получите:
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 07.01.2015, 16:50   #4 (permalink)
Вилена
Новичок
 
Регистрация: 07.01.2015
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Здравствуйте. Я русская, не волнуйтесь, но из-за сессии любые праздники не актуальны очень.
и Вас с Рождеством!
Спасибо большое за программу!
Вилена вне форума   Ответить с цитированием
Старый 07.01.2015, 17:41   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Вилена Посмотреть сообщение
Я русская, не волнуйтесь, но из-за сессии любые праздники не актуальны очень.
А, так эта шпилька с моей стороны не по поводу национальности - ни в коем случае. Просто имена "Вилен", "Вилена" - это новоделы 20-30 годов прошлого века, и произошли от Владимир Ильич Ленин. Вот я и подумал - может быть, Вы воспитаны на коммунистической идеологии, потому так и написал.
Извините за некоторую вольность.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 07.01.2015, 18:12   #6 (permalink)
Вилена
Новичок
 
Регистрация: 07.01.2015
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

нет-нет, все нормально!
Это, сказать можно, прозвище мое.

По поводу задания - хотела спросить, а есть ли возможность то же самое сделать, только без использования функций?
Мы их еще не проходили...
Вилена вне форума   Ответить с цитированием
Старый 07.01.2015, 18:16   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Вилена Посмотреть сообщение
По поводу задания - хотела спросить, а есть ли возможность то же самое сделать, только без использования функций?
Можно и без функций. Сейчас нарисую.
Vladimir_S вне форума   Ответить с цитированием
Старый 07.01.2015, 18:39   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну вот, пожалуйста.
Хотя, сами видите - получилось громоздко, нечитабельно и некрасиво. Так что осваивайте работу с процедурами и функциями!
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 07.01.2015, 18:42   #9 (permalink)
Вилена
Новичок
 
Регистрация: 07.01.2015
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Благодарю!
увы, преподаватель пока требует так, чтоб по программе
Вилена вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 12:39.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.