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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2011, 22:41   #1
Alehandro12
Новичок
Джуниор
 
Регистрация: 24.12.2011
Сообщений: 4
По умолчанию Вопрос по программе,которая вычисляет интеграл методом трапеций

Есть программа для вычисления определенного интеграла по методу трапеций вот код ее:
Код:
#include <stdio.h>
#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <vcl.h>
#pragma hdrstop

//-------------------------------------------------------------------------

#pragma argsused
double m,g;
int  main()
{double a,b,E,f(double),s,trapez(double,double,double,double(*f)(double));

printf("\n Predeli integrirovania i tochnost: ");
printf("\n Nignii predel a = ");
scanf ("%lf",&a);
printf("\n Verhnii predel b = ");
scanf ("%lf",&b);
printf("\n Trebyemaya tochost E =");
scanf ("%lf",&E);
printf("\n m = ");
scanf ("%lf",&m);
printf("\n g = ");
scanf ("%lf",&g);
s=trapez(a,b,E,f);
printf("\n Integral ot a=%3.2lf do b=%3.2lf raven %lf",a,b,s);
getch();
}
double f(double x)
{
return (1/sqrt(2*3.14159))* g * exp(-((x-m)*(x-m))/2*g*g);
}
double trapez(double a,double b,double E,double(*f)(double))
{
double h,s,s0,s1,sn;
int i,n;

n=10;
s0=(f(a)+f(b))/2;
s1=f(a+h);

while(fabs(s-sn)>E)
{sn=s;
h=(b-a)/n;
for(i=2; i<n/2; i++)
s1+=f(a + i*h);
s=h*(s0+s1);

n*=2;
}
return s;
}
getch();
она почти готовая..не могу разобраться только с циклом основным..как вот посчитать s(текущий результат интегрирования) и sn(предыдущий результат)?s1-значения функции в промежуточных точках.Спасибо!

Последний раз редактировалось ACE Valery; 26.12.2011 в 17:19.
Alehandro12 вне форума Ответить с цитированием
Старый 26.12.2011, 12:58   #2
Maksimall89
Пользователь
 
Аватар для Maksimall89
 
Регистрация: 10.11.2010
Сообщений: 59
По умолчанию

У вот так получилось. Сверился с Mathcad'ом он считает так же.
Код:
#include "stdafx.h"
#include <iostream> // поток
using namespace std;
// функция
double fun(double x)
{
	double resulti;
	resulti = x*x*x-3*x*x-2*x+5;
	return (resulti);
}
// метод трапеций
double trap(int n,double h, double a, double b)
{
	double result;
	double x[100];
	int sum = 0;
	for (int i=0; i<n+1;i++)
	{
		x[i]=a+h*i;
	}
	// накапливаем сумму
	for (int i=0;i<n-1;i++)
	{
		sum += fun(x[i]);
	}
	result = h*(((fun(x[0])+fun(x[n-1]))/2) + sum); 
	return (result);
}
// головная программа
int main()
{
	setlocale(LC_ALL, "russian_russia.1251"); // русский текст
	system("cls");
	double h,e,a1,b1;
	double s1,s0;
	double xx=0.0;
	double n;
	cout<<"Введите требуемую точность, и пределы интегрирования "; cin>>h>>e>>a1>>b1;
	//h = 0.1; e = 0.0001; a1 = 0.5; b1 = 1.5;
	n = (b1-a1)/h;
	// запуск бреда
	cout<<"Число шагов = "<<n<<endl;
	// считаем начальные значения s0 and s1
	s1 = trap(n,h,a1,b1);
	s0 = s1;
	// считаем всё остальное
	while (abs(s0-s1)>e)
	{
		s1 = trap(n,h,a1,b1);
		s0 = s1;
		h = h/2;
		s1 = trap(n,h,a1,b1);
	}

	cout<<"Ответ = "<<s1<<endl;
	cin.get();
	return 0;
}
Maksimall89 вне форума Ответить с цитированием
Старый 26.12.2011, 21:17   #3
Alehandro12
Новичок
Джуниор
 
Регистрация: 24.12.2011
Сообщений: 4
По умолчанию

Большое вам спасибо!
Alehandro12 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить интеграл методом трапеций alex55 Общие вопросы Delphi 0 11.12.2011 21:48
Написать программу, которая вычисляет сопротивление электрической цепи, Геля007 Помощь студентам 1 10.01.2011 22:36
процедура, которая вычисляет объем шара motaro Паскаль, Turbo Pascal, PascalABC.NET 2 21.01.2008 19:22