Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/187: Рейтинг темы: голосов - 187, средняя оценка - 4.77
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.03.2015, 13:59
Студворк — интернет-сервис помощи студентам
KolodeznyDiver, вот это соглашусь, многомерная А вот деформируемый симплекс - плохой пример
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.03.2015, 13:59
Ответы с готовыми решениями:

ООП или функции
Привет форумчанам! Такой вопрос нарисовался, Везде ли стоит применять ООП ? Например сейчас пишу маленький блог с простеньким...

ООП или Структурный подход?
Доброго времени суток! Могу ли я использовать процедурный подход программирования в PHP для разработки портала бронирование отелей с...

литература и/или статьи по ООП
Предложите литературу или скорее статьи по ООП, но с уклоном в элементарное понимание что это и для чего нужно а не обьяснение 3-х китов...

926
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
30.03.2015, 14:04
Psilon, вы правы, одну ошибку у себя нашел - вектор лямбд у меня получается в обратном порядке и я скармливаю его Граму-Шмидту и это еще как-то работает. Но лечится это просто - надо реверснуть его по выходу из функции. Почему не обнаружил сразу - потому что сами лямбды у меня неправильно считались, вечером после работы напишу правильный расчет и протестирую с разными функциями и эпсилонами. Только этот правильный расчет я буду или пытаться как-то выдирать из вашего шарпового кота, или самому придумывать на коленке, или искать и читать те волшебные 4-5 страницы. Хотя, если имеется в виду страницы этой темы, то это будет проще, чем страницы книжки, сканы которой вы выложили.
0
Модератор
 Аватар для Curry
5171 / 3536 / 536
Регистрация: 01.06.2013
Сообщений: 7,695
Записей в блоге: 9
30.03.2015, 14:11
Э, нет. Вернёмся к точке бифуркации
Цитата Сообщение от Psilon Посмотреть сообщение
Насчет одномерной оптимизации - она используется во всех методах
Я говорю, что одномерная оптимизация не всегда используется внутри многомерной. И симплекс-метод тому пример.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.03.2015, 14:30
KolodeznyDiver, а я говорю, что согласен, что одномерная оптимизация не всегда используется внутри многомерной. Но вот симплекс-метод тому не пример

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

Добавлено через 1 минуту
Нашел
https://www.cyberforum.ru/atta... 1370958904
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
30.03.2015, 15:07
Спасибо, мне и самому интересно стало доделать алгоритм до конца. У меня то базара нет, да и не каждый день я реализую подобные алгоритмы.
0
Заблокирован
30.03.2015, 19:07
Цитата Сообщение от Psilon Посмотреть сообщение
_Ivana, метод нелинейной многомерной безусловной оптимизации Розенброка. Я не утверждаю, что ФП виновато, что я не смог запрограммировать, скорее наоборот.
Psilon, Речь об этом?
Реализовать процесс Грамма-Шмидта
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.03.2015, 19:46
Ev_Hyper, угу, дела давно минувших дней
0
Заблокирован
30.03.2015, 20:31
Psilon, значит вопрос вернул свою актуальность?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.03.2015, 21:15
Ev_Hyper, да нет, я для себя в тот раз еще всё выяснил Это только кажется, что на хаскелле меньше писать. На самом деле это обычная минификация. Можно сравнить, самая насыщенная информацией строчка в шарпе это:
C#
1
lambda[j] = Dichotomy(x => LambdaSolve(x, i), y[j]);
в хаскельном коде выше:
Haskell
1
| otherwise = zipWith (-) a $ vsum . zipWith cmul (map (vdot a) d') $ d'
я не спорю, что это тоже можно читать без особых проблем, но с тем же успехом можно по 2-3 statement'а писать и в шарпе, и получить то же число строк
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
30.03.2015, 21:47
Psilon, напишите название книги и ее автора.
0
Модератор
 Аватар для Curry
5171 / 3536 / 536
Регистрация: 01.06.2013
Сообщений: 7,695
Записей в блоге: 9
30.03.2015, 21:53
Цитата Сообщение от Psilon Посмотреть сообщение
да нет, я для себя в тот раз еще всё выяснил
Всё то они выяснили! А может самая насыщенная строчка на вашем шарпе
C#
1
public IEnumerable<IterationDetails> Details { get { return new List<IterationDetails>(details); } }
а у _Ivana
Haskell
1
cmul c       = map (c*)
?
_Ivana! Давай, жги напалмом! Покажи им розенброка не на списках!
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
30.03.2015, 22:52
KolodeznyDiver, сначала на списках доделаю - как раз сейчас пытаюсь найти алгоритм одномерной минимизации, потом если будет интересно - переделаю на абстрактные типы-интерфейсы и можно будет уже подключать вектора и прочее

Добавлено через 53 минуты
Вот уже имхо рабочий кот, промежуточные значения совпадают с примером из статьи. Задачу считаю выполненной, дальше только реализация через вектора и прочие АТД.
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
module Rosenbrock where
import Data.List
 
rosenbrock :: ([Double] -> Double) -> Double -> [Double] -> [Double]
rosenbrock f e x = xiter (map (+(2*e)) x) x d where
    d = take (length x) . iterate ((0:).init) $ 1:replicate (length x - 1) 0
    xiter x_ x d | (<e) . vnorm $ zipWith (-) x_ x = x
                 | otherwise = xiter x x' $ gramSchmidt e d l where
        (x',l) = yiter d x [] where
            yiter []      y l = (y, reverse l)
            yiter (di:ds) y l = yiter ds (pl li) (li:l) where
                pl x = zipWith (+) y $ cmul x di
                li   = dichotomy (f.pl) e (-100000) 100000
 
dichotomy f e a b = go a b where
    delta  = e / 10
    go a b | abs (b - a) < e = (a + b)/2
           | otherwise       = go a' b' where
               middle  = (a + b) / 2
               lambda  = middle - delta
               mu      = middle + delta
               (a',b') = if f lambda < f mu then (a,mu) else (lambda,b)
 
gramSchmidt e d l = go a [] where
    go []     d' = d'
    go (a:as) d' = go as $ d' ++ [normalize di] where
        di | null d'   = a
           | otherwise = zipWith (-) a $ vsum . zipWith cmul (map (vdot a) d') $ d'
 
    a = zipWith3 (\li di ai -> if abs li < e then di else ai) l d a'
    a' = map (vsum . map (uncurry cmul)) . tails . zip l $ d
 
---- стандартные векторные операции
vnorm        = sqrt . sum . map (^2)
normalize v  = map (/vnorm v) v
vsum         = foldr1 (zipWith (+))
vdot v1 v2   = sum $ zipWith (*) v1 v2
cmul c       = map (c*)
 
main = do
    print $ rosenbrock (\[x,y] -> (x-2)^4 + (x-2*y)^2) (1.5e-2) [0,3]
    print $ rosenbrock (\[x,y,z] -> (x-2)^4 + (x-2*y)^2 + (z-x^3-y-77)^2) (1.0e-4) [0,3,0]
Функцию дихотомического поиска взял из книжки и шарпового кота - спасибо за ссылку, перенес один в один. Пара комментариев:
1) Мне не нравится волшебное определение интервала поиска одномерного минимума как [-100000,100000], но в шарповом коте насколько я понял то же самое, только берется диапазон [-5,5]. Откуда его брать - отдельная тема, собственно к мерянию котами не относящаяся, но для совсем красивой реализации алгоритма этот момент конечно надо решить.
2) По поводу
Цитата Сообщение от Psilon Посмотреть сообщение
Ну и у вас где-то ошибка, не может с эпсилон 0.001 получиться 2.0878 вместо 2
- ну, во-первых, в том алгоритме было полторы ошибки, а во-вторых, критерий остановки у нас по сравнению следующего с предыдущим, и при этом решение может быть сколь угодно далеко от точного аналитического - это не показатель ошибки Если не верите - посчитайте сумму гармонического ряда с заданной точностью по критерию прекращения суммирования когда очередной член ряда (или даже разница очередного и предыдущего членов) будет меньше этого эпсилона.
0
Модератор
 Аватар для Curry
5171 / 3536 / 536
Регистрация: 01.06.2013
Сообщений: 7,695
Записей в блоге: 9
30.03.2015, 23:24
Цитата Сообщение от _Ivana Посмотреть сообщение
если будет интересно
Будет!
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
30.03.2015, 23:33
KolodeznyDiver, отрадно видеть ваш энтузиазм, только хочу уточнить, что если это делать, то из любви к искусству и ради тренировки или демонстрации. Списки у меня в коде для всего на свете - начиная от накопления значений и разбора вариантов и заканчивая представлением векторных величин. Логику программы переделывать со списков на что-то другое... ну не знаю, будет ли читаемы потом аналоги мапов-зипов-тэйлсов. А само представление векторной величины через вектор - для функций десятка переменных и список из десяти элементов не будет имхо сильно тормозить, а для функций тысяч переменных - не знаю, исследовать надо. Может вообще установить и применить какой-нибудь готовый математический пакет векторной алгебры, с всем изюмом из коробки в одну строчку. Ну так там и весь Грам-Шмидт может быть реализован как функция, да и Розенброк собственно тоже
0
Модератор
 Аватар для Curry
5171 / 3536 / 536
Регистрация: 01.06.2013
Сообщений: 7,695
Записей в блоге: 9
30.03.2015, 23:50
Цитата Сообщение от _Ivana Посмотреть сообщение
Списки у меня в коде для всего на свете
Вот это и плохо, они очень часто не оптимальны, как по скорости, так и по функционалу.

Не по теме:

Это потому что Вы лисп взялись изучать, а он влияет на мозг!

Цитата Сообщение от _Ivana Посмотреть сообщение
применить какой-нибудь готовый математический пакет векторной алгебры, с всем изюмом из коробки в одну строчку. Ну так там и весь Грам-Шмидт может быть реализован как функция, да и Розенброк собственно тоже
Да. Тут нужно оптимум соблюсти. Можно даже и пакет векторной алгебры заюзать. Использовал же Psilon явно векторноалгебрную ф-ию TransposeAndMultiply. Но, можно и без них обойтись. И вообще, тут широкое поле для выбора. Одних пакетов реализующих матрицы в haskell несколько. А можно только на векторах, или массивах. Можно на мутабельных, а можно и без мутабельных обойтись. (А то тут кто то жалуется что ему мутабельности не хватает).
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
31.03.2015, 00:32
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Это потому что Вы лисп взялись изучать, а он влияет на мозг!
На Ваш точно не повлияет, потому что непрошибаем. А sicp это не lisp.
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
они очень часто не оптимальны
Они всегда не оптимальны. cons - выделение маленькой памяти, каждый cons - ненужная задержка. Выгодней использовать деструктивные возможности. Либо чистота, либо перфоманс.
0
31.03.2015, 00:58

Не по теме:

Лисповые списки и хаскельные списки - две большие разницы. Сила лисповых списков в нетипизированности.

0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
31.03.2015, 01:18

Не по теме:

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



Согласен насчет силы лисповых нетипизированных списков в отличие от хаскельных. Мне честно говоря вообще строгая статическая типизация весьма непривычна и как следствие неудобна, но на это есть такой волшебный язык Ela - типа динамического хаскеля. А вообще в моем коде имхо только один или максимум 2 места, где можно попытаться оптимизировать списковые операции. Во всем остальном - исключительно перебор с головы до хвоста, никаких доступов в середину, никаких пересечений-объединений-удалений-поисков вхождений и т.п., никаких операций с индексами (!) - в таком коде, который на шарпе весь из индексов и они даже в алгоритме декларируются монументально - а по сути не нужны Вот вам и отличие ФП от ИП в данном примере.

UPD даже tails вроде делается через паттерн матчинг и добавление в голову

ЗЫ а еще (как мне недавно пытались объяснить умные люди в одном чате) списки хорошо фьюзятся (страшное слово, которое позволяет компилятору вместо построения в памяти настоящего списка не делать этого а реализовывать операцию через обычный цикл/гоуту), а те же массивы - не фьюзятся совсем и потребуют столько памяти сколько весят.
0
Модератор
 Аватар для Curry
5171 / 3536 / 536
Регистрация: 01.06.2013
Сообщений: 7,695
Записей в блоге: 9
31.03.2015, 03:10

Не по теме:


Цитата Сообщение от _Ivana Посмотреть сообщение
давайте не будем опускаться до уровня одного из участников этой темы
Ладно, погорячился я. :senor: В конце концов, языки, практически не интересные для найма, являются игрушками. По этому и относится к ним стОит соответственно - кто в WoW играет, кто в лисп, кто в WoT, Haskell или Far Cry.
В отличии, от (кому то это может не нравится), скажем шарпа, js или пыхыпа.


Цитата Сообщение от _Ivana Посмотреть сообщение
в моем коде имхо только один или максимум 2 места, где можно попытаться оптимизировать списковые операции
Списки Haskell могут быть эффективны только в операциях с началом списка (добавление-удаление), в том числе, в образцах. Даже проход по списку дольше чем по unboxed массиву. Насчёт "фьюзятся" - не в курсе. Оптимизация какая то, поди. Когда полный список единомоментно не нужно накопить, а можно поэлементо проходить и забывать. Типа того?
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
31.03.2015, 03:22

Не по теме:

KolodeznyDiver, я вовсе не вас имел в виду под "одним из участников", а сейчас вижу что эту мою фразу можно толковать по-разному. Контекстно-зависимое толкование получается :)



Про списки - вы же просмотрели моего кота. Там только в одном месте многоразовый ++, поленился подумать как его обойти. А в остальном все вроде быстро должно быть.
Про фьюзы - да, насколько я понял, это оптимизация компилятора, когда для sum . map (^2) $ [1..1000] не создается список в памяти а реализуется цикл. Ну и в более сложных случаях когда это возможно и мозгов оптимизатору хватает тоже.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.03.2015, 03:22

Гавнокоддинг или учить ООП?
Здравствуйте, дело такое, я пишу все свои скрипты в гавнокоддинге. Дело в том, что у меня все работает, что не работает спрашиваю на...

прога или игра ооп
Здравствуйте)Помогите пожалуйста)Нужно в ближайшее время сдать курсовую работу.Требуется сдать программу какую-нибудь либо игру(желательно...

Mysqli ООП или процедурный подход
Вот интересно, услышать мнение специалистов, что лучшие использовать при работе с mysqli ООП или процедурный подход, что больше используют...

Определить, программа с ооп или нет
Здравствуйте)Помогите пожалуйста разобраться с программой)Мне нужно сдать курсовую по объектно-ориентированному языку на С#.Мне здесь...

Изучаю ООП можно или нет так?
Это index: &lt;?php include('classes/database.class.php'); $object = new DB; $nick = &quot;Alex&quot;; $password = &quot;1&quot;; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
320
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru