Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Увеличение точности вычислений


Автор: A32 14.3.2018, 00:10
Не хватает 15 значащих цифр переменной Double. Считаю в макросе орбиту Сатурна - первый з-н Кеплера не выполняется. Не сильно - но до трёх последних значащих цифр доходит. Если считать орбиту спутника Земли - ошибка меньше, но есть - одна цифра. В макросе много операций умножения и ошибка нарастает.
В калькуляторе Windows значащих цифр 32, мне подходит. Можно ли из VBA обратиться к калькулятору или есть другой способ?

Автор: Akina 14.3.2018, 08:23
Цитата(A32 @  14.3.2018,  01:10 Найти цитируемый пост)
Можно ли из VBA обратиться к калькулятору

Можно. Но при большом количестве операций замаешься ждать результата. Используй внешние библиотеки длинной арифметики (скажем, LongNum http://www.cyberforum.ru/vba/thread1780318.html#post9432563 или там BigRational https://archive.codeplex.com/?p=bcl), или BigInteger из .Net.

Автор: Romikgy 14.3.2018, 09:39
может алгоритм  подкрутить ? можно на него взглянуть ?

Автор: A32 15.3.2018, 00:58
Цитата(Romikgy @ 14.3.2018,  09:39)
может алгоритм  подкрутить ? можно на него взглянуть ?

Там нечего подкручивать, он простой, как пять копеек. Задаются начальные координаты и начальные скорости,  интервал времени dt. Считается сила, действующая на спутник и новые координаты через время  dt. Для взглянуть файл прилагается, но без расчётов, т.к. с расчётами он весит 1,5 М и я не хочу грузить сервер форума ненужными данными. Там один макрос - он всё и считает, там всё закомментировано. Расчётов задано 10 тыс., это примерно один оборот спутника при заданных условиях. Кеплеровские площади на Листе2 (там есть 10 расчётов для примера, но всё норм - ошибка появляется где-то после 1000 расчётов), исходные данные на Листе1. Неприятность в том и заключается, что каждый расчёт содержит ошибку, а следующий расчёт исходит из предыдущего и ошибка накапливается.
А сервер не дал мне загрузить файл exel. Загрузил текстовой с макросом.

Автор: A32 15.3.2018, 01:14
Цитата

Можно. Но при большом количестве операций замаешься ждать результата. Используй внешние библиотеки длинной арифметики.

Посмотрел и не понял, надо разбираться. Правильно я понял, что длинное число сохраняется As Object ?

Автор: Romikgy 15.3.2018, 09:47
A32, это 
Sub TR6()   
вызывается 1000 раз?
Цитата

M0 = Лист1.Cells(4, 1)
M1 = Лист1.Cells(5, 1)
VX1 = Лист1.Cells(11, 1)
VY1 = Лист1.Cells(12, 1)
X10 = Лист1.Cells(7, 1)
Y10 = Лист1.Cells(8, 1)
DT = Лист1.Cells(15, 1)               ' сек интервал интегрирования
i1 = Лист1.Cells(17, 1)

эти данные можно увидеть ? и как узнать какие должны быть цифры после 1000 расчетов?
Цитата(A32 @  14.3.2018,  23:58 Найти цитируемый пост)
А сервер не дал мне загрузить файл exel. 

что архиваторами не? религия не позволяет?

Добавлено через 11 минут и 58 секунд
Цитата(A32 @  13.3.2018,  23:10 Найти цитируемый пост)
Double

попробуйте заменить его на тип
Цитата

Тип данных Decimal

Автор: A32 15.3.2018, 10:49
Цитата(Romikgy @ 15.3.2018,  09:47)
эти данные можно увидеть ? и как узнать какие должны быть цифры после 1000 расчетов?

Они должны быть одинаковыми
Цитата

что архиваторами не? религия не позволяет?

Туплю иногда

Цитата

вызывается 1000 раз?

Запускается один раз вручную RUNом

Автор: Romikgy 15.3.2018, 11:41
у меня всегда цифры одни и теже
на что смотреть?

Добавлено через 2 минуты и 26 секунд
или имеется ввиду что на лист 2 
5 строка 
-2,860560000000E+10
а  10000
-2,860560000006E+10
это имелось ввиду?

Автор: A32 15.3.2018, 11:51
Да ну, как это? Уже в 87 строке последние значащие цифры ...9,9988 (Лист2, первый столбец), а дальше есть гораздо больше. Ошибка не нарастает монотонно, а гуляет вокруг среднего значения. Вот я и хочу понять - что это: ошибка вычисления или метода?

Добавлено @ 11:52
Цитата(Romikgy @ 15.3.2018,  11:41)
у меня всегда цифры одни и теже
на что смотреть?

Добавлено @ 11:43
или имеется ввиду что на лист 2 
5 строка 
-2,860560000000E+10
а  10000
-2,860560000006E+10
это имелось ввиду?

Да, конечно.  Но это ..0,0565 и вопрос в принципе - где косяк?

Автор: Romikgy 15.3.2018, 12:02
что это за формула 
DS1 = (Y11 * (X11 - X10) - X11 * (Y11 - Y10)) / 2

что она выражает? по какой причине у вас кусочные данные по х перемножаются с кусочными данными по у ??

Добавлено через 5 минут и 46 секунд
Цитата

X11 = X10 + VX1 * DT: Y11 = Y10 + VY1 * DT
DS1 = (Y11 * (X11 - X10) - X11 * (Y11 - Y10)) / 2

отсюда выводится
DS1 = (Y11 * (VX1 * DT) - X11 * (VY1 * DT)) / 2
для какой цели перемножается скорость по оси х со смещением по у ??? 

Автор: Romikgy 15.3.2018, 16:07
Я так понимаю, это аналог симуляции , выстрела 1 кг телом с полюса для вывода его на орбиту....
так вот радиус ваш с каждой итерацией уменьшается... соотв. увеличивается гравитация , что видно из листа 5 
Вы через землю стреляете? 

Автор: A32 15.3.2018, 23:38
Цитата(Romikgy @ 15.3.2018,  12:02)
что это за формула 
DS1 = (Y11 * (X11 - X10) - X11 * (Y11 - Y10)) / 2

Макрос считает орбиту тела (координаты), начиная с заданных, это лист4. Проверкой корректности расчёта является соответствие результатов второму закону Кеплера.
DS1 - это площадь треугольника с вершинами в (0,0),(X10,Y10),(X11,Y11), X11 и Y11 считаются так, будто бы на тело НЕ действует центральная сила, второй расчёт DS1 (надо было бы обозвать его DS2) считается с учётом действия центральной силы. Эти площади должны быть равны между собой и равны рассчитанным на предыдущем шаге. И на следующем шаге то же должны быть равны. Любое отклонение является признаком ошибки расчёта. Если бы я стрелял с полюса в Луну - я бы удовлетворился такой точностью. Но у меня другая мысль, которую я хотел бы проверить расчётом. Ещё не проверил, застрял здесь, но, допустим, расчёты её (мысль) подтвердят и я на форуме астрономов говорю (к примеру): "Устройство нашей планетной системы описано неправильно, вот расчёты". Что я услышу в ответ? - А32, ты с начала разберись со своими расчётами -  у тебя законы Кеплера не соблюдаются.
То, что радиус уменьшается - это нормально, Земля в расчётах предполагается точечной массой и встреча тела с поверхностью не предусмотрена. И начальные скорости заданы произвольно, орбита - эллипс, т.е. и первый закон Кеплера выполняется. Но если задать первую космическую скорость - тело улетает по параболе. Законы Кеплера и в этом случае соблюдаются, а расчёт неправильный, надо искать ошибку. И, возможно, ошибка метода проявляется именно в этом неравенстве площадей. Но это неравенство незначительно, оно, возможно, следствие машинной ошибки. Отсюда и тема - как увеличить точность вычислений для того, что бы понять, откуда растут ноги у этой ошибки.

Автор: Romikgy 16.3.2018, 00:12
Цитата(A32 @  15.3.2018,  22:38 Найти цитируемый пост)
DS1 - это площадь треугольника с вершинами в (0,0),(X10,Y10),(X11,Y11)

уже интересно , меня смущает формула расчета этого треугольника...

Цитата(A32 @  15.3.2018,  22:38 Найти цитируемый пост)
То, что радиус уменьшается - это нормально, Земля в расчётах предполагается точечной массой и встреча тела с поверхностью не предусмотрена. 

странно ...

Цитата(A32 @  15.3.2018,  22:38 Найти цитируемый пост)
как увеличить точность вычислений для того, что бы понять, откуда растут ноги у этой ошибки.

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

ЗЫ а можно линк на этот закон Кеплера и эти площади треугольников, а то кроме математики и физики мало чего знаю...

Автор: Romikgy 16.3.2018, 00:38
Цитата(A32 @  15.3.2018,  22:38 Найти цитируемый пост)
второму закону Кеплера

Цитата

Каждая планета движется в плоскости, проходящей через центр Солнца, причём за равные промежутки времени радиус-вектор, соединяющий Солнце и планету, описывает равные площади.

https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD%D1%8B_%D0%9A%D0%B5%D0%BF%D0%BB%D0%B5%D1%80%D0%B0
Цитата(A32 @  15.3.2018,  22:38 Найти цитируемый пост)
считаются так, будто бы на тело НЕ действует центральная сила, второй расчёт DS1 (надо было бы обозвать его DS2) считается с учётом действия центральной силы. Эти площади должны быть равны между собой и равны рассчитанным на предыдущем шаге.

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

Добавлено через 1 минуту и 39 секунд
Цитата(A32 @  15.3.2018,  22:38 Найти цитируемый пост)
"Устройство нашей планетной системы описано неправильно, вот расчёты". Что я услышу в ответ? - А32, ты с начала разберись со своими расчётами -  у тебя законы Кеплера не соблюдаются.

а что докажет , если площади совпадут ?

Автор: A32 16.3.2018, 01:12
Цитата

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


Вы, видимо, не там искали - история вопроса древняя, 17 век. Да и не надо было искать, всё доказывается на школьном уровне, здесь всё на самом деле просто. Но, если интересно, в Математических началах натурфилософии Ньютона (прилагаются)  з-н Кеплера доказывается именно так, как у меня считается. Никто, вроде бы, метод не оспорил. Вы первый.
Вы всерьёз полагаете, что интеграл криволинейной функции нельзя рассчитать на компьютере потому, что в расчётах используются прямоугольные отрезки? У Ньютона об этом то же есть.
Цитата

а что докажет , если площади совпадут ?

Что расчёт корректен хотя бы в принципе.

Автор: Romikgy 16.3.2018, 10:09
Цитата(A32 @  16.3.2018,  00:12 Найти цитируемый пост)
Вы первый.

это значит  что я лучший ? )))

Цитата(A32 @  16.3.2018,  00:12 Найти цитируемый пост)
Вы всерьёз полагаете, что интеграл криволинейной функции нельзя рассчитать на компьютере потому, что в расчётах используются прямоугольные отрезки? 

можно , но в в ваших расчетах нет интеграла !
user posted image
а теперь посмотрите на то что выдает ваша программа у вас центростремительное ускорение всегда одинаково?

Автор: A32 16.3.2018, 15:45
Если Вы решили, что центростремительное ускорение во всех точках орбиты должно быть одинаковым, то это ошибка.

И я правильно понял Ваше мнение: ошибка расчётов в 0,0000000002%, случайная, не систематическая, иногда вообще равная нулю - следствие принципиально ошибочного расчёта?  

Автор: Romikgy 16.3.2018, 22:04
Цитата(A32 @  16.3.2018,  14:45 Найти цитируемый пост)
Если Вы решили, что центростремительное ускорение во всех точках орбиты должно быть одинаковым, то это ошибка.

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


Цитата(A32 @  16.3.2018,  14:45 Найти цитируемый пост)
И я правильно понял Ваше мнение: ошибка расчётов в 0,0000000002%, случайная, не систематическая, иногда вообще равная нулю - следствие принципиально ошибочного расчёта?   

нет , не случайная
мое мнение , что при таком способе расчета площадей треугольников , это закономерная ошибка....
учитывая точность вычислений ( делал на питоне ) максимальная ошибка(ds2-ds1) при шаге по времени в 1.5 секунды за 100000 : 0.00398254394531,  что соответствует ошибке в 13 знаке (это если разделить макс ошибку на макс дс)  
при шаге 1.5e-3 макс ошибка 4.24198806286e-05
при шаге 1.5e-5 макс ошибка 1.33877620101e-07
при шаге 1.5e-6 - ошибка уходит в ноль .... 
не думаю что точность в 6 порядков ... упирается в машинную ошибку вычислений... я думаю , что на таком мелком шаге, кривизна эллипса(одна сторона треугольника) выравнивается до прямой (с очень малой ошибки аппроксимации) 
Это мое мнение как математика и программиста , я не силен в космогонии .... могу и ошибаться, но математически считаю себя правым.

Автор: A32 16.3.2018, 23:37
Цитата(Romikgy @ 16.3.2018,  22:04)
я так не решил ... я знаю что это не так
Но формулы, которые вы указали в качестве доказательств правдивости закона Кеплера, говорят о том , что ускорение  постоянно ... или я не правильно читаю текст . 

Вы привели этот аргумент (неравенство ускорений) как доказательство ошибочности расчётов. Отменено?
И я на самом деле не понимаю, о каких формулах речь? О тех, что в макросе? Я не доказывал закон Кеплера, это сделали до меня.

Цитата(Romikgy @ 16.3.2018,  22:04)
нет , не случайная
при шаге 1.5e-5 макс ошибка 1.33877620101e-07
при шаге 1.5e-6 - ошибка уходит в ноль .... 

Как правило, ошибка расчёта пропорциональна результату, нет ничего удивительного в том, что она уменьшается с уменьшением шага. И шаг у меня не меняется, а ошибка то есть, то нет. Но не случайная? Но чёрт бы со словом случайная, с остальным то как? (не систематическая и, временами, вообще пропадающая). Расчёты, основанные на ошибочной идее так себя не ведут.
Но самое интересное вот где: утверждая некорректность моих расчётов, Вы, тем самым, объявляете некорректным доказательство Ньютона, потому, что расчёты прямо следуют из доказательства.
И ко мне можно обращаться на ты.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)