Задача: вычисление площади криволинейной трапеции (ф-лы Прямоуг., Трап

Статус
Закрыто для дальнейших ответов.
08.12.2010
13
0
#1
Программа:
Написать программу которая будет вычислять площадь криволенейной трапеции ограниченой отрезком [a.b], графиком функции и вертикальными прямыми х=а и х=b, применив формулы прямоугольников и трапеций. Сравнить результаты, полученые за разными формулами.

Формула прямоугольников для приближенного вычисления площади имеет вид:

b
∫ f(x)dx≈h*(f(a+h/2)+f(a+h/2+h)+⋯+f(a+h/2+(n-1)*h))〗
а

формула трапеций

b
∫ f(x)dx≈h*(f(a)/2+f(a+h)+f(a+2h)+...+f(a+(n-1)*h)+f(a+n*h)/2)
а

формула которую нужно вычислить:

Пи
∫ ln(5-4*cosx)dx;
0

n-количество равных частей на которые разбивается отрезок [a.b]
h=(b-a)/n
n>=20 - по условию

Код программы:

C++:
#include<conio.h>
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,h,n;			 //Обьявление переменных
float x,y;
printf("Введите a,a=");
scanf("%f",&a);			 //Ввод данных
printf("Введите b, b=");
scanf("%f",&b);			 //Ввод данных
printf("Введите n>20, n=");
scanf("%f",&n);			 //Ввод данных
h=(b-a)/n;				  
printf("x-Площадь через прямоугольник\n");
x=h*(log(h/2+a+(n-1)*h));		 //Вычесление площади через прямоугольник	 
printf("%f",x);					 //Вывод результата
printf("y-Площадь через трапецию\n");
y=h*(log(a+(n-1)*h)+log(n*h+a)/2);		 // Вычесление площади через трапецию
printf("%f",y);							//Вывод результата
if(y<x)									//условие
printf("y<x");					 //Вывод результата
else
printf("y>x");		//Вывод результата
getch();
return 0;
}
 

DarkKnight

Well-Known Member
01.08.2010
653
0
#2
У вас есть ошибки в формулах..... Это раз...
Ну и подход вычисление вы не поняли.... Вычисляете не то что нужно...
C++:
#include<stdio.h>
#include <conio.h>
#include<math.h>

//Эту строку при компиляции уберешь(!!!)
#include <iostream>

//У нас функция, так что бы очень не мучатся мы вычисление ее значение заведем как функцию
double Funct(double x)
{
return log(5 - 4 * cos(x));
}

int main()
{
//И эту строку тоже
setlocale(LC_ALL,"Russian");
//Сразу вам скажу, что не вижу у вас сумм членов ряда
//Следовательно решения у вас уже никакого не получится
//setlocale(LC_ALL,"Russian");
double a,b,h,n;			 //Обьявление переменных
double i; //Для цикла
printf("Введите a, a=");
scanf("%lf",&a);
printf("Введите b, b=");
scanf("%lf",&b);			 //Ввод данных
printf("Введите n>20, n=");
scanf("%lf",&n);			 //Ввод данных
h=(b-a)/n;				  
//Вот до этого момента с вами абсолютно согласен
//а теперь заведем переменные суммы для м. прямоугольников и суммы для м. трапеций
double sRect = 0.0;
double sTrap = 0.0;
// f(x)dx≈h*(f(a+h/2)+f(a+h/2+h)+⋯+f(a+h/2+(n-1)*h))
printf("x-Площадь через прямоугольник\n");
//И так метод прямоугольника
//интеграл у нас от a до b, а шаг h => циклим
for (i = a; i<b; i +=h)
{
sRect += Funct(a+h*i);
}
sRect *= h; //Завершающим является умножение на h

printf("y-Площадь через трапецию\n");
//Метод трапеций
for (i = a; i<b; i +=h)
{
sTrap += Funct(a+h*i); //Найдем сумму членов последовательности
}
sTrap = h * ((Funct(a)+Funct(b))/2 + sTrap); 

printf("%f  %f \n",sRect,sTrap);

if(sTrap < sRect)									//условие
printf("y<x");					 //Вывод результата
else
printf("y>x");		//Вывод результата
getch();
return 0;
}
 

Вложения

Статус
Закрыто для дальнейших ответов.