Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: определение погрешности, бинарный поиск  (Прочитано 17455 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mayor
Специалист

ru
Offline Offline

« : 19-12-2008 19:52 » 

определение погрешности, бинарный поиск

задачка:
в одномерном пространстве на дистанции максимум 1000 парсек, расположено до 100 центров масс удаленных друг от друга не менее чем на 1 парсек, массой от 1 до 1000 единиц каждая
нужно получить координаты точек равновесия с точностью до 10в-9 парсек

если искать бинарным поиском то сколько потребуется циклов на каждый отрезок?

какова в этом плане точность double float?
Записан

1n c0de we trust
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 20-12-2008 05:47 » 

что значит "точки равновесия" ? Точки с нулевой гравитацией ?

а для точности в 9 знаков хватит и float и double Улыбаюсь
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 20-12-2008 09:03 » 

Алексей1153++, в C float не хватит - там 7-8 знаков.

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

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 20-12-2008 09:55 » 

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

для скорости же, числа с плавающей точкой вообще не использовать, нужно взять за единицу значение 1*10-9 парсек и всё вычислять в относительных единицах, используя __int64
« Последнее редактирование: 20-12-2008 09:58 от Алексей1153++ » Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 20-12-2008 10:03 » 

Алексей1153++, на пространстве размерами 1e+3 по 3-м измерениям с точностью 1e-9 будет тупым сканированием 1e+18 вычислений функции потенциала от 100 аргументов. Некошерно. И никакие тут замены float на int не помогут.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 20-12-2008 19:28 » 

dimka, я и говорю, если время не поджимает Улыбаюсь)) Но ведь для полей давно должны быть все такие задачи решены- почему бы не поискать их? На ТОЭ как-то была лекция про расчёт магнитного поля в двигателе, только я оттуда ничего уже не помню...
Записан

Mayor
Специалист

ru
Offline Offline

« Ответ #6 : 20-12-2008 22:34 » 

Алексей1153++, в C float не хватит - там 7-8 знаков.

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

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

не знаю чем не понравился бинарный поиск - он быстро пишется достаточно быстро реализуется

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

1n c0de we trust
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 20-12-2008 22:44 » 

А разве локальные экстремумы бинарным поиском ищутся?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 21-12-2008 09:17 » 

Цитата: Mayor1
не знаю чем не понравился бинарный поиск - он быстро пишется достаточно быстро реализуется
Меня всегда поражали люди, которые ради удобства и понятности метода жертвуют правильностью постановки и решения задачи Улыбаюсь Мне постоянно кажется, что они несколько сумасшедшие Улыбаюсь

Посмотри на предыдущую задачу. То, что получилось в конце концов, никак не "жадный алгоритм", который ты отстаивал в начале только потому, что он известен и "неэвристичен".

Хотя тут ещё большой вопрос, чем эвристика отличается от неэвристики - если только отсутствием чёткого доказательства, что для данной задачи это действительно подходящее с некоторыми оговорками решение, то для тебя любой известный алгоритм будет эвристическим. Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 21-12-2008 09:21 » 

Цитата: Mayor1
берем середину отрезка между 2мя рядом расположеными центрами, если в ней гравитация минус то берем середину между серединой и правой гранью иначе левой - достаточно быстро считается
Центры масс влияют друг на друга не попарно, а все вместе одновременно. Локальный минимум гравитации 3-х тел будет лежать внутри треугольника, ими образованного, но никак не на сторонах этого треугольника.

И такие задачи исторически было принято решать методами координатного (попроще, но помедленней) или градиентного спуска (посложнее, но побыстрее). А теперь очень хорошие результаты дают генетические алгоритмы, особенно в тех случаях, когда окрестности экстремумов заранее неизвестны (что требуется для первых двух методов).
« Последнее редактирование: 21-12-2008 09:25 от dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Mayor
Специалист

ru
Offline Offline

« Ответ #10 : 25-12-2008 12:07 » new

Центры масс влияют друг на друга не попарно, а все вместе одновременно. Локальный минимум гравитации 3-х тел будет лежать внутри треугольника, ими образованного, но никак не на сторонах этого треугольника.

погоди, если брать гравитационное воздействие пропрорциональное массе на квадрат растояния и все объекты расположны на 1й прямой то центры отстуствия воздействия гравитации будут тоже на этой прямой, и более в условии шла речь об одномерном пространсве - так что точки вне этой прямой ваще отсутсвуют
Записан

1n c0de we trust
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines