Pull to refresh

Comments 17

Извините, но ваш код оформлен несколько странно. Что за говорящие названия ll1, lh1, ll2, lh2? Что такое sp, co? Для модели гаусгана очень хотелось бы увидеть формулы, реализованные в модели — это кратно бы повысило читаемость и понимаемость кода.
И, мне кажется, Modelica сложно назвать языком программирования, это язык моделирования.
IMHO, грань между программированием и моделированием очень тонкая, если вообще существует. Та же модель может управлять реальным устройством. Или не реальным, а торговать на бирже, например.

С именованием у меня проблемы. Как придумаю нормальные имена обещаю исправить :-).
l[lh][12] — это длины реек.
co — коэфициент зависимости тока через катушку и ускорением снаряда. sp — скорость.

Гауссган в этой модели ускоряет постоянный магнит. При расстоянии до соленоида большем 0.2 сила притяжения обратно пропорциональна четверной степени (как между двумя диполями). Если растояние становится меньше, сила пропорциональна расстоянию (длине не втянутой части магнита). Катушка подключена к источнику постоянной ЭДС с некоторым внутренним сопротивлением.
На этой модели был замечен интересный эффект — снаряд отскакивал от катушки, создавая там большую ЭДС, чем у внешнего питания.
Не надо бы, наверное, длиной отрезка называть квадрат его длины…
Ну монотонная функция от фиксированного параметра…
Эту модель я быстро наборосал, что бы оценить сложность управления таким манипулятором.
Так как на бесконечных последовательностях естественным образом определяется топология, Haskell может решить это уравнение методом проcтых итераций (через оператор неподвижной точки).
Простите, что? Какая топология? Что за оператор неподвижной точки? Что значит «решить уравнение», если решением является бесконечная последовательность целых чисел?
Топология, на пальцах, это возможность определить, что последовательность объектов сходится к некому новому объекту.
Пределом последовательности последовательностей будет такая последовательность, которая в каждой позиции отличается только от конечного числа исходных.
Неподвижной точкой называют решение уравнения x = f(x) по x. Если на множестве допустимых x определена топология, то может повезти и вычисляя f(f(.....f(f(x0))....)) мы будем приближаться в решению уравнения.
В данном случае для вычисления первых N элементов последовательности f(x) нам достаточно N-1 элемента последовательности x. Тогда выбрав правильную первоначальную (с конечной длиной) последовательность и применяя к ней функцию в цикле, мы будем получать все новые и новые элементы исходной последовательности.

Хотя обычному программисту это знать не обязательно, только для математического доказательства правильности программ.
Спасибо, но я не хочу «на пальцах». Я хочу строго и формально, ибо Ваше «естественным образом» для меня не очевидно.

то может повезти и вычисляя f(f(.....f(f(x0))....)) мы будем приближаться в решению уравнения.
Что значит «приближаться» (Опять же, формально, пожалуйста)? Теорема Банаха о неподвижной точке требует не просто топологического пространства, а полного метрического, да ещё и оператор должен быть сжимающим. Вот в этом случае повезёт, да.

Так зачем Haskell'у решать это «уравнение», если он ленивый? И что Вы считаете решением? Интуитивно решением считается вся последовательность чисел Фибоначчи, которая немного великовата для хранения. У Haskell'а есть определение, по которому можно генерировать новые элементы списка по мере необходимости. Зачем что-то решать?
Выписать метрику, в котором это отображение будет сжимающим не сложно, но и в рамках данной статьи не интересно.
Решать надо, потому что определение записано в виде уравнения, а не в виде алгоритма генерации новых элементов. В общем виде такие уравнения решаются с помощью оператора неподвижной точки y f = f (y f).
Чем описание списка fib не алгоритм? По-моему, ясно видно, что первыми двумя элементами являются единицы, а для получения следующих следует вызвать zipWith с соответствующими параметрами.

Если даже «решать уравнение», то что будет решением такого уравнения?

И что там с топологией?
А ни чего, что аргументы zipWith зависят от fib?
Ну и пусть себе зависят, хаскель ленив же. Вот тут подробнее расписано.

И да, Вы упорно уходите от задания топологии (которая якобы вполне етественна) и определения решения уравнения. С чего бы, интересно?
Prolog неплохой язык, жалко, что про него многие забывают или не знают.
Да, классика. Знать его надо хотя бы для общего развития.
Только на нем с отрицательными утверждениями сложно работать. Сейчас надежда на «программирование в ограничениях».
А что значит «надежда на»?

Там разве какой-то ступор возникал, или наоборот прорыв?
Значит что многие задачи, для которых хотелось применять Prolog, но в силу особенностей этого языка не получалось, должны хорошо решаться с помощью программирования в ограничениях. Но пока получается не сильно лучше.
Интересно, а можно было бы сделать курс физики в таких моделях? Вот мне в школе физика не давалась хорошо, хоть я и учился в математическом классе и т.п. Но вот переложить задачки по физике в написание таких моделей, потом смотреть результат наверное было бы очень интересно, может быть и помогло бы в понимании. Может ли автора сделать ну хоть один какой-нибудь не совсем тривиальный пример из школьной программы?
Гауссган как такой пример не подойдет?
Преподавать у меня плохо получалось — объяснить алгебраические типы Haskell школьникам я не смог. Теперь боюсь, что школьникам будет слишком сложно.
Но попробовать было бы интересно.
Sign up to leave a comment.

Articles