Мне необходимо вычислить интеграл. Область G, ограниченная прямыми x=2, y=x и гиперболой xy=1, вписанная в прямоугольник D. Вычислить необходимо по формуле приведенной ниже. В условии дали ответ приблизительный 9/4. Я написал код, взял рандомные x и y которые могут войти в прямоугольник D (т.е Ig), подставил формулу из под интеграла (т.е. x^2/y^2) и вычислил сумму, а затем умножил все это на количество испытаний (1000) и площадь D, которая по идее по графику должна быть 1*1,5=1,5. Ответ не совсем сходится, подскажите пожалуйста, что не так сделал.
using namespace std;
int main() {
srand(time(NULL));
int n = 1000, flag = 0, bad_flag = 0;
int pl;
//points
float x1 = 2, y1 = 0.5;
float x2 = 1, y2 = 0.5;
float x3 = 1, y3 = 2;
float x4 = 2, y4 = 2;
pl = 1.5 * 2;
float x, y;
float summ = 0;
float a = 1, b = 1.5;
float S = a * b;
for (int i = 0; i < n; i++) {
x = 1 + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 2));//1 3-1
y = 0.5 + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 2));// 0.5 3-1
cout «"\n_______\nx-"« x;
cout « "\ny-" « y;
if (x <= 2 && x*y >= 1 && y <= x) {
summ += pow(x, 2) / pow(y, 2);
}
}
cout « endl « "s=" «S;
cout «endl« endl «"vicislili integral="«(float)1 / n * S*summ;
_getch();
}
У вас неправильный ответ от того, что площадь случайных чисел 2*2==4 не соотвествует к 1.5.
Генерируем правильно случайные точки: x = 1 .. 2 , y = 0.5 .. 2.
// g++ -lm -Wall -Wextra -std=c++11 inte.cpp -o inte
# include <iostream>
# include <cstdlib>
#include <cmath>
using namespace std;
int main() {
srand(time(NULL));
int n = 1000;
float x, y;
float summ = 0;
float S = (2.0 - 1.0)*(2.0-0.5);
for (int i = 0; i < n; i++) {
x = 1.0 + static_cast <float> (rand()) /
(static_cast <float> (RAND_MAX));//1 .. 2
y = 0.5 + static_cast <float> (rand()) /
(static_cast <float> (RAND_MAX)) * 1.5;// 0.5 .. 2
if (x <= 2 && x*y >= 1 && y <= x) {
cout <<"\n_______\nx = "<< x;
cout << "\ny = " << y;
summ += powf(x, 2) / powf(y, 2);
}
}
cout << endl << "n=" <<n;
cout << endl << "s=" <<S;
cout << endl << endl <<"vicislili integral="<<
(S / (float)n) * summ << endl;
}
Точность добавится, только если увеличить количество точек.
Всем приветТакая проблема: нет возможности заполнить массив структур - программа тут же заканчивается, предлагая закрыть окно
Язык программирования с++Нужно вставить надпись
Начал изучать C++ Builder 103 и сразу столкнулся с непонятной ошибкой