Решение дифференциальных уравнений в Excel
Обновлено: 21.11.2024
Получите полный доступ к Научной и инженерной книге Excel и более чем 60 тысячам других изданий, воспользовавшись бесплатной 10-дневной пробной версией O'Reilly.
Есть также прямые онлайн-мероприятия, интерактивный контент, материалы для подготовки к сертификации и многое другое.
Глава 12. Решение уравнений в частных производных
Введение
Уравнения в частных производных невероятно важны для решения научных и инженерных задач, и неудивительно, что для их решения было разработано множество методов. Как и в случае обыкновенных дифференциальных уравнений, вы можете разделить задачи, связанные с уравнениями в частных производных, на два широких класса: краевые задачи и начальные задачи (включая начально-краевые задачи ).
Лучшими примерами краевых задач являются эллиптические уравнения вида:
Я использую здесь стандартную нотацию нижнего индекса для обозначения частных производных, например, u x представляет первую частную производную u с относительно x .
Первое уравнение, показанное выше, — это хорошо известное уравнение Лапласа, а второе — уравнение Пуассона. Для этих уравнений требуются граничные условия, которые могут состоять из задания u , производных от u или их сочетания на границе задачи, что соответствует Дирихле , Неймана и смешанные условия соответственно. Численное решение краевых задач этой формы обычно состоит из дискретизации области задачи с использованием одного из множества методов, таких как метод конечных разностей, метод конечных элементов, или метод граничных элементов, и сформулировать систему алгебраических уравнений, которую можно решить для неизвестных значений u с дискретностью .
Получите Научно-техническую кулинарную книгу Excel прямо сейчас с онлайн-обучением O’Reilly.
Члены O’Reilly проходят онлайн-обучение в режиме реального времени, а также получают книги, видео и цифровой контент от более чем 200 издателей.
В документе показано, насколько эффективны электронные таблицы Excel для численного решения математических задач. Приведены численные решения многих начальных задач с граничными условиями уравнений в частных производных с использованием Excel и рассмотрен эффект изменения параметров уравнений.
Откройте для себя мировые исследования
- 20 миллионов участников
- 135 миллионов публикаций
- Более 700 тыс. исследовательских проектов
Мы представляем систематический метод электронных таблиц для моделирования и оптимизации общих дифференциальных алгебраических уравнений в частных производных (PDAE). В методе используется чисто табличная функция решателя PDAE, которая инкапсулирует метод линий и обеспечивает бесшовную интеграцию с решателем нелинейного программирования электронных таблиц Excel. Две альтернативные схемы динамической минимизации методом наименьших квадратов разработаны и продемонстрированы на сложной параметризованной системе PDAE со свойствами разрывов и связанными производными по времени. Применение метода включает в себя не более чем определение нескольких формул, которые очень похожи на исходные математические уравнения, без каких-либо навыков программирования. Он предлагает более простую альтернативу более сложным средам, требующим нетривиальных навыков программирования и усилий.
Рекомендации
Численный анализ
бумаги
О процедуре решения дифференциального уравнения в частных производных (УЧП) методом прямых (МОЛ) Усин.
В этой статье мы использовали метод прямых (MOL) в качестве процедуры решения уравнения в частных производных (PDE). За последние несколько лет диапазон приложений MOL резко расширился; тем не менее, нет вводного, чтобы познакомить новичка с методом. Эта статья иллюстрирует применение MOL с использованием метода Кранка-Николсона (CNM) для численного решения PDE.[Показать полный текст] вместе с начальным условием и граничным условием Дирихле. Реализация этих решений осуществляется с использованием рабочего листа или электронной таблицы Microsoft Office Excel, языка программирования Matlab. Наконец, здесь мы анализируем частное решение и численное решение уравнения Лапласа, полученное с помощью MOL вместе с CNM.
Решение задач с начальными значениями с использованием метода Рунге-Кутты пятого порядка с использованием электронной таблицы Excel
Метод Рунге – Кутта пятого порядка (метод Бухера) используется при решении начальных задач вида с помощью электронной таблицы Excel для различных значений шага h и истинной относительной погрешности в процентах εt< /sub> рассчитывается для каждого случая.
Решение линейной системы одновременных обыкновенных дифференциальных уравнений с использованием M Эйлера и Хойна
Решение проблем оптимизации с помощью Excel
Электронная таблица Excel используется для решения задач оптимизации одной и нескольких переменных без ограничений, и указано, что меню "Решатель инструментов" можно использовать для решения задач оптимизации с ограничениями.
Дифференциальные уравнения – это уравнения, содержащие производные. Уравнения используются в исчислении для описания взаимосвязей между одной или несколькими переменными. Решение любой серии уравнений можно найти, изобразив оба уравнения в виде графика и выяснив, где они встречаются. Синхронные дифференциальные уравнения ничем не отличаются; чтобы найти решения ряда дифференциальных уравнений, постройте оба графика на одной оси x-y. Этого можно добиться в Excel с помощью линейного графика.
Откройте новую таблицу Excel и введите "X" в ячейку A1. Если ваше дифференциальное уравнение содержит независимую переменную, отличную от X, например T, вы можете вместо этого ввести ее в ячейку.
Введите "DF1" в ячейку B1, чтобы представить дифференциальное уравнение 1, а затем введите "DF2" в ячейку C2, чтобы представить дифференциальное уравнение 2.
Введите значения независимой переменной в столбец A, начиная с ячейки A2. Например, введите «1» в ячейку A2, затем введите «2» в ячейку A3. Продолжайте вводить столько значений, сколько необходимо для вашего графика. Например, если вы рассчитываете, сколько секунд требуется мячу, чтобы упасть с высоты 200 футов, вы можете выбрать значения x в диапазоне от 1 до 25.
Решите первое дифференциальное уравнение для первого значения x, а затем введите решение в ячейку B2. Продолжайте решать для каждого значения x, вводя ответы в соответствующие ячейки столбца B.
Решите второе дифференциальное уравнение для первого значения x, а затем введите решение в ячейку C2. Продолжайте решать для каждого значения x, вводя ответы в соответствующие ячейки столбца C.
Выделите данные Excel. Чтобы выделить данные, щелкните ячейку A1 и перетащите курсор в правый нижний угол.
Перейдите на вкладку "Вставка", а затем нажмите стрелку под значком линейного графика в группе диаграмм. Щелкните значок первой линейной диаграммы в группе, чтобы создать диаграмму.
Вам необходимо численно решить дифференциальное уравнение первого порядка вида:
Это стандартная задача с начальными значениями, и для ее решения можно применить любой из ряда стандартных методов численного интегрирования с помощью Excel и VBA.
Рассмотрите конкретную проблему с начальным значением, например:
Точное решение этой проблемы:
На рис. 11-1 показан график этого точного решения.
Обычно, если вы можете найти точное решение, вы не прибегаете к численному интегрированию. Однако я выбрал эту задачу, чтобы вы могли сравнить численные результаты с точным решением.
В этом рецепте я покажу вам, как реализовать метод Эйлера. Это не обязательно лучший метод, поскольку он требует небольших размеров шага для обеспечения точности. Тем не менее, достаточно просто показать вам механизм реализации такого метода в Excel и VBA, не затуманивая проблему. В рецепте 11.2 я покажу вам, как реализовать гораздо лучший метод. В рецепте 11.3 я покажу вам, почему метод Эйлера может быть не лучшим выбором для некоторых задач.
Метод Эйлера основан на использовании первых двух членов разложения в ряд Тейлора функции для предсказания значения функции в некоторой точке, зная значение функции в какой-либо другой точке плюс некоторую информацию о производных этой функции. В этом случае вы можете написать разложение y в ряд Тейлора следующим образом:
Метод Эйлера учитывает только первые два члена в правой части этого уравнения, игнорируя все члены более высокого порядка, которые в совокупности составляют ошибку усечения для этого метода. Для рассматриваемой здесь задачи мы знаем, что dy/dx — это заданное дифференциальное уравнение, поэтому мы можем использовать первые два члена разложения у в ряд Тейлора, чтобы определить у при последовательных приращениях вдоль х, начиная с заданного начального значения. Эту схему очень легко реализовать в Excel и VBA. На самом деле вы можете легко реализовать эту схему в стандартной электронной таблице без использования VBA, или вы можете написать подпрограмму VBA, что я считаю более универсальным подходом. Я покажу вам, как сделать и то, и другое.
Рисунок 11-1. Точное решение примера задачи с начальным значением
Использование только электронных таблиц
На рис. 11.2 показана таблица, которую я настроил для реализации метода Эйлера, используя только табличные формулы.
Три отдельные таблицы, которые вы видите на рис. 11-2, представляют собой решения одной и той же задачи с использованием трех разных размеров шага, dx (обозначенных dx на рис. 11-2). Вам нужна только одна таблица, чтобы решить задачу, но я включил три, чтобы показать различия в результатах с использованием разных размеров шага.
Таблицы довольно просты. Столбцы с пометкой x содержат формулы типа =M5+$N$1, которые просто вычисляют новое значение x, учитывая предыдущее значение x плюс размер шага. Столбцы с пометкой y содержат формулу Эйлера для предсказания следующего значения y. Формула электронной таблицы выглядит следующим образом: =N5+(M6-M5)*(M5+N5). Часть (M6-M5) этой формулы представляет собой размер шага, который также мог бы быть просто $N$1. Часть (M5+N5) является производной от y из данного дифференциального уравнения.
Рисунок 11-2. Метод Эйлера с использованием только табличных формул
Столбцы с пометкой y точное содержат формулы типа =EXP(M6)-M6-1, соответствующие уравнению для точного решения, которое обсуждалось ранее. И, наконец, столбцы ошибок содержат формулы типа =(O6-N6), которые представляют собой разницу между точным и приблизительным решением.
Ошибка уменьшается по мере уменьшения размера шага, как и следовало ожидать. Обратите внимание, однако, что вам нужно выполнить гораздо больше вычислений с меньшим размером шага, чтобы покрыть эквивалентный диапазон значений x. Например, если вы хотите вычислить решение в диапазоне x = [0,1], вам потребуется 10 строк вычислений с шагом 0,1, 100 строк с шагом 0,01 и 1000 строк с использованием размер шага 0,001. Ясно, что если вам требуется небольшой размер шага и вы хотите покрыть разумный диапазон значений x для данной задачи, ваши электронные таблицы станут очень большими. Это становится громоздким, особенно когда вы хотите нанести результаты на график, изменить диапазон или изменить размер шага. VBA предлагает лучший подход.
В примере 11-1 показана написанная мной подпрограмма VBA, реализующая метод Эйлера для нашего примера задачи.
Пример 11-1. DoEuler1stOrder
Эта подпрограмма вычисляет оценочные значения y в диапазоне значений x и помещает результаты в активную электронную таблицу, начиная со строки 2 в столбцах A и B.
Переменные, объявленные в начале этой подпрограммы, используются для хранения yx (yn), yx+1 (yn1), x (xn tt>) и dx (dx). n – это переменная-счетчик, представляющая количество шагов, которые необходимо выполнить.
Цикл For проходит от 1 до n, вычисляя оценки для y на каждом шаге. Строка yn1 = yn + (xn + yn) * dx вычисляет предсказанное значение y с учетом предыдущего значения y, размера шага и производной y из исходного дифференциального уравнения. После этого вычисления и после обновления xn и yn подпрограмма записывает результаты в активную электронную таблицу. Строка ActiveSheet.Cells(i + 1, 1) = xn записывает значение x в строку i+1 и столбец 1 в Стиль ссылки на ячейку R1C1 (столбец 1 соответствует столбцу A). Строка ActiveSheet.Cells(i + 1, 2) = yn записывает значение y в строку i+1, столбец 2.< /p>
Я настроил кнопку на электронной таблице (точно такую же, как показанную в рецепте 9.3), чтобы вызвать эту подпрограмму. Когда я нажимаю кнопку, электронная таблица заполняется вычисленными результатами. Хотя этот подход отлично работает, он страдает одной из проблем, упомянутых ранее при использовании чистых формул электронной таблицы: при использовании небольшого размера шага при охвате разумного диапазона значений x электронная таблица содержит большое количество точек данных. Подпрограмма, показанная в примере 11-1, заполнит 1000 строк данных, что может стать громоздким, как обсуждалось ранее.
Чтобы смягчить эту проблему, вы можете легко добавить несколько строк кода в DoEuler1stOrder, который будет выводить результаты каждые 100 шагов или около того, чтобы количество выходных строк оставалось управляемым.
Это распространенный прием при работе с числами и моделированием. Например, симуляции в реальном времени и видеоигры, использующие физические эффекты, используют численное интегрирование для решения уравнений движения. Эти алгоритмы обычно используют очень малые временные шаги, которые сделали бы симуляцию или игру чрезвычайно медленными, если бы графика обновлялась каждый временной шаг. Вместо этого базовые вычисления выполняются небольшими шагами, а графика обновляется со скоростью, обеспечивающей темп симуляции или игры в режиме реального времени.
В примере 11-2 показана модифицированная подпрограмма, использующая этот метод контролируемого вывода.
Пример 11-2. Измененный DoEuler1stOrder
Я добавил две новые переменные, c и k. c — это переменная-счетчик, используемая для определения времени вывода результатов в электронную таблицу, а k — это переменная-счетчик, используемая для отслеживания выходной строки.
Я решил вывести только 10 строк данных, сохранив размер шага равным 0,001. Я по-прежнему хотел охватить диапазон значений x от 0 до 1, а это означало, что мне нужно было сделать n равным 1100. Таким образом, выходные данные будут доставляться в электронную таблицу каждые n/10 шагов, то есть всякий раз, когда c равно n/10.
Результаты этой новой подпрограммы показаны на рис. 11-3.
Рисунок 11-3. Результаты с использованием VBA
Здесь вы можете увидеть маленькую таблицу, которую я настроил для получения 10 строк результатов. Вы также можете увидеть кнопку, которую я настроил для запуска подпрограммы. Эта версия гораздо более управляема и дает вам большую гибкость, когда вам нужно изменить алгоритм решения. Например, чтобы изменить размер шага на 0,0001 при сохранении размера таблицы результатов, все, что вам нужно сделать, это изменить dx на 0,0001 и n на 11 000 в DoEuler1stOrder, а затем повторно запустите его.
Если вы попробуете метод Эйлера для решения задачи и увидите, что он дает плохие результаты, вы можете решить применить метод более высокого порядка, например метод Рунге-Кутты. Этот последний метод будет громоздким для настройки только в электронной таблице; однако, если вы уже используете VBA, вы можете без особых усилий изменить подпрограмму решения, а затем повторно вычислить результаты.
Ознакомьтесь с рецептом 11.2, чтобы узнать, как расширить методы VBA из этого рецепта для обработки уравнений второго порядка.
Читайте также: