#include <iostream>
#include <cmath>
float integral(float x) {
return (sqrt(x))/(x + sin(x))
;
}
using namespace std;
int main()
{
float x = 0;
float sum = 0;
float dx = 0.00001;
while (x <= 6)
{
sum = sum + integral(x) * dx;
x = x + dx;
}
cout << sum;
}
Вывод почему то -nan(ind)
C/C++
Помогите задача информатика 9 класс вычислить значение интеграла а выводится -nan(ind)
Естественно, что ∫(0;6) ✓x dx / (x + sin(x)) у Вас не вычисляется, как и должно быть, так как этот несобственный интеграл расходится к +∞, потому что подынтегральная функция имеет простой полюс порядка 0,5 в крайней левой точке области интегрирования.
Если уж надо взять сходящийся интеграл от этой функции, то берите положительные пределы интегрирования a и b (a≤b), количество равномерных интервалов n и считайте не по формуле прямоугольников, а хотя бы, например, по формуле трапеций, что на порядки точнее:

#include
#include
double f(double x)
{
return sqrt(x) / (x + sin(x));
}
int main()
{
double a, b, h, i, n, s;
std::cout.precision(16);
while (true)
{
std::cout > a >> b >> n;
h = (b - a) / n;
s = (f(a) + f(b)) * 0.5;
for (i = 1.; i < n; i += 1.)
s += f(a + i * h);
std::cout
Очевидно же: х=0. Пытаемся вычислить ноль делённый на ноль.
Спасибо за испорченную табуляцию, для кого создали блоки кода?
Проблема возникает из-за неопределенности деления на ноль при вычислении значения функции в точке x=0 (потому нужно использовать значение, как минимум, близкое к нулю), а так же отсутствия проверки на ноль. И никогда не используй using namespace std - это мерзко. Код:
Проблема возникает из-за неопределенности деления на ноль при вычислении значения функции в точке x=0 (потому нужно использовать значение, как минимум, близкое к нулю), а так же отсутствия проверки на ноль. И никогда не используй using namespace std - это мерзко. Код:
#include
#include
float integral(float x)
{
if (x == 0) // добавляем проверку деления на ноль
{
return 0;
}
else
{
return (sqrt(x)) / (x + sin(x));
}
}
int main()
{
float x = 0.00001; // изменяем начальное значение x
float sum = 0;
float dx = 0.00001;
while (x
Андрей Вологжанин
С чего ты вообще взял, что f(0) = 0 - легитимная подстановка значения?
#include <iostream>
#include <cmath>
float integral(float x) {
return (sqrt(x)) / (x + sin(x));
}
using namespace std;
int main() {
float x = 0.00001; // Изменено начальное значение x
float sum = 0;
float dx = 0.00001;
while (x <= 6) {
sum = sum + integral(x) * dx;
x = x + dx;
}
cout << su
m;
return 0;
}
#include <cmath>
float integral(float x) {
return (sqrt(x)) / (x + sin(x));
}
using namespace std;
int main() {
float x = 0.00001; // Изменено начальное значение x
float sum = 0;
float dx = 0.00001;
while (x <= 6) {
sum = sum + integral(x) * dx;
x = x + dx;
}
cout << su
m;
return 0;
}
Похожие вопросы
- Вычислить значение функции F(x), разложенной в ряд и сходящейся в указанной области. Написать программу на языке C++
- Вычислить значение многочлена
- Информатика, 8 класс. C++
- Помогите с информатикой. не могу найти ошибку в коде
- Помогите понять отношения между классами / C/C++
- Почему в школах начинают информатику учить с систем счисления? Это все равно что в 1 классе заставить интегралы учить.
- Для заданных с клавиатуры значений переменных x и n вычислить
- Вычислить для заданного значения ? сумму вида.
- Помогите с задачей в C++ пожалуйста. Какое условие правильно написать в Z чтобы выводилось сообщение "error!" ?
- Создать простой класс, конструктор, и несколько функций. Не могу решить задачу, плохо понял тему, помогите пожалуйста.
✓x / (2x) = 1 / (2✓x).
Но несобственный интеграл
∫(0;6) dx / (2✓x) равен ✓x | (0; 6) = ✓6.
Значит и указанный несобственный интеграл сходится к конечной величине, а не расходится к +∞.
Можно выделить в области интегрирования небольшой сингулярный участок, допустим, [0;0,001], и вычислять интеграл на этом промежутке, например, методом средних, а в остальной области интегрирования по методу Симпсона. Так и делаем.