1

Тема: Як екстраполювати помилки при обрахуванні наступної позиції?

Добрий день, я олень.

Я знаю, як екстраполювати помилки, коли ми обраховуємо наступну позицію в звичайних декартових координатах на площині.
Формула наступної позиції буде така от

наступна позиція = поточна позиція + вектор напрямку та швидкості * час
наступне помилка = поточна помилка + час в квадраті * помилка вектору напрямку та швидкості

під помилкою я маю на увазі стандартне відхилення. Для позиції воно в метрах, для вектору напрямку та швидкості в метрах на секунду.

Але якшо ми хочемо зробити те саме, але в координатах планети (а конкретніше моделі еліпсоїда WGS84), то наступна позиція рахується отако

// js
export function calcNextPos(
  currentLat: number,
  currentLon: number,
  bearing: number,
  speed: number
): { lat: number; long: number } {
  // Constants for WGS84 ellipsoid
  const a = 6378137; // Semi-major axis
  const f = 1 / 298.257223563; // Flattening

  // Convert speed from meters per second to meters per millisecond
  const speedPerMillisecond = speed / 1000;

  // Convert bearing from degrees to radians
  const bearingRad = (bearing * Math.PI) / 180;

  // Calculate the distance traveled in meters in 1 second
  const distance = speedPerMillisecond * 1000;

  // Convert current latitude to radians
  const currentLatRad = (currentLat * Math.PI) / 180;

  // Calculate the reduced latitude
  const tanReducedLat = (1 - f) * Math.tan(currentLatRad);
  const reducedLat = Math.atan(tanReducedLat);

  // Calculate the change in latitude
  const deltaLat =
    (distance * Math.cos(bearingRad)) / (a * (1 - f) + reducedLat);

  // Calculate the change in longitude
  const deltaLon =
    (distance * Math.sin(bearingRad)) / (a * Math.cos(reducedLat));

  // Calculate the next latitude and longitude
  const nextLat = currentLat + (deltaLat * 180) / Math.PI;
  const nextLon = currentLon + (deltaLon * 180) / Math.PI;

  return { lat: nextLat, long: nextLon };
}

тут багато чого, як бачите. У нас навіть вектору нема, а є просто кут (bearing) та швидкість, котрі разом показують, в якому напрямку і з якою швидкістю ми рухаємося.
І от всі ці компоненти мають свою стандартну похибку (поточна позиція, напрямок руху та швидкість мають свої стандартні похибки, в метрах, градусах та метрах на секунду відповідно).
А як обрахувати тепер стандартну похибку нової позиції?

2

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

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

наступне помилка = поточна помилка + час в квадраті * помилка вектору напрямку та швидкості

тут під помилкою мається на увазі дисперсія, а мені на вхід дається стандартна похибка

стандартна похибка = квадратний корінь дисперсії

3 Востаннє редагувалося HetmanNet (03.06.2023 16:55:16)

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

FakiNyan написав:

Добрий день, я олень.

Я знаю, як екстраполювати помилки, коли ми обраховуємо наступну позицію в звичайних декартових координатах на площині.
Формула наступної позиції буде така от

наступна позиція = поточна позиція + вектор напрямку та швидкості * час
наступне помилка = поточна помилка + час в квадраті * помилка вектору напрямку та швидкості

під помилкою я маю на увазі стандартне відхилення. Для позиції воно в метрах, для вектору напрямку та швидкості в метрах на секунду.

Але якшо ми хочемо зробити те саме, але в координатах планети (а конкретніше моделі еліпсоїда WGS84), то наступна позиція рахується отако

// js
export function calcNextPos(
  currentLat: number,
  currentLon: number,
  bearing: number,
  speed: number
): { lat: number; long: number } {
  // Constants for WGS84 ellipsoid
  const a = 6378137; // Semi-major axis
  const f = 1 / 298.257223563; // Flattening

  // Convert speed from meters per second to meters per millisecond
  const speedPerMillisecond = speed / 1000;

  // Convert bearing from degrees to radians
  const bearingRad = (bearing * Math.PI) / 180;

  // Calculate the distance traveled in meters in 1 second
  const distance = speedPerMillisecond * 1000;

  // Convert current latitude to radians
  const currentLatRad = (currentLat * Math.PI) / 180;

  // Calculate the reduced latitude
  const tanReducedLat = (1 - f) * Math.tan(currentLatRad);
  const reducedLat = Math.atan(tanReducedLat);

  // Calculate the change in latitude
  const deltaLat =
    (distance * Math.cos(bearingRad)) / (a * (1 - f) + reducedLat);

  // Calculate the change in longitude
  const deltaLon =
    (distance * Math.sin(bearingRad)) / (a * Math.cos(reducedLat));

  // Calculate the next latitude and longitude
  const nextLat = currentLat + (deltaLat * 180) / Math.PI;
  const nextLon = currentLon + (deltaLon * 180) / Math.PI;

  return { lat: nextLat, long: nextLon };
}

тут багато чого, як бачите. У нас навіть вектору нема, а є просто кут (bearing) та швидкість, котрі разом показують, в якому напрямку і з якою швидкістю ми рухаємося.
І от всі ці компоненти мають свою стандартну похибку (поточна позиція, напрямок руху та швидкість мають свої стандартні похибки, в метрах, градусах та метрах на секунду відповідно).
А як обрахувати тепер стандартну похибку нової позиції?

Що ви маєте на увазі під "стандартна"? Ніяких претензій, просто уточнюю.

Якщо вас цікавить похибка загалом, то тут є загальна практика визначення відхилень в розрахунках якої вчать в універах.

Але перше що зауважу, то працюйте в єдиній системі координат, якщо у вас кутова то берете швидкість та напрям та розкладаєте на два перпендикулярні вектори по осях та переводити їх в кутову швидкість з врахуванням висоти, а потім вже рахуєте відстані в кутових мірах, а потім коли треба переводити назад в інші системи. Це як мінімум додасть точності, а по друге дозволить простіше обраховувати похибку.

Друге, що пораджу, то згадати про структури та їх передавати, то за одно дозволить динамічно рахувати похибки які повертатимете з результатом в одній структурі та виявляти похибки які накопичуються наприклад якщо у вас є зворотній зв'язок в обчисленнях.

Третє, то в універах вчать такої штуки як методика розрахунку загальної похибки для експериментів та розрахунків, при тому вчать всіх у кого є хоч якісь числа в роботах, тож пошукайте просто методички по них. Для практичних цілей зазвичай вистачає (наприклад розрахунки в середині автопілота), для теоретичних бракує, але там вже треба нюанси знати, наприклад якщо це теоретичні параметри точності автопілота то там треба дискретність та затримки враховувати, тож буде замало тих методичок.

Подякували: leofun011

4

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

FakiNyan написав:

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

наступне помилка = поточна помилка + час в квадраті * помилка вектору напрямку та швидкості

тут під помилкою мається на увазі дисперсія, а мені на вхід дається стандартна похибка

стандартна похибка = квадратний корінь дисперсії

Трястя, поки відволікся ви вже написали що мали під стандартна.

Подякували: FakiNyan1

5

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

HetmanNet написав:

Що ви маєте на увазі під "стандартна"? Ніяких претензій, просто уточнюю.

Якщо вас цікавить похибка загалом, то тут є загальна практика визначення відхилень в розрахунках якої вчать в універах.

Але перше що зауважу, то працюйте в єдиній системі координат, якщо у вас кутова то берете швидкість та напрям та розкладаєте на два перпендикулярні вектори по осях та переводити їх в кутову швидкість з врахуванням висоти, а потім вже рахуєте відстані в кутових мірах, а потім коли треба переводити назад в інші системи. Це як мінімум додасть точності, а по друге дозволить простіше обраховувати похибку.

Друге, що пораджу, то згадати про структури та їх передавати, то за одно дозволить динамічно рахувати похибку яку повертатимете з результатом в одній структурі та виявляти похибки які накопичуються наприклад якщо у вас є зворотній зв'язок в обчисленнях.

Третє, то в універах вчать такої штуки як методика розрахунку загальної похибки, при тому вчать всіх у кого є хоч якісь числа в роботах, тож пошукайте просто методички.

те й маю https://uk.wikipedia.org/wiki/%D0%A1%D1 … 0%BD%D1%8F

я використовую той самий алгоритм, який використовується спеціалізованою бібліотекою для подібних розрахунків

6 Востаннє редагувалося HetmanNet (03.06.2023 17:10:02)

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

FakiNyan написав:
HetmanNet написав:

Що ви маєте на увазі під "стандартна"? Ніяких претензій, просто уточнюю.

Якщо вас цікавить похибка загалом, то тут є загальна практика визначення відхилень в розрахунках якої вчать в універах.

Але перше що зауважу, то працюйте в єдиній системі координат, якщо у вас кутова то берете швидкість та напрям та розкладаєте на два перпендикулярні вектори по осях та переводити їх в кутову швидкість з врахуванням висоти, а потім вже рахуєте відстані в кутових мірах, а потім коли треба переводити назад в інші системи. Це як мінімум додасть точності, а по друге дозволить простіше обраховувати похибку.

Друге, що пораджу, то згадати про структури та їх передавати, то за одно дозволить динамічно рахувати похибку яку повертатимете з результатом в одній структурі та виявляти похибки які накопичуються наприклад якщо у вас є зворотній зв'язок в обчисленнях.

Третє, то в універах вчать такої штуки як методика розрахунку загальної похибки, при тому вчать всіх у кого є хоч якісь числа в роботах, тож пошукайте просто методички.

те й маю https://uk.wikipedia.org/wiki/%D0%A1%D1 … 0%BD%D1%8F

я використовую той самий алгоритм, який використовується спеціалізованою бібліотекою для подібних розрахунків

Не завжди спеціалізовані бібліотеки є ідеальними.

А щодо методички, то студентам дають найпростіший допустимий шлях, що спростить вам життя.

А ще, якщо хочете прогнозованої точності то обирайте мови зі типізацією, і чим строгіша тим краще, бо інакше всі ваші зусилля з розрахунку точності можуть піти коту під хвіст. Причина в тому, що представлення даних і їх приведення і т.д. мають похибки, якщо в типізованих ти задає представлення даних і відповідно знаєш їх точність, то в нетипізованих ні, а ще чим строгіша типізація тим зазвичай більше на тебе покладають потребу приведення типів робити самому (тобто явне), а так як приведення типів має як будь-яка операція похибку то ти явно про неї знатимеш та врахуєш.

Подякували: leofun011

7

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

Користуй радіани [і повидаляй мої коменти], код стане простішим для розуміння.

// js
export function calcNextPosRad(
    currentLatRad: number,
    currentLonRad: number,
    bearingRad: number,
    speed: number
): { latRad: number; longRad: number } {
    // Constants for WGS84 ellipsoid
    const a = 6378137; // Semi-major axis
    const f = 1 / 298.257223563; // Flattening
    // a * (1 - f) == 6356752.314245..
    // a * (1 - f) ==       b
    //     (1 - f) ==       b / a
    //          f  ==  (a - b)/ a
    const b = a * (1 - f);

    // Calculate the reduced latitude
    const reducedLatRad = atan((1 - f) * tan(currentLatRad));
    //     tan(reducedLatRad) ==(1 - f)* tan(currentLatRad)
    //     tan(reducedLatRad) == b / a * tan(currentLatRad)
    // a * tan(reducedLatRad) ==     b * tan(currentLatRad)

    return {
        latRad : currentLatRad + (speed * cos(bearingRad)) / (b + reducedLatRad),
        longRad: currentLonRad + (speed * sin(bearingRad)) / (a * cos(reducedLatRad))
    };
}

Коли весь код буде без градусів (deg), то повидаляй постфікси Rad в назвах змінних.

FakiNyan написав:

екстраполювати помилки .. під помилкою я маю на увазі стандартне відхилення.

Екстраполяція це не сюди. Щоб шукати стандартне відхиленя треба мати функцію розподілу [або щільність розподілу] або готову колекцію даних (координати).

Мені не ясно що саме ти хочеш отримати і на основі яких даних.

Подякували: HetmanNet1

8

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

leofun01 написав:

Екстраполяція це не сюди. Щоб шукати стандартне відхиленя треба мати функцію розподілу [або щільність розподілу] або готову колекцію даних (координати).

Мені не ясно що саме ти хочеш отримати і на основі яких даних.

є три випадкові величини, позиція (довжина і широта), напрямок руху (градуси), і швидкість (метри на секунду).
Маючи ті дані ми можемо обрахувати наступну позицію через певну кількість часу, най буде 1 секунда.

Усі ті три величини мають свої значення стандарного відхилення. Так шо вони не є 100% точними. І якшо ми обрахуємо наступну координату за умови, шо ми рухаємось в тому самому напрямку з тою ж швидкістю, то й та нова координата не буде точною, а матиме якусь стандартну похибку.

От як обрахувати координату я знаю, а як обрахувати похибку поки кода не маю, але маю певну інфу щодо правил обрахунку похибки.
https://en.wikipedia.org/wiki/Propagati … e_formulae

Подякували: leofun011

9 Востаннє редагувалося FakiNyan (03.06.2023 21:56:51)

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

коротше, воно так виходе, шо якшо у нас є функція f(x) і стандартна похибка s, то шоб отримати стандартну похибку результату функції нам тре взяти часткову похідну тої функції і помножити на xs, якшо вірити chat gpt та вікіпедіїа xs це в мене так називалась оригінальна похибка

10 Востаннє редагувалося HetmanNet (03.06.2023 21:25:13)

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

FakiNyan написав:

Усі ті три величини мають свої значення стандарного відхилення.

Ну то питання до джерела даних. Загалом похибка вимірювання.

FakiNyan написав:

І якшо ми обрахуємо наступну координату за умови, шо ми рухаємось в тому самому напрямку з тою ж швидкістю, то й та нова координата не буде точною, а матиме якусь стандартну похибку.

Так, зветься похибка обчислень, яка з'явиться в додачу до похибки вимірювання.

Тобі ж вже казалося, візьми методичку розрахунку загальної похибки для експериментів та розрахунків для студентів, у тебе немає в коді супер розрахунків щоб починати аж із загальної теорії і т.д.

А ще, chatGPT не дає відповідей, він генерує максимально правдоподібний текст, тобто генератор "води". Тож не ускладнюй собі ним життя шукаючи відповіді в ньому. Бо чесно, скільки не тестив на фахових темах ну реально бреше і воду видає. Також статистику по wikipedia не вивчити. Тут треба відповідна література.

Подякували: leofun011

11

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

HetmanNet написав:
FakiNyan написав:

Усі ті три величини мають свої значення стандарного відхилення.

Ну то питання до джерела даних. Загалом похибка вимірювання.

FakiNyan написав:

І якшо ми обрахуємо наступну координату за умови, шо ми рухаємось в тому самому напрямку з тою ж швидкістю, то й та нова координата не буде точною, а матиме якусь стандартну похибку.

Так, зветься похибка обчислень, яка з'явиться в додачу до похибки вимірювання.

Тобі ж вже казалося, візьми методичку розрахунку загальної похибки для експериментів та розрахунків для студентів, у тебе немає в коді супер розрахунків щоб починати аж із загальної теорії і т.д.

А ще, chatGPT не дає відповідей, він генерує максимально правдоподібний текст, тобто генератор "води". Тож не ускладнюй собі ним життя шукаючи відповіді в ньому. Бо чесно, скільки не тестив на фахових темах ну реально бреше і воду видає. Також статистику по wikipedia не вивчити. Тут треба відповідна література.

Треба вміти запитувати просто

12

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

FakiNyan написав:
HetmanNet написав:
FakiNyan написав:

Усі ті три величини мають свої значення стандарного відхилення.

Ну то питання до джерела даних. Загалом похибка вимірювання.

FakiNyan написав:

І якшо ми обрахуємо наступну координату за умови, шо ми рухаємось в тому самому напрямку з тою ж швидкістю, то й та нова координата не буде точною, а матиме якусь стандартну похибку.

Так, зветься похибка обчислень, яка з'явиться в додачу до похибки вимірювання.

Тобі ж вже казалося, візьми методичку розрахунку загальної похибки для експериментів та розрахунків для студентів, у тебе немає в коді супер розрахунків щоб починати аж із загальної теорії і т.д.

А ще, chatGPT не дає відповідей, він генерує максимально правдоподібний текст, тобто генератор "води". Тож не ускладнюй собі ним життя шукаючи відповіді в ньому. Бо чесно, скільки не тестив на фахових темах ну реально бреше і воду видає. Також статистику по wikipedia не вивчити. Тут треба відповідна література.

Треба вміти запитувати просто

А ви вже задавали питання йому так, щоб казав "не знаю" та зізнавався у своїй недосконалості?

13

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

якщо у вас вектор, то це лінійна функція, тобто лінійна регресія

14

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

HetmanNet написав:
FakiNyan написав:
HetmanNet написав:

Ну то питання до джерела даних. Загалом похибка вимірювання.

Так, зветься похибка обчислень, яка з'явиться в додачу до похибки вимірювання.

Тобі ж вже казалося, візьми методичку розрахунку загальної похибки для експериментів та розрахунків для студентів, у тебе немає в коді супер розрахунків щоб починати аж із загальної теорії і т.д.

А ще, chatGPT не дає відповідей, він генерує максимально правдоподібний текст, тобто генератор "води". Тож не ускладнюй собі ним життя шукаючи відповіді в ньому. Бо чесно, скільки не тестив на фахових темах ну реально бреше і воду видає. Також статистику по wikipedia не вивчити. Тут треба відповідна література.

Треба вміти запитувати просто

А ви вже задавали питання йому так, щоб казав "не знаю" та зізнавався у своїй недосконалості?

Ну та. А ще він себе бува виправляв.

15

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

я оце думаю, може це треба перевести ту похибку з метрів в радіани?

ми ж маємо два значення градусів, широта і довжина, а похибку джпс даж в метрах, і каже, шо це радіус кола, в якому з впевненістю 68% може бути справжня координата.

а потім, аби обрахувати нову координату ми переводимо і довжину, і широту, і напрямок руху в радіани, і тільки швидкість руху залишається в метрах на секунду.

То може треба взяти ту похибку і знайти похибку широти та довжини окремо, яка б відповідала 5 метрам? тоді все було б в радіанах

16

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

отут до речі в коді пана leofun01 видно

// Constants for WGS84 ellipsoid
    const a = 6378137; // Semi-major axis
    const f = 1 / 298.257223563; // Flattening
    const b = a * (1 - f);

    // Calculate the reduced latitude
    const reducedLatRad = atan((1 - f) * tan(currentLatRad));

    return {
        latRad : currentLatRad + (speed * cos(bearingRad)) / (b + reducedLatRad),
        longRad: currentLonRad + (speed * sin(bearingRad)) / (a * cos(reducedLatRad))
    };

currentLatRad + speed * (шось) - тобто оце (шось) це типу 1 метр по ширині

тобто,

(cos(bearingRad) / (b + reducedLatRad)) - це один метр по широті буде, та?

а оце

sin(bearingRad) / (a * cos(reducedLatRad)) - це один метр по довготі

та?

тобто, стандартна похибка по широті, це

похибка в метрах * (cos(bearingRad) / (b + reducedLatRad))

ну а по довготі

похибка в метрах * sin(bearingRad) / (a * cos(reducedLatRad))

17

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

FakiNyan написав:

.. в коді пана leofun01 видно ..

Код, який я подав, повністю еквівалентний коду з першого post'а. Джерело того коду мені не відоме. Тож, якщо він не правильний, то і мій код теж буде не правильний.

Якщо код з першого post'а був згенерований chatGPT, то можна впевнено говорити що весь код цього topic'а не правильний.

Щойно розглянув цю задачу з фізичного боку і .. все дуже погано (в коді), в мене одиниці (міри) не збігаються. Десь кути, десь метри, десь метри за секунду, а так не має бути, метри мають дорівнювати метрам, кути - кутам. Щось тут не ок.

18

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

leofun01 написав:
FakiNyan написав:

.. в коді пана leofun01 видно ..

Код, який я подав, повністю еквівалентний коду з першого post'а. Джерело того коду мені не відоме. Тож, якщо він не правильний, то і мій код теж буде не правильний.

Якщо код з першого post'а був згенерований chatGPT, то можна впевнено говорити що весь код цього topic'а не правильний.

Щойно розглянув цю задачу з фізичного боку і .. все дуже погано (в коді), в мене одиниці (міри) не збігаються. Десь кути, десь метри, десь метри за секунду, а так не має бути, метри мають дорівнювати метрам, кути - кутам. Щось тут не ок.

я з вами не згодний, chatGPT дуже розумний та багато допомагає людям, я поважаю chatGPT та ціную його допомогу. Нехай chatGPT буде здоровий і живе вічно!

19

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

То код таки генерований мовною моделю, яку FakiNyan плутає з інтелектом .. і вся ця тема до дупи ..
Так би зразу й зказав, я б не тратив час на аналіз смітя.

А я собі думку гадаю "якого біса кути додають до метрів і пхають в кути ..".

FakiNyan, моя тобі порада: Якщо просиш допомогу в форуму, то хоча би чітко вказуй джерело даних, щоб ми розуміли, з чим маємо справу. А якщо ти так поважаєш chatGPT, що не вважаєш за потрібне сумніватись в його правдивості, то нехай він тобі і далі "помагає".

Подякували: HetmanNet1

20

Re: Як екстраполювати помилки при обрахуванні наступної позиції?

FakiNyan написав:

я оце думаю, може це треба перевести ту похибку з метрів в радіани?

Ну про то вам вже казалося, що переведіть все в єдину систему і в ній рахуйте.

Подякували: leofun011