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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2011, 19:05   #1
Zadora
Новичок
Джуниор
 
Регистрация: 16.12.2011
Сообщений: 3
По умолчанию Метод трапеций и метод Симпсона (C)

Добрый день.
Задали написать программу, вычисляющую значение опеределенного интеграла методом трапеций и методом Симпсона с требуемой точностью. Также, надо реализовать алгоритм уменьшения шага интегрирования до достижения необходимой точности.
Метод Симпсона еще не делал, а вот трапеций сделал, все проверил, а он почему-то не работает (завершается работа программы).

Искал интеграл от exp{-(x^2)};

Код:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

float Function (float x)
{
	return (exp(x*(-x)));
}

float trapezium (float step, float epsilon, float a, float b)
{
	float I1, I2;
	int N=(int)((b/step)+1)*2;
	float *x;
	x=(float*)malloc(N*sizeof(float));
	x[0]=a;
	I1=0;
	I2=0;
	for (int i=0; i<N; i++)
	{
		x[i+1]=x[i]+step;
		I1=I1 + step*((Function(x[i])+Function(x[i+1]))/2);
		I2=I2 + step*((Function(x[i])+Function(x[i+1]))/4);
	}
	if ((fabs(I1-I2))>epsilon)
	{
		step=step/2;
		trapezium(step, epsilon, a, b);
	}
	else 
		return I1;
	free (x);
}

int main(int argc, char* argv[])
{
	float epsilon;
	float step;
	float result;
	float a, b;
	printf("Trapezium method \n");
	printf("Enter a and b\n");
	scanf("%f %f", &a, &b);
	printf("Enter epsilon \n");
	scanf("%f", &epsilon);
	printf("Enter step \n");
	scanf("%f", &step);
	result=trapezium(step, epsilon, a, b);
	printf("Result \t %f \n", result);
}
Надеюсь на помощь =)

UPD: заменил условия в for на:
Код:
(int i=0; (x[i+1])<=b; i++)
но все равно вырубается. работает только на точности 0.1 :D

Последний раз редактировалось Zadora; 16.12.2011 в 19:32.
Zadora вне форума Ответить с цитированием
Старый 18.12.2011, 15:39   #2
Zadora
Новичок
Джуниор
 
Регистрация: 16.12.2011
Сообщений: 3
По умолчанию

Тема упала слишком низко :D
Zadora вне форума Ответить с цитированием
Старый 19.12.2011, 07:31   #3
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Я помню, когда-то давно на ЧМ делал это задание. Нужно площади трапеций сложить. У вас как-то хитро всё. Есть ресурс, где ваш алгоритм описан? Дайте ссылку. Даже если уже неактуально, всё-равно дайте, интересно же.
8Observer8 вне форума Ответить с цитированием
Старый 19.12.2011, 09:51   #4
Zadora
Новичок
Джуниор
 
Регистрация: 16.12.2011
Сообщений: 3
По умолчанию

Ну так я их и складывал вроде :D
http://ofvp.phys.msu.ru/upload/ibloc...ture4_2011.pdf
но там не алгоритм, а так... ))
Zadora вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод Симпсона. Демик Помощь студентам 9 28.11.2011 01:47
Метод Симпсона С++ sabaton Помощь студентам 2 03.04.2011 01:08
Turbo Pascal[програмыки : текстовая\метод симпсона\метод половинного деления qsccsq Помощь студентам 7 24.12.2010 05:23
метод симпсона 13xXx13 Помощь студентам 1 16.12.2010 09:57
Метод Симпсона, прямоугольников и трапеций. Buble07 Помощь студентам 2 15.11.2008 11:03