![]() |
|
|
![]()
|
|
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Решаю кубическое уравнение, используя тригонометрическую формулу Виета.
Однако почему-то возникает довольно ощутимая погрешность. Это следствие несовершенства метода или весь вопрос в численных преобразованиях? Например, при вводе коэффициентов a=b=c=d=1, естественно корень уравнения должен быть -1, однако так не получается. Почему? Кроме того при некоторых значениях коэффициентов возникает ошибка неправильного аргумента. Например, при a=3, b=4, c=4, d=-6, программа не может решить уравнение, потому что ей приходится вычислять натуральный логарифм, где аргументом является отрицательное число, чего быть не должно.
Однако надо отметить, что я прибегаю к вычислению натурального логарифма по той причине, что не могу сразу вычислить значения гиперболических функций Arch, Arsh, ch, sh. Эти функции не реализованы в math.h. Как можно их подключить к программе чтобы не связываться с логарифмами? А вот сама программа. Присоединённый файл ( Кол-во скачиваний: 8 )
Cubic.zip 248,48 Kb |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Это сколько? float гарантировано врет в 6й значащей цифре. Если значение составляет сотни, то это уже погрешность в 4м знаке после запятой. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Я в программе реализовал проверку погрешности. ![]() В уравнение вместо х подставляется найденный корень. Вот при решении уравнения на скриншоте - ошибка в 0.03. Я считаю это большая ошибка. |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: нет Всего: 49 |
Не такая уж большая. На текст программы не посмотреть, но, судя по имеющемуся кусочку, никаких попыток предотвратить потерю точности Вы не предпринимали. Попробуйте заменить везде float на double и посмотреть, что получится. |
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Вот весь текст.
На double менял - результат аналогичен. |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
1.0/3 или что-то подобное религия написать не позволяет? А вообще, What Every Computer Scientist Should Know About Floating-Point Arithmetic Вам в руки. -------------------- |
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Я писал 1/3 - это не работало, потому вставил 0.33333333333333333 Добавлено через 6 минут и 12 секунд кстати, проверял формулу Виета вручную, округляя до 20 знаков после запятой - ответ получился точно таким же. И еще проблема с отрицательным логарифмом... как все таки можно подключить вычисление гиперболических функций? |
|||
|
||||
| baldina |
|
||||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
это у Вас основание натурального логарифма задано с такой поразительной точностью? И какой точности после этого Вы ожидаете в результате?
при таких данных q = 3^2 - 3*4 < 0 и t должно быть fabs ® / sqrt (...) Вобщем поглядите свой "алгоритм" еще раз внимательно, там ошибки. Добавлено через 2 минуты и 59 секунд
1/3 и 1./3 - две большие разницы. первое - целочисленное деление, результат округляется до целого (т.е. 0)
чего её проверять, её 400 лет назад проверили, ошибок нет а вот проверять "до 20 знака", беря e=2.7183 - сами понимаете... |
||||||||||||||
|
|||||||||||||||
| Нитонисе |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Указанный фрагмент относится к вычисление гиперболического косинуса, который равен: ch(x) = [e^x + e^(-x)]/2 Я взял е равным 2.7183. А чему равно е?
http://ru.wikipedia.org/wiki/Тригонометрич...я_формула_Виета Посмотрите ссылку, там все же r берется не по модулю. А где еще? |
||||
|
|||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: нет Всего: 49 |
||||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Нитонисе
M_E -- The base of natural logarithms (e). http://msdn.microsoft.com/en-us/library/4hwaceh6.aspx -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: нет Всего: 49 |
||||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Заменил экспоненту на M_E, число пи на M_PI. Результат тот же. Добавлено через 1 минуту и 26 секунд Так а что насчет гиперболических функций? Как их подключить? Добавлено через 2 минуты и 4 секунды Ну и какой у нас показатель экспоненты? |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |