Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2022, 17:05   #1
Кирилл335632₽
 
Регистрация: 14.03.2022
Сообщений: 7
Сообщение C++, вычисление значения интеграла по формуле трапеций

Помогите пожалуйста написать программу для шестого задания, заранее благодарю
Изображения
Тип файла: jpg изображение_2022-04-03_170451.jpg (32.2 Кб, 0 просмотров)
Кирилл335632₽ вне форума Ответить с цитированием
Старый 03.04.2022, 20:08   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,560
По умолчанию

Помогаю.
Делишь интервал на много частей - допустим, 64. Вычисляешь и суммирушь значения функции в начале и конце интервала, делишь затем на 2. В цикле вычисляешь значения в промежуточных точках a+h, a+2h и т. д. Добавляешь их в сумматор .
y = (f(a) + f(b) )/2 + f(a+h)+ .....
Умножаешь на h - и наслаждаешься результатом. Потом, слегка подумав, удваиваещь n и делаешь то же самое. Если разница предыдущего расчёта и следующего по абс. величине больше епс - удваиваешь ещё раз и так - до результата.
Получаешь заслуженную нами пятёрку и говоришь преподу: "Это ещё что! Я вот то же самое могу по и Симпсону отчекрыжить!"

Последний раз редактировалось digitalis; 03.04.2022 в 20:24.
digitalis вне форума Ответить с цитированием
Старый 03.04.2022, 22:07   #3
Кирилл335632₽
 
Регистрация: 14.03.2022
Сообщений: 7
По умолчанию

Спасибо большое
Кирилл335632₽ вне форума Ответить с цитированием
Старый 04.04.2022, 10:51   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,560
По умолчанию

Спасибо скажешь, когда воплотишь это в коде и представишь нам на поругание восхищение.
digitalis вне форума Ответить с цитированием
Старый 04.04.2022, 21:29   #5
Кирилл335632₽
 
Регистрация: 14.03.2022
Сообщений: 7
По умолчанию

Код:
{
	float a, b, h, x, k, yx, S, I, Ip;
	int i, n;
	float const eps=1e-3;
	printf("\n a=");
	scanf("%f", &a);
	printf("\n b=");
	scanf("%f", &b);
	n=10;
    I=0;
    Ip=0;
	while(abs(k)>0)
	{
		h=(b-a)/n;
		for(x=a, S=0; x<b; x+=h)
	    {
		  yx=1/(1+exp(x/2));
		  S+=yx;
        }
        I = h*((1/(1+exp(b/2)) - 1/(1+exp(a/2))) / 2 + S); 
        k = (I - Ip);
        Ip = I;
	} 
	printf ("\n I=%7.3f",I);
Почему то выдается что I=0.000
Что может быть?

Последний раз редактировалось BDA; 04.04.2022 в 23:10.
Кирилл335632₽ вне форума Ответить с цитированием
Старый 04.04.2022, 23:15   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Используйте кнопку CODE для оформления кода. eps нигде не задействовали. Перед циклом while переменная k не имеет значения (инициализируйте чем-нибудь). Скорее всего цикл while ни разу не выполнился. Ну и есть мелкие недоработки: нужно суммировать f(a) и f(b), цикл for надо начинать с a + h, а не с a.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 05.04.2022, 00:16   #7
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,560
По умолчанию

Код:
	float a, b, h, x, k, yx, S, y, yp;
	int i, n;
	float const eps=1e-3;
	printf("\n a=");
	scanf("%f", &a);
	printf("\n b=");
	scanf("%f", &b);
	n=10;
        k=1000;
   	while (abs(k)>eps)  
	{
	    h=(b-a)/n;
            S = (1/(1+exp(a/2)) + 1/(1+exp(b/2)) ) / 2 ;
            x = a+h ;
	    for(i=1; i<n; i++)
	       {
		  yx=1/(1+exp(x/2));
		  S+=yx;
                  x += h ;
               }
             y = h*S;
             if (n>10) k = y - yp;
             yp = y ;  
	     printf ("\n n=%6d y=%7.3f",n,y);
             n = n+n;
  	}
Я бы так написал... Во время первого прохода k не вычисляем - не с чем сравнивать. Большим начальным значением k гарантируем ещё один проход, как минимум.
Почему выдало I=0.000 ? Ну кто же старательно вычисленное float запихивает в int ? Там было небольшое значение, и в int оно обрезалось до 0.
---------------------------
Ну и ?

Последний раз редактировалось digitalis; 05.04.2022 в 12:49.
digitalis вне форума Ответить с цитированием
Старый 18.04.2022, 09:41   #8
T4UV0R
 
Регистрация: 27.03.2022
Сообщений: 5
По умолчанию

Спасибо большое
T4UV0R вне форума Ответить с цитированием
Старый 18.04.2022, 11:56   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,560
По умолчанию

Задание от Кирилла, а мерси - от T4UV0R ? Один в двух лицах, как Ляпис-Трубецкой ?
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вычисление интеграла методом трапеций sahar Паскаль, Turbo Pascal, PascalABC.NET 1 29.05.2014 23:53
Приближённое вычисление определенного интеграла по «формуле прямоугольников» и по «формуле трапеций» Юличк@ Помощь студентам 1 25.04.2012 17:41
Вычисление интеграла методом трапеций Rikus Помощь студентам 2 11.11.2011 00:43
вычисление интеграла методом трапеций Sepherot Помощь студентам 1 21.12.2010 22:18
Вычисление определенного интеграла методом трапеций Alexander886 Помощь студентам 0 06.12.2009 20:43