PDA

Просмотр полной версии : [Вопрос] Вычисление интеграла



Osetin
13.06.2017, 14:21
Нужна помощь по программе. Возможно кто-то решал или сталкивался с подобным, буду благодарен за подсказку или помощь.
Задача следующая.

Вычисление интеграла пользовательской функции численными методам. Пользователь выбирает вид функции, коэффициенты и метод (правых или левых прямоугольников, трапеций)

Алгоритм на метод прямоугольников получился такой:
https://pp.userapi.com/c837732/v837732862/4439e/4f-l7RtHHxQ.jpg

$continue$
13.06.2017, 15:43
Тут конечно трудно будет найти помощь. Попробуй кинуть на SO (https://stackoverflow.com/). (тэги #algorithm, #mathematics)

А ещё конечно все эти методы давно есть в инете (я просто не знаю все эти методы. В шараге только прямоугольниками решали).

Посмотри вот тут:
ru.stackoverflow.com (https://ru.stackoverflow.com/questions/381771/%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE-%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D0%BB%D0%B0-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC-%D0%BF%D1%80%D1%8F%D0%BC%D0%BE%D1%83%D0%B3%D0%BE%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2)
http://www.cyberforum.ru/cpp-beginners/thread1100227.html
http://www.programmersforum.ru/showpost.php?p=646262&postcount=9

Osetin
16.06.2017, 20:42
Получилось примерно так, считает правильно

// 45.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <clocale>
#include <iostream>
using namespace std;

int a,b,n,i,sum,aa;
double q, y;

float h,x,s;

float f(float x){
return 1/(x+2);
}
float F(float a, float b, float h, float N){
float S = (f(a)+f(a+N*h))/2;
float x,y;
for (int i = 1; i < N; i++){
x = a+i*h;
y = f(x);
S += y;
}
return h*S;

}

int main()
{
setlocale(LC_CTYPE, "rus");
cout<<"Выберите вид функции" <<endl;
cout<<"1. Прямая"<<endl;
cout<<"2. Парабола"<<endl;
int f,a1,b1,c;
cin>>f;
if (f==1)
{
cout<<"Введите коэффициенты в уравнение ax+b" <<endl;
cin >> a1 >> b1;
}
if (f==2)
{
cout<<"Введите коэффициенты в уравнение ax^2+bx+c" <<endl;
cin >> a1 >> b1>>c;
}
printf("Введите интервал [a;b]\n");
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
printf("Введите кол-во точек \n");
scanf("%d",&n);

h= (b-a);
h/=n;
printf("h=%f \n",h);

cout<<"Выберите метод:"<<endl;
cout<<"1. Левых прямоугольников"<<endl;
cout<<"2. Правых прямоугольников"<<endl;
cout<<"3. Трапеции"<<endl;
int m;
cin>>m;
if(m==1) {

x=a;
s=0;
for(i=0;i<=(n-1);i++)
{
if(f==1)
s+=(a1*x+b1);
else if(f==2)
s+=(a1*(x*x)+(b1*x)+c);
x=x+h;
}
s*=h;
printf("\nРешение найдено методом левых прямоугольников");
printf("\ns=%.2f \n",s);
}
else if(m=2){
x=a+h;
s=0;
for(i=0;i<=n;i++)
{
if(f==1)
s+=h*(a1*x+b1);
else if(f==2)
s+=h*(a1*(x*x)+(b1*x)+c);
x=x+h;
}
printf("\nРешение найдено методом правых прямоугольников");
printf("\ns=%.2f \n",s);
}
else if(m==3){
float integral;
integral = F(a,b,h,n);
printf("\nРешение найдено методом трапеций");
printf("\ns=%.2f \n",integral);
}

system("PAUSE");
return 0;
}