-есть специализации, есть специальности. Для первых есть спецкурсы, для вторых — представления министерства, о том, что должен знать физик.
-я бы вообще не учил физиков, что существует консольный способ взаимодействия с системой и с программой. Это достаточно сильно отталкивает от программирования, я это понял очень хорошо, когда навозился с ssh
-первая строчка в первой программе на с++ должна содержать импорт (потому что он без этого не может в космос в вывод текста «привет мир»). Вам придётся сразу объяснять человеку принципы компоновки, системные пути и кратко про анализатор в компиляторе, если только не хотите, чтобы такие строчки писались бездумно вначале каждой программы.
Точно так же как и в вашем посте с задачей дифференцииорования Вы взяли свой нехарактерный опыт и обобщили на «всех Естественнонаучников».
Во-первых.
Про задачу. Я не обобщал её. Я ообщил весь свой пыт моделирования и работы в разных языках и средах. Затем я выбрал наиболее наглядный случай для иллюстрации разницы. И потом даже подчеркнул в тексте, что этот случай — типичный. Типично, что разработка на пайтон идёт быстрее. Типично, что она не требует особых знаний специфики языка, как к примеру, о работе с памяью, и что он содержит более высокоуровневые абстракции, в сравнении с си. Типично, что многих пролем можно избежать, за счёт работы интерпретатора. Типисчно, что время актиного занятия человека разработкой стоит дороже, чем время работы машины (скажем, ночью, пока вышеупомянутый человек спит) — и это делает скорость выполнения менее важным пунктом, чем первые три, что я назвал.
Во-вторых, касательно курсов. Здесь ситуация иная, у меня нет опыта обучения в тысячах вузов, потому обобщение вообще не имеет место. Но есть знание ожиданий преподавателей и вообще всей системы образования, считая министерство, от представителей этой специальности. Я формирую общее решение из текста требований. Затем добавляю частное решение из собственного частного опыта обучения. Частно+общее = полное решение. Если где-то в каком-то вузе решили копнуть немного в сторону от него, например в системное программирование, игру на пианино, или ботанику, то это следует рассматривать как исключение скорее, чем оригинально взятое частное решение.
Вместо списка из трёх вузов где я точно знаю, преподают на делфи, я предлагаю просто подождать, пока кто-нибудь увидит это сообщение и отпишется «у меня тоже было делфи», если я прав — то такой ответ не заставит нас ждать слишком уж долго.
т — нормировка для времени релаксации. Гипотетическое время, за которое релаксировала бы система, не изменяющая теплоту по этой модели. Немного отличается от нуля только потому, что 0 теплоты — это очень далеко от области применения модели. Но само время релаксации увеличивается экспоненциально с ростом потерь теплоты, поэтому коэффициент быстро достигает порядков вменяемого размера. Совпадение с порядком Авогадро случайно, т.к. коффициент имеет физический смысл интервала времени, и в реальном процессе полное время релаксации на очень много порядков больше (множитель для получения реального времени релаксации меняется в зависимости от начальных условий и материала от 10^21 до 10^35)
Я указал что идёт охлаждение, а затем нагрев. Значит температура прямо зависит от времени.
b и прочее — это задел на будущее, когда их понадобится поменять для других процессов/материалов.
Чисто ради спортивного интереса выкладываю одну из подзадач в простейшем виде
исходные значения:
x = 0.53
q=31900
da=2
t=900
tf=900
a=100000
b=0.5
tau=1.03E-23
уравнение для нужной величины:
dtf/dt = tf*(1-tf/t)*b*(((a)*tau)**(-b))*(exp(-b*(x)*q/t))*(exp((x-1)*b*q/tf))*(t**(b-1))
где а проседает на da c каждым шагом по времени, при прямом процессе охлаждения, и растёт на обратном пути при нагреве. Температура t должна опуститься до нуля, затем подняться назад. Нужно вывести значения tf, tf-t, производной и разницу tf на двух ветках гистерезиса на графиках, найти экстремумы, в процессе расчёта выкидывать сообщения о смене направления процесса, и о прохождении точек экстремума и перегиба, с возможностью менять шаг после их прохождения.
Если сделать сейчас эту задачу на разных языках, то специалист (каждый в своём) сможет замерить время разработки, время выполнения и размер кода. (для чистоты эксперимента в двух видах — с использованием известных библиотек и сторонних модулей, и без них — поскольку в комментариях было мнение ещё про большую завязанность C на библиотеках (с чем я соглашаюсь, т.к. собственных возможностей языку оставили значительно меньше, чем многим другим))
Нет, это для всех физиков потока вообще, разных специальностей, в т.ч. теоретическая физика, молекулярная физика, физика металлов и т.д.
То ли лыжи не едут… То ли я чего-то не понимаю. Вот курс программирования на том же самом сайте, его содержимое: theory.phys.univ.kiev.ua/uk/courses/programuvannia-ta-matematychne-modeliuvannia
Здесь лекции про математику методов, не про особенности конкретных языков.
Это во-первых. А во-вторых, таких специальностей не припоминаю.
Pascal имеет историческую ценность и потому целесообразен для сравнения и понимания возможных различий в архитектурах языков для студентов классического университета, для расширения кругозора. Delphi же для этих целей не нужен.
В прогах типа делфи и лазаря есть элементы интерфейса. Ты скачал пакет для разработки, и всё — есть кнопки, поля ввода и т.п. Можно и интерфейсы делать, и с ООП на примере таких объектов разбираться удобно.
В с, например, пока дело до визуализаций дойдёт, ещё возятся очень долго, как правило. Потому что сразу требуется понимание библиотек, линковки, и всего такого прочего. А в обучении быстрый видимый результат — это то что надо.
Но Delphi нет вообще нигде
Ну это 100% неверно, т.к. я обучался именно Делфи. Как и двое из моих бывших научных руководителей. И вообще говоря, неважно, что за язык. Надо понимать что то что называется курсом по программированию для научных специальностей — это на самом деле курс по математике численных расчётов и обзор методов моделирования. Который для удобства делается на каком-то из языков программирования. Штуки об устройстве языка/компьютера/ОС не изучаются. Ручная работа с памятью, ммю и прошивка плат не изучаются. Написать язык программирования, компилятор или ОС не требуют. Клиент серверных приложений и баз данных тоже. Парадигмы программирования не изучаются, равно как и патерны и методы, и форматирование кода. Не изучается работа на разных ОС и работа в разных языках, не изучаются их особенности. Не изучаются оптимизации и теория алгоритмов. Линковщик и разные компиляторы — это вообще фантастика для студента-не-программиста. Это всё изучают в курсах программирования для IT специальностей. Для физиков в курс программирования входит — сначала показать как создать проект, поле вывода и синтаксис объявления функции, события, переменной. Далее сразу сходимость, шаги, слау, интегрирование, интерполяция, аппроксимация, диффуры, распространение тепла/частиц, хаотические системы (последние пункты уже относятся к курсам моделирования и матфизики, но по сути являются плавным продолжением программирования). Нет таких курсов, на которых изучали бы всё то, что кажется самоочевидным любому третьекурснику-программисту. Просто учат использовать свободу написания алгоритма самому. И программирование, для большинства научных задач эту область и не покидает.
Программу не нахожу, но поднял профиль своей специальности, там говорится следующее:
Выдержка из документа
програмні результати навчання:
…
Мати навички роботи із сучасною обчислюівальною технікою, вміти використовувати стандартні пакети прикладних програм і розробляти програмне забезпечення на рівні, достатньому для реалізації чисельних методів розв'язування фізичних задач, комп'ютерного моделювання найпростіших фізичних явищ і процесів, виконання обчислювальних експериментів
Это всё, что там хоть как-то связано с программированием.
Как видно, там даже и работа с делфи не указана — прикладные пакеты.
факультет физики, общий курс для всего потока 1го курса — C:
Ну там и 152 специальность есть. Может это для них? Приборостроение, как бы. Там С пригодится точно.
А вот курс для физиков, с того же сайта, на котором вы смотрели: theory.phys.univ.kiev.ua/uk/system/files/users/shared/usenko-progr.pdf
Начинается с паскаля. (в теоретической программе про методы интерполяции, решения иффуров и т.п. — а ссылку я дал на прикреплённый к курсу учебник)
Так вы же смотрите компьютерные науки) Откройте программу «программирования» для физиков или химиков. И желательно не в техническом, а в классическом университете (там относительное количество преподавателей-программистов ниже).
для извлечения которых вам нужно писать какой-то код, а не просто с задумчивым лицом рассматривать график.
На самом деле в большинстве случаев — нет. Дело в том что экспериментальные установки покупаются вместе с софтом, который ими оперирует. И очень много где в статьи попадают картинки, который этот стандартный софт и выдаёт. То есть у экспериментатора под рукой: установка, софт для неё, программа для визуализации данных (в которой часто кроме графика, можно сразу же глянуть график производной, или вписать формулу для обработки, как в экселе).Опять таки, это может быть selection bias, но по моему опыту общения — 3 из 32 экспериментальщиков программируют (за пределами обычных пакетов вроде маткада и базовых фич матлаба/мэпла). И двое как раз из тех, кто делает новые экспериментальные установки.
К несчастью, я на практике заметила, что некоторые люди, пишущие непонятный код, склонны считать себя «великими умами» именно из-за непонятности своего кода и всюду этим хвастаться.
Да это тоже самое, что гордиться плохим почерком =)
А человек тот из слегка другой категории. Просто изобретатель и открыватель. Он почти не анализирует, просто делает то, что раньше никому не удавалось.
Не путайте с приёмочными тестами, это другое.
ОК, просто юнит тесты должны покрывать какие-то осмысленно выделенные куски, например функции. А когда есть две-три функции, и простыня вычислений в каждой, то сложно покрыть такой код тестами.
Не хотел обидеть, просто имел ввиду что программирование может занимать и небольшую нишу, даже в исследовании с численным моделированием.
Я уже приводил такой пример где-то в комментариях:
dT_f/dT = f(T_f, T, h(T_f))*g(d(T_f/T)/dT), T_0=9000, T_f_0=9000
нужен Рунге-Кутты, с шагом по Т (величина шага скажется на точности)
(dh(t_f)/dt)|_(t=inf) = a*T_f + I(T, h), h_0 = 16
нужен метод стрельбы, перебор в цикле метода Рунге-Кутты, с отслеживанием изменения асимптотики на больших t, шаг внутренний — по h внешний, по производной от h. Тоже дадут другую погрешность. Просто потому что оличаются доступные начальные данные для двух уравнений.
Использование двух разных методов для внешнего уравнения и внутренней системы, например. maple, mathematica — почти нереально это сделать. matlab теоретически такое умеет, но писать это там будет лишь немногим легче, чем в экселе. Для такого расчёта, (да и вообще для расчёта достаточно сложного диффура) лучше самому набросать код.
Эти пакеты многое решают, но всегда найдётся область, слегка выпирающая за пределы их функционала.
Иногда специализированный пакет расчитывает поле, а поведение частицы в полученном поле — уже дописывается от руки, иногда другие гибриды возникают.
Эта аналогия с молотком так разрослась, что я просто обязан ответить :)
дело в том что у молотка, шуруповёрта, и отбойного молотка почему-то наличествуют деревянные ручки, на которых надпись «ручка молотка». Только у молотка это действительно ручка, за которую надо браться, вид и название предмета соответствует его интуитивно понятному назначению. Но у шуруповёрта она торчит на месте кнопки включения, а у отбойного молотка это просто декоративный элемент. И даже если всё это написано в спецификациях к этим трём чудным моделям, это всё равно запутывает людей.
Вот, кстати, про cython я бы хотел знать в то время. Но, правильно ли я понимаю, что для правильной оптимизации cython надо иметь опыт программирование на си-подобных языках?
Ну, и, в конце концов, не врите. Вы не освоили питон за вечер.
Зуб даю. Синтаксис прочитал, и в течение двух суток написал те 4 программы. Сложность проектов за этот день подросла, но сложность гугления нужной библиотеки только упала. Так что инструмент бомбезный.
Учебники по плюсам в основном старые, но это полбеды. Основная — что часто, когда открываешь чужой код (не важно, двух, или 10-тилетней давности), то видишь всё те же звёздочти и си-стайл. Я ещё ни разу в работе не столкнулся с новыми фичами, всё делают пойнтерами и ещё очень любят небезопасные оптимизации.
Python, Matlab, Mathematica/Maple и ещё пролог и маткад могут показывать физикам, вместе с пакетами типа ansys и comsol. Но только в курсах от физиков-физикам. А если говорить про курсы от программистов-физикам (главные курсы по программированию, с наибольшим числом часов, и на которые опираются все последующие) — обычно начинаются с делфи. Я знаю один вуз, где джава (и он мне не нравится — там студенты всё равно даже на парах не появляются, все программистами работают, вместо того чтобы учиться основному предмету).
Для этого не требуется закрывать код, более того, это даже может мешать. Есть много примеров платного open-source научного софта.
Я так сказал не потому что считаю правильным такой подход. я просто знаю человека который пилил программу пока учился в аспирантуре, а потом начал её продавать. Для учёных скидок нет, исходного кода нет ни для кого. И пока другие не сделают так же (а программа действительно крута), вряд ли кто-то сможет доступиться к такому функционалу напрямую.
При этом цитировали его статью почти везде в области. Просто чтобы упомянуть «он смог добиться результатов такой точности».
Я в последние 5 лет прям на глазах научные группы открывают свои публичные репозитории.
А сколько специалистов по моделированию? Вполне вероятно, что те же 1-2 на команду, где остальные не знают как это делать и полагаются во всём на коллег?
С точки зрения алгоритма — я могу решать их двумя разными методами, с разным типом начальных условий, и с разной собственной точностью, если это будет оправдано.
Кстати, а как этот пункт корреспондируется с тем, что вы же голосуете за Питон, в котором всё, что сложнее завершения приложения импортируется из готовых модулей?
Мне кажется что люди, занимающиеся переписыванием библиотек си под пайтон — очень грамотные и разумные. В некоторых случаях они реализуют лучшую работу чем оригинал.
У воздуха, всё-таки, и формулы позаковыристее, и число веществ под 500 уходит, и проходов до 10 штук для каждой из 16 сторон света.
3 вещества, часть уже превращённая в кристал не просчитывается в рамках оптимизации, из-за диффузионного контроля. Проход один на итерацию, 8 связей по 3 координатам 3d сетки. Значит мой миллиард в среднем где-то в 40 раз меньше того, что упомянули вы. 40 раз тот мой код считался бы около 10 часов. На практике миллиард я запустил пару раз, чтобы показать справедливость эргодической гипотезы в рамках такой модели процесса, а дальше использовал 100млн ячеек, они за минуту просчитывались по сути, и можно было много модификаций попробовать. Для чего-то нужно большие куски, для чего-то хватает поменьше, такая жизнь.
А со звуком и правда простенько всё было.
А вообще, мораль статьи проста: если вы не являетесь специалистом в какой-либо сфере, и вам нужно срочно использовать нетривиальный инструмент из неё, не беритесь сами.
Проблема в том что где-то в жизни есть момент, когда человек вдруг захотел таким специалистом стать. Например, когда ему впервые понадобилось программировать для научной задачи. И тогда он смотрит на свой питон, потом на си, и снова на питон…
Да, я использовал библиотеку человека, который такое не предусмотрел. Но он великолепно реализовал другие нужные мне вещи, потому я просто дописал кейс с другим числом каналов. Просто когда я запускал, то не ожидал таких вещей, и несколько раз программа таки завершилась с ошибкой, пока я разобрался в чём дело.
И кстати в отладчике можно ставить условные брейкпойнты.
И каким будет условие? if (somewhere in the nearest future there will occur an error)
*Это не сарказм, если что, я правда не понимаю как компилятор может предвидеть рантайм ошибку и заранее начать показывать мне несколько предыдущих действий пошагово с выводом значений. Мб есть какие-то аналогичные интерпретатору оболочки, которые так и делают?
А сколько там поставить? Вот у меня был случай со стрельбой — одно значение попадает очень точно на целове, там 9.00002, что-то такое. У меня функция принимает необходимое количество знаков после запятой, и идёт по бинарному дереву вариантов производной в нуле, и такой глубины, как заданная точность. Почти сразу где-то врезается в цифру 9 и попадает в эпсилон окрестность ассимптотики. Ответ есть за 3 итерации. А чуть-чуть изменил входные данные, и уже путь до эпсилон окрестности удлинился в 10000 раз.
Если точность задана, то есть оценка в количество веток на бинарном дереве. Но если ни одно из решений не падает на асимптотику, алгоритм может подгрузить следующий знак, и там ему может больше повезти. Если бы можно было определять направление изменений в какой-то далёкой итерации, и применить аналог метода градиентного спуска, то можно было бы быстро расчитывать и контролировать наличие условия выхода. Но со сложными периодическими функциями так не выходит — от них выстреливают гармоники, которые могут сделать внезапный горб на функции, когда она уже почти прижалась к своей асимптоте. И это никак не проконтролировать, ведь теперь значение в далёкой точке может свидетельствовать о расходимости, а может и не свидетельствовать. Есть масса всяких нюансов, которые не все учитывают, и которых нет в стандартных библиотеках. Защищённый таким способом код в таких случаях может вести себя следующим образом: перебрать столько значений, сколько разрешили, и вывалиться с ответом что решение везде расходится. А незащищённый код находит сходящееся, потому что уменьшает точность, пока горб не уползёт. А время выполнения у него будет разное для разных значений — где-то медленнее, а где-то и быстрее защищённого.
-я бы вообще не учил физиков, что существует консольный способ взаимодействия с системой и с программой. Это достаточно сильно отталкивает от программирования, я это понял очень хорошо, когда навозился с ssh
-первая строчка в первой программе на с++ должна содержать импорт (потому что он без этого не может
в космосв вывод текста «привет мир»). Вам придётся сразу объяснять человеку принципы компоновки, системные пути и кратко про анализатор в компиляторе, если только не хотите, чтобы такие строчки писались бездумно вначале каждой программы.Во-первых.
Про задачу. Я не обобщал её. Я ообщил весь свой пыт моделирования и работы в разных языках и средах. Затем я выбрал наиболее наглядный случай для иллюстрации разницы. И потом даже подчеркнул в тексте, что этот случай — типичный. Типично, что разработка на пайтон идёт быстрее. Типично, что она не требует особых знаний специфики языка, как к примеру, о работе с памяью, и что он содержит более высокоуровневые абстракции, в сравнении с си. Типично, что многих пролем можно избежать, за счёт работы интерпретатора. Типисчно, что время актиного занятия человека разработкой стоит дороже, чем время работы машины (скажем, ночью, пока вышеупомянутый человек спит) — и это делает скорость выполнения менее важным пунктом, чем первые три, что я назвал.
Во-вторых, касательно курсов. Здесь ситуация иная, у меня нет опыта обучения в тысячах вузов, потому обобщение вообще не имеет место. Но есть знание ожиданий преподавателей и вообще всей системы образования, считая министерство, от представителей этой специальности. Я формирую общее решение из текста требований. Затем добавляю частное решение из собственного частного опыта обучения. Частно+общее = полное решение. Если где-то в каком-то вузе решили копнуть немного в сторону от него, например в системное программирование, игру на пианино, или ботанику, то это следует рассматривать как исключение скорее, чем оригинально взятое частное решение.
Вместо списка из трёх вузов где я точно знаю, преподают на делфи, я предлагаю просто подождать, пока кто-нибудь увидит это сообщение и отпишется «у меня тоже было делфи», если я прав — то такой ответ не заставит нас ждать слишком уж долго.
b и прочее — это задел на будущее, когда их понадобится поменять для других процессов/материалов.
исходные значения:
x = 0.53
q=31900
da=2
t=900
tf=900
a=100000
b=0.5
tau=1.03E-23
уравнение для нужной величины:
dtf/dt = tf*(1-tf/t)*b*(((a)*tau)**(-b))*(exp(-b*(x)*q/t))*(exp((x-1)*b*q/tf))*(t**(b-1))
где а проседает на da c каждым шагом по времени, при прямом процессе охлаждения, и растёт на обратном пути при нагреве. Температура t должна опуститься до нуля, затем подняться назад. Нужно вывести значения tf, tf-t, производной и разницу tf на двух ветках гистерезиса на графиках, найти экстремумы, в процессе расчёта выкидывать сообщения о смене направления процесса, и о прохождении точек экстремума и перегиба, с возможностью менять шаг после их прохождения.
Если сделать сейчас эту задачу на разных языках, то специалист (каждый в своём) сможет замерить время разработки, время выполнения и размер кода. (для чистоты эксперимента в двух видах — с использованием известных библиотек и сторонних модулей, и без них — поскольку в комментариях было мнение ещё про большую завязанность C на библиотеках (с чем я соглашаюсь, т.к. собственных возможностей языку оставили значительно меньше, чем многим другим))
То ли лыжи не едут… То ли я чего-то не понимаю. Вот курс программирования на том же самом сайте, его содержимое:
theory.phys.univ.kiev.ua/uk/courses/programuvannia-ta-matematychne-modeliuvannia
Здесь лекции про математику методов, не про особенности конкретных языков.
Это во-первых. А во-вторых, таких специальностей не припоминаю.
В прогах типа делфи и лазаря есть элементы интерфейса. Ты скачал пакет для разработки, и всё — есть кнопки, поля ввода и т.п. Можно и интерфейсы делать, и с ООП на примере таких объектов разбираться удобно.
В с, например, пока дело до визуализаций дойдёт, ещё возятся очень долго, как правило. Потому что сразу требуется понимание библиотек, линковки, и всего такого прочего. А в обучении быстрый видимый результат — это то что надо.
Ну это 100% неверно, т.к. я обучался именно Делфи. Как и двое из моих бывших научных руководителей. И вообще говоря, неважно, что за язык. Надо понимать что то что называется курсом по программированию для научных специальностей — это на самом деле курс по математике численных расчётов и обзор методов моделирования. Который для удобства делается на каком-то из языков программирования. Штуки об устройстве языка/компьютера/ОС не изучаются. Ручная работа с памятью, ммю и прошивка плат не изучаются. Написать язык программирования, компилятор или ОС не требуют. Клиент серверных приложений и баз данных тоже. Парадигмы программирования не изучаются, равно как и патерны и методы, и форматирование кода. Не изучается работа на разных ОС и работа в разных языках, не изучаются их особенности. Не изучаются оптимизации и теория алгоритмов. Линковщик и разные компиляторы — это вообще фантастика для студента-не-программиста. Это всё изучают в курсах программирования для IT специальностей. Для физиков в курс программирования входит — сначала показать как создать проект, поле вывода и синтаксис объявления функции, события, переменной. Далее сразу сходимость, шаги, слау, интегрирование, интерполяция, аппроксимация, диффуры, распространение тепла/частиц, хаотические системы (последние пункты уже относятся к курсам моделирования и матфизики, но по сути являются плавным продолжением программирования). Нет таких курсов, на которых изучали бы всё то, что кажется самоочевидным любому третьекурснику-программисту. Просто учат использовать свободу написания алгоритма самому. И программирование, для большинства научных задач эту область и не покидает.
Это всё, что там хоть как-то связано с программированием.
Как видно, там даже и работа с делфи не указана — прикладные пакеты.
Ну там и 152 специальность есть. Может это для них? Приборостроение, как бы. Там С пригодится точно.
А вот курс для физиков, с того же сайта, на котором вы смотрели: theory.phys.univ.kiev.ua/uk/system/files/users/shared/usenko-progr.pdf
Начинается с паскаля. (в теоретической программе про методы интерполяции, решения иффуров и т.п. — а ссылку я дал на прикреплённый к курсу учебник)
На самом деле в большинстве случаев — нет. Дело в том что экспериментальные установки покупаются вместе с софтом, который ими оперирует. И очень много где в статьи попадают картинки, который этот стандартный софт и выдаёт. То есть у экспериментатора под рукой: установка, софт для неё, программа для визуализации данных (в которой часто кроме графика, можно сразу же глянуть график производной, или вписать формулу для обработки, как в экселе).Опять таки, это может быть selection bias, но по моему опыту общения — 3 из 32 экспериментальщиков программируют (за пределами обычных пакетов вроде маткада и базовых фич матлаба/мэпла). И двое как раз из тех, кто делает новые экспериментальные установки.
Да это тоже самое, что гордиться плохим почерком =)
А человек тот из слегка другой категории. Просто изобретатель и открыватель. Он почти не анализирует, просто делает то, что раньше никому не удавалось.
ОК, просто юнит тесты должны покрывать какие-то осмысленно выделенные куски, например функции. А когда есть две-три функции, и простыня вычислений в каждой, то сложно покрыть такой код тестами.
Не хотел обидеть, просто имел ввиду что программирование может занимать и небольшую нишу, даже в исследовании с численным моделированием.
dT_f/dT = f(T_f, T, h(T_f))*g(d(T_f/T)/dT), T_0=9000, T_f_0=9000
нужен Рунге-Кутты, с шагом по Т (величина шага скажется на точности)
(dh(t_f)/dt)|_(t=inf) = a*T_f + I(T, h), h_0 = 16
нужен метод стрельбы, перебор в цикле метода Рунге-Кутты, с отслеживанием изменения асимптотики на больших t, шаг внутренний — по h внешний, по производной от h. Тоже дадут другую погрешность. Просто потому что оличаются доступные начальные данные для двух уравнений.
Эти пакеты многое решают, но всегда найдётся область, слегка выпирающая за пределы их функционала.
Иногда специализированный пакет расчитывает поле, а поведение частицы в полученном поле — уже дописывается от руки, иногда другие гибриды возникают.
дело в том что у молотка, шуруповёрта, и отбойного молотка почему-то наличествуют деревянные ручки, на которых надпись «ручка молотка». Только у молотка это действительно ручка, за которую надо браться, вид и название предмета соответствует его интуитивно понятному назначению. Но у шуруповёрта она торчит на месте кнопки включения, а у отбойного молотка это просто декоративный элемент. И даже если всё это написано в спецификациях к этим трём чудным моделям, это всё равно запутывает людей.
Мне на секунду почудилось там лямбда выражение…
Зуб даю. Синтаксис прочитал, и в течение двух суток написал те 4 программы. Сложность проектов за этот день подросла, но сложность гугления нужной библиотеки только упала. Так что инструмент бомбезный.
Учебники по плюсам в основном старые, но это полбеды. Основная — что часто, когда открываешь чужой код (не важно, двух, или 10-тилетней давности), то видишь всё те же звёздочти и си-стайл. Я ещё ни разу в работе не столкнулся с новыми фичами, всё делают пойнтерами и ещё очень любят небезопасные оптимизации.
Я так сказал не потому что считаю правильным такой подход. я просто знаю человека который пилил программу пока учился в аспирантуре, а потом начал её продавать. Для учёных скидок нет, исходного кода нет ни для кого. И пока другие не сделают так же (а программа действительно крута), вряд ли кто-то сможет доступиться к такому функционалу напрямую.
При этом цитировали его статью почти везде в области. Просто чтобы упомянуть «он смог добиться результатов такой точности».
А сколько специалистов по моделированию? Вполне вероятно, что те же 1-2 на команду, где остальные не знают как это делать и полагаются во всём на коллег?
Мне кажется что люди, занимающиеся переписыванием библиотек си под пайтон — очень грамотные и разумные. В некоторых случаях они реализуют лучшую работу чем оригинал.
3 вещества, часть уже превращённая в кристал не просчитывается в рамках оптимизации, из-за диффузионного контроля. Проход один на итерацию, 8 связей по 3 координатам 3d сетки. Значит мой миллиард в среднем где-то в 40 раз меньше того, что упомянули вы. 40 раз тот мой код считался бы около 10 часов. На практике миллиард я запустил пару раз, чтобы показать справедливость эргодической гипотезы в рамках такой модели процесса, а дальше использовал 100млн ячеек, они за минуту просчитывались по сути, и можно было много модификаций попробовать. Для чего-то нужно большие куски, для чего-то хватает поменьше, такая жизнь.
А со звуком и правда простенько всё было.
Проблема в том что где-то в жизни есть момент, когда человек вдруг захотел таким специалистом стать. Например, когда ему впервые понадобилось программировать для научной задачи. И тогда он смотрит на свой питон, потом на си, и снова на питон…
И каким будет условие? if (somewhere in the nearest future there will occur an error)
*Это не сарказм, если что, я правда не понимаю как компилятор может предвидеть рантайм ошибку и заранее начать показывать мне несколько предыдущих действий пошагово с выводом значений. Мб есть какие-то аналогичные интерпретатору оболочки, которые так и делают?
Если точность задана, то есть оценка в количество веток на бинарном дереве. Но если ни одно из решений не падает на асимптотику, алгоритм может подгрузить следующий знак, и там ему может больше повезти. Если бы можно было определять направление изменений в какой-то далёкой итерации, и применить аналог метода градиентного спуска, то можно было бы быстро расчитывать и контролировать наличие условия выхода. Но со сложными периодическими функциями так не выходит — от них выстреливают гармоники, которые могут сделать внезапный горб на функции, когда она уже почти прижалась к своей асимптоте. И это никак не проконтролировать, ведь теперь значение в далёкой точке может свидетельствовать о расходимости, а может и не свидетельствовать. Есть масса всяких нюансов, которые не все учитывают, и которых нет в стандартных библиотеках. Защищённый таким способом код в таких случаях может вести себя следующим образом: перебрать столько значений, сколько разрешили, и вывалиться с ответом что решение везде расходится. А незащищённый код находит сходящееся, потому что уменьшает точность, пока горб не уползёт. А время выполнения у него будет разное для разных значений — где-то медленнее, а где-то и быстрее защищённого.