Добавить в корзинуПозвонить
Найти в Дзене
Сергей Вычегжанин

Высокоточная переменная для численного решения задачи n тел (n-body problem), показан пример нахождения встроенной функции sin(x)

Для компьютерного моделирования движения n тел с учетом взаимного гравитационного воздействия, исследования динамики Солнечной системы, функционирования "черных дыр" и развития Вселенной разработана новая универсальная высокоточная переменная "Big Double" и алгоритмы программы на ее основе. Главное преимущество действительной переменной "Big Double" состоит в том, что разрядность мантиссы и предельную величину экспоненты можно задавать в широких пределах. Протестировано изменение разрядности до 36 десятичных разрядов на решении задачи 12 тел. Результат интегрирования уравнений движения тестовой симметричной периодической задачи 12 тел показан на картинке. Переменная имеет практически все встроенные функции, включая арифметические и логические операции, корень квадратный, тригонометрические и специальные функции, в том числе необходимые для преобразования типов переменных и графического отображения. В ходе разработки встроенных тригонометрических функции переменная "Big Double" возн
Тест - образец решения симметричной периодической задачи 12 тел
Тест - образец решения симметричной периодической задачи 12 тел

Для компьютерного моделирования движения n тел с учетом взаимного гравитационного воздействия, исследования динамики Солнечной системы, функционирования "черных дыр" и развития Вселенной разработана новая универсальная высокоточная переменная "Big Double" и алгоритмы программы на ее основе.

Главное преимущество действительной переменной "Big Double" состоит в том, что разрядность мантиссы и предельную величину экспоненты можно задавать в широких пределах. Протестировано изменение разрядности до 36 десятичных разрядов на решении задачи 12 тел. Результат интегрирования уравнений движения тестовой симметричной периодической задачи 12 тел показан на картинке.

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

В ходе разработки встроенных тригонометрических функции переменная "Big Double" возникла проблема максимально точного нахождния функции sin(x). В данной работе показан вариант решения задачи с помощью специальных быстро сходящихся рядов.

Определение параметров: "погрешность" и "точность" расчетов.

В прецизионном компьютерном моделировании физических явлений первостепенное значение имеют понятия: "погрешность" и "точность" расчетов.

По сути, мы не ставим под сомнение и не рассматриваем соответствие математических уравнений, описывающих явление реальности, а только пытаемся оценить погрешность или точность расчетов при численном решении этих уравнений.

При детализации решения разных задач возникают вопросы при оценке точности тех или иных методов, например аппроксимации значений функции в заданной области.

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

Погрешность - это разность между значением переменной, которое получено методом с более высокой точностью, статистической обработкой расчетных данных или заранее задано (например в тестовой задаче) и значением той же переменной, вычисленной тестируемым методом.

Понятно, что погрешность не может быть абсолютной, потому как точное контрольное значение практически всегда неизвестно, а погрешность зависит не только от метода, но и от разрядности переменных компьютера и погрешности исходных данных.

Относительная погрешность - это отношение погрешности к выбранному значению функции, например среднему или максимальному на интервале.

Точность - это величина, обратная погрешности, чем меньше погрешность, тем выше точность.

Для вычисления точности удобно применять формулу в так называемых "дробных битах", которые отражают разрядность применяемых действительных переменных в компьютере, чем выше разрядность переменных, тем выше точность.

Abit= - ln(|E|)/ln(2),

где Abit - точность, Е - погрешность.

Построение графика точности имеет свои преимущества, так как график рассчитывается и строится в логарифмическом масштабе.

Особенности применения переменной Big Double.

Для использования переменной Big Double в программе необходимо подключить библиотеку BigDoublelib, в которую включены практически все необходимые описания, преобразования, арифметические и логические операции, корень квадратный, тригонометрические и специальные функции, в том числе необходимые для преобразования типов переменных и графического отображения.

Есть несколько принципиальных ограничений использования переменной.

Прежде всего, в формулах расчета, задаваемых одной строкой кода необходимо использовать только переменные Big Double.

использование различных типов данных в одной формуле не допускается.

Поэтому операнды формулы должны быть заранее преобразованы в тип Big Double, например:

B_180=new BigDouble(180);

B_pi = Big_Pi;

Тогда значение B_pi программе будет

B_pi = 3.14159265358979323846264338327950288412.

Встроенные функции также имеют специальный вид, например:

sqrt_big (B_x), sin_big (B_x), cos_big (B_x) и др.

Аргументы этих функций также должны быть преобразованы к типу Big Double.

В случаях не выполнения этих требований компилятор выдаст сообщения об ошибках.

Приведем пример применения переменной Big Double при заданной разрядности bigDouble.Length = 36, который легко проверить с помощью калькулятора.

Вычисление синуса 10 градусов:

B_180 = new BigDouble(180);

B_x = new BigDouble(10);

print (' sin('10) = ', sin_big(B_x*B_pi /B_180));

В итоге имеем:

sin( 10 ) = 0.17364817766693034885171662676931482785

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

Новая универсальная высокоточная переменная "Big Double" и алгоритмы программы на ее основе весьма эффективно используются автором для компьютерного моделирования движения n тел с учетом взаимного гравитационного воздействия, исследования динамики Солнечной системы, функционирования "черных дыр" и развития Вселенной.

Кроме того, получен весьма положительный опыт применения переменной "Big Double" для снижения погрешности решения плохо обусловленных больших систем линейных алгебраических уравнений (СЛАУ) в несколько тысяч уравнений , что очень важно для прочностных расчетов методом конечных элементов и компьютерного моделирования электрических полей.