Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Большая погрешность в вычислении длины кривой - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Запрет на запуск нескольких копий http://www.cyberforum.ru/cpp/thread1853386.html
Возможно ли сделать так, что может быть запущена только одна копия программы (копий несколько по всему диску, они имеют разное название)?
C++ Поместить *.exe в ресурсы программы Моя прога использует стороннюю. Необходимо как-то засунуть стороннюю программу в ресурсы моей, чтобы оттуда её вызывать. У меня Visual c++ 2010 express, в нём отключено редактирование ресурсов.... http://www.cyberforum.ru/cpp/thread1852629.html
C++ Обработка изображение стандартами С++
Добрый день, нужно обработать изображение средствами С++ без сторонних библиотек: Разработка методов пороговой фильтрации Разработка методов геометрической фильтрации и распознание объекта на...
Unique ptr в классе C++
Добрый вечер, есть ли реальное решение придерживаться правилу нуля и иметь в классе std::unique_ptr ?
C++ Объясните принцип шаблона Common_type http://www.cyberforum.ru/cpp/thread1850441.html
Читал шаблоны из распространённых библиотек и наткнулся на template<class _Ty0, class _Ty1> struct common_type<_Ty0, _Ty1> { // type is common type of _Ty0 and _Ty1 for two arguments...
C++ Экспорт функции DLL Вечер добрый. Работаю над проектом, в котором из DLL экспортируются функции для другого проекта. Столкнулся с проблемой, что сначала была VC 2010, и все работало. Потом поставил VС 2015 Community и... подробнее

Показать сообщение отдельно
almalexia1997
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 16
20.11.2016, 13:00  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
почему?
не знаю даже. видимо все дело в функции считающей производную. я кстати нашел ошибку у себя в функции интеграла:
надо исправить ее на это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double Integral(double a, double b, double n, vector<double>x, vector<double>abs_y) {
    double A1, A2;
    if (a > -a){ A1 = b; A2 = a; }
    else{ A1 = a; A2 = b; }
    double I = 0, t0 = -sqrt(3.0 / 5.0), t1 = 0.0, t2 = sqrt(3.0 / 5.0), h = A2 / n, x0, x1, x2; int i = 0;
    while (i<n) {
        x0 = (h + 2 * i*h) / 2.0 + h*t0 / 2.0;
        x1 = (h + 2 * i*h) / 2.0 + h*t1 / 2.0;
        x2 = (h + 2 * i*h) / 2.0 + h*t2 / 2.0;
        I += h*(5 * (sqrt(1 + dL(x0, n, x, abs_y)*dL(x0, n, x, abs_y))) + 8 * (sqrt(1 + dL(x1, n, x, abs_y)*dL(x1, n, x, abs_y))) + 5 * (sqrt(1 + dL(x2, n, x, abs_y)*dL(x2, n, x, abs_y)))) / 18.0;
        i++;
    }
    return I;
}
в квадратичной формуле Гаусса немного ошибся и два раза сосчитал в точке x1.
теперь погрешность стала нормальная, только понять не могу еще одно:
Результат интеграла я умножаю на два чтобы получить длину всего контура эллипса но в итоге я получаю длину только одной верхней полуоси так и мне приходится еще раз умножать на 2 чтобы получить длину всего уже контура.
Почему так получается никто не знает? Может у меня в математике плохо и я что-то не понимаю.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru