Функциональное программирование решение уравнений

Функциональные уравнения: Часть 1

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

Функциональное уравнение — уравнение, связующее значение функции в одной точке с её значениями в других точках.

Другими словами, в функциональных уравнениях место неизвестного занимает функция. Для примера, рассмотрим такое функциональное уравнение:
$$display$$2f(x)=2$$display$$ Тут интуитивно хочется разделить обе части уравнения на 2, что сработает и мы узнаем ответ: $$display$$2f(x)=2 \Rightarrow f(x)=1$$display$$ Значит ответом на функциональное уравнение может быть только значение f(x), или похожее (это обычно указывают в условии задачи).
Рассмотрим некое функциональное уравнение, где с обоих сторон будут стоят функции. $$display$$4f(x)=2f(x)+2x \Rightarrow 2f(x)=f(x)+x \Rightarrow f(x)=x$$display$$ Стоит отметить что функция всегда имеет под собой число ($inline$f(x)=x+2, f(1)=3, f(5)=7$inline$, а значит можно производить над ними арифметические операции. Давайте рассмотрим функциональное уравнение из двумя переменными. Задание : найти все функции $inline$f: \mathbb \rightarrow \mathbb$inline$ для каких $inline$4f(x+y)=f(x)+f(y)+2$inline$. В случаях из двумя переменными необходимо припустить что $inline$x=y=0$inline$, из этого мы узнаем значение $inline$f(0)$inline$.

Узнав значение $inline$f(0)$inline$, приравниваем $inline$y$inline$ к нулю. Таким образом узнаем значение $inline$f(x)$inline$

$inline$y=0$inline$
$inline$4f(x)=f(x)+f(0)+2$inline$
$inline$3f(x) = 3 \Rightarrow f($inline$f(x)=kx$inline$x)=1 $inline$
Ответ: $inline$ f(x)=1 $inline$

При такого вида уравнениях обязательно необходимо предполагать что $inline$x=y=0$inline$, но не всегда $inline$x=0\vee y=0$inline$. Существуют такие аналоги как: $inline$x=y, x=f(y), . $inline$. К примеру, $inline$4f(x-y)=f(x)+f(y)+2$inline$. Подставляем $inline$x=y=0$inline$, получаем $inline$4f(0)=2f(0)+2 \Rightarrow f(0)=1$inline$, тогда $inline$x=y$inline$ значит $inline$4f(0)=2f(x)+2$inline$, разделим обе части уравнения на 2 получим что $inline$2f(0)=f(x)+1 \Rightarrow f(x)=1+2f(0) \Rightarrow f(x)=3$inline$, произведем проверку, которая показывает что $inline$f(x)=3$inline$ есть решением данного функционального уравнения.
Теорема 1. Функциональное уравнение Коши $inline$f(x+y)=f(x)+f(y)$inline$ удовлетворяют все линейные функции вида $inline$f(x)=kx$inline$ (1)
Теорема 2. Функциональное уравнение $inline$f(x+y)=f(x)f(y)$inline$ удовлетворяют все показательные функции вида $inline$f(x)=k^$inline$ (2)
Теорема 3. Функциональное уравнение $inline$f(xy)=f(x)+f(y)$inline$ удовлетворяют все логарифмические функции вида $inline$f(x)=log_k (x)$inline$ (3)
Теорема 4. Функциональное уравнение $inline$f(xy)=f(x)f(y)$inline$ удовлетворяют все степенные функции вида $inline$f(x)=x^$inline$ (4)
Доведем их.
$$display$$(1) f(x+y)=a(x+y), f(x)+f(y) = ax+ay \Rightarrow f(x+y)=f(x)+f(y)$$display$$
$$display$$(2) f(x+y)=a^, f(x)f(y) = a^a^ \Rightarrow f(x+y)=f(x)f(y)$$display$$
$$display$$(3) f(xy)=log_a (xy), f(x)+f(y)=log_a(x)+log_a(y) \Rightarrow f(xy)=f(x)+f(y)$$display$$
$$display$$(4) f(xy)=(xy)^, f(x)f(y) = x^y^ \Rightarrow f(xy)=f(x)f(y)$$display$$
Теорема 5. Уравнения Йенсена $inline$f(\frac)=\frac, f(x)=kx+b$inline$, доводиться аналогично предыдущим.

Читайте также:  Starline a93 настройка программирования

Рассмотрим такую задачу: Найдите все линейные функции вида $inline$f(x)=ax, $inline$$inline$f: \mathbb \rightarrow \mathbb$inline$ для которых правильно $inline$4(f(x-y)+f(x+y)+1)=2f(x)+f(y-1)$inline$.

Воспользуемся теоремой 1.
$inline$4(f(x-y)+f(x+y)+1) = 4(f(x)-f(y)+f(x)-f(y)+1) = 4$inline$
$inline$4=2f(x)+f(y-1)$inline$
Тут ключевой момент. Нельзя подставлять $inline$x=y=0$inline$, так как ничего не получиться. Необходимо подставить $inline$x=0, y=x+1$inline$, тогда мы сможем узнать $inline$f(0)$inline$.
$$display$$4=2f(0)+f(0) \Rightarrow 4=3f(0) \Rightarrow f(0)=\frac$$display$$. Тогда подставляем $inline$x=y-1$inline$, и получаем $inline$4=2f(x)+f(x) \Rightarrow 4=3f(x) \Rightarrow f(x)=\frac$inline$
Ответ: $inline$f(x)=\frac$inline$

Источник

Программирование в уравнениях

В обычном, как императивном, так и функциональном программировании вся программа по большому счету сводится к огромному числу равенств x = . , где слева стоит переменная, а справа — выражение, зависящее от переменных. А языки программирования предоставляют синтаксический сахар, что бы записать это множество как можно более компактно. Это уже почти уравнения, только тривиальные.

Некоторые сложности обнаруживаются в ленивых языках:

fib = 1:1:(zipWith (+) fib (tail fib))

Здесь fib присутствует и в левой и в правой части, то есть мы получаем полноценное уравнение, решением которого будет бесконечная последовательность чисел Фибоначчи. Так как на бесконечных последовательностях естественным образом определяется топология, Haskell может решить это уравнение методом проcтых итераций (через оператор неподвижной точки).

Еще дальше по пути уравнений пошел Prolog. Каждый предикат определяет уравнение на множествах, хоть и записывается без знака равенства. Решаются такие уравнения почти перебором и возможность использовать в них арифметику сильно ограничена.

Но есть язык, в котором уравнения являются важнейшей частью — это Modelica.

model Point Real x,y; equation end Point; model Line parameter Real len; Point p1,p2; equation len = (p1.x-p2.x)^2 + (p1.y-p2.y)^2; end Line; 

Здесь отрезок определяется как координаты концов и длинна, при этом длина и координаты связаны очевидным уравнением.

(К сожалению, source такого языка не знает, а вставить раскрашенный pygment-ом html не получается.)

Естественно, уравнения могут быть объединены в систему:

model Hand Point ph,pl; parameter Real l1,h1,l2,h2; Line ll1(len = l1),lh1(len = h1),ll2(len = l2),lh2(len = h2); Real arcl,arch; Point p; equation ll1.p1 = pl; lh1.p1 = ph; ll1.p2.x = pl.x + l1 * arcl; lh1.p2.x = ph.x + h1 * arch; ll1.p2 = ll2.p1; lh1.p2 = lh2.p1; p = ll2.p2; p = lh2.p2; end Hand; 

Здесь описывается манипулятор, состоящий из четырех соединенных шарнирами реек управляемый двумя сервоприводами.

Как следует из названия, Modelica предназначена для моделирования сложных, гетерогенных систем. Ее реализации есть у знаменитого Вольфрама, производителя САПР (не путать и «чертежными программами») CATIA. Есть также и свободные реализации, такие как OpenModelica.

Так как моделируемые объекты редко описываются алгебраическими уравнениями, Modelica умеет решать и обыкновенные дифференциальные уравнения. К сожалению, уравнения в частных производных она пока не осилила, но обычно можно разбить систему на конечные элементы и породить обыкновенные дифуры в цикле.

В качестве примера приведу модель очень сложной гибридной электромеханической системы — Гауссгана:

model Gauss extends Modelica.Electrical.Analog.Interfaces.OnePort; Real x (start = -1); Real sp (start = 0); Real co; Real pw (start = 0); Real ke; Real se; Real pe; equation der(pw) = i*v; ke = sp^2/2; se = i^2/2; pe = pw - ke - se; co = (if abs(x) > 0.2 then (abs(x)*(x^(-5))/3.0) else (x/((0.2^5)*3.0))); der(sp) = -co * i; der(x) = sp; der(i) = v + (co * sp); end Gauss; model Main Modelica.Electrical.Analog.Basic.Ground g; Modelica.Electrical.Analog.Sources.ConstantVoltage ps; Modelica.Electrical.Analog.Basic.Resistor rps; Gauss gun; equation connect(ps.p, g.p); connect(ps.p, gun.p); connect(ps.n, rps.p); connect(rps.n, gun.n); end Main; 

Здесь x — координата снаряда, v — напряжение, i — ток. Для отладки вычисляется полная энергия pe — ее график будет горизонтальной прямой.

Кроме текстового представления программы, в Modelica стандартизовано и графическое (хотя лично я предпочитаю работать с текстом). Для повторного использования кода применяется знакомое многим по ООП наследование. Есть обширные библиотеки по электротехнике, теплотехнике, механике и, даже, биохимии.

Разработчики «Моделик» не расчитывают охватить все одной системой — большинство реализаций допускает комоделирование с помощью Functional Mock-up Interface. При желании этот же интерфейс можно задействовать для взаимодействия с внешним миром, но это пока открытая область.

Источник

Решение дифференциальных уравнений в частных производных методом функционального программирования в Maple

Прикладной математический пакет Maple. Набор инструментов для работы с дифференциальными уравнениями в частных производных. Метод разделения переменных. Метод функций Грина. Построение формального решения на входном Maple-языке. Основные типы операций.

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Решение Дифференциальных уравнений в частных производных методом функционального программирования в maple

Курсовая работа посвящена решению дифференциальных уравнений в частных производных методом функционального программирования в прикладном математическом пакете Maple.

Составлены таблицы типов информации и типы операций, требующиеся при формальном построении решения дифференциального уравнения в частных производных.

На примере были рассмотрены функциональные алгоритмы построения формальных решений одномерных и двумерных уравнений параболического типа методами, такими как метод разделенных переменных, методы Грина и другие. В приложении показаны примеры решения неоднородных уравнений параболического типа методом Грина.

Работа состоит из введения, 3 разделов, 2 таблиц, заключения, библиографического списка из 4 источников, одного приложения, в котором приведена реализация примеров решения уравнений.

1. Построение формального решения на входном Maple-языке

2. Метод разделения переменных

3. Метод функций Грина и другие методы

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Прикладной математический пакет MAPLE обладает большим набором инструментов для работы с дифференциальными уравнениями в частных производных. Среди них: установление порядка уравнения, исследование на возможность разделения переменных, определение условий поиска решения в виде суммы или произведения функций, получение решения из функций, получаемых командой pdsolve для разделенных уравнений, выполнение замены переменных и различных подстановок и т.п.

Между тем последовательное решение дифференциальных уравнений в частных производных (даже в самых простых случаях) представляет собой сложную комплексную задачу, требующую специальных математических навыков, корректного учета начальных и граничных условий, проведения исследования полученных решений. При этом трудоемкие разделы математики — векторный анализ, специальные функции, теория рядов, интегральные преобразования и другие — являются необходимыми средствами для решения задач математической физики. Заметим, что эти математические инструменты высокоразвиты в MAPLE и удобны для применения, по их использованию в научных исследованиях и образовании имеется обширная литература. Проблема же решения дифференциальных уравнений в частных производных с использованием математических пакетов в виду ее сложности до сих пор требует особых подходов и разработок. При этом оказывается, что для большого числа задач с использованием символьного MAPLE-процессора можно составить достаточно универсальные алгоритмы, с помощью которых на входном MAPLE-языке можно запрограммировать формальное построение решения дифференциальных уравнений в частных производных. Построенные общие решения могут быть программными же средствами использованы для конкретных физических задач.

1. Построение формального решения на входном Maple-языке

Проблема решения дифференциальных уравнений в частных производных средствами MAPLE представляет собой программную задачу, сочетающую использование инструментов пакета с необходимыми дополнительными алгоритмами: учет начальных и граничных условий (НУ и ГУ), сложные и, зачастую, нетривиальные преобразования промежуточных результатов (основанные, например, на исследовании асимптотического поведения функций), программное использование дополнительной и/или специальной информации (например, использование рекуррентных соотношений для некоторых специальных функций, которые пока недоступны средствами MAPLE) и т.п. Более того, при решении сложных задач требуется программирование отдельных этапов решения с последующим объединением промежуточных результатов, а также создания комплексов программ (например, при комплексном аналитическом и численном — решении уравнений и различных способах визуализации и интерпретации результатов).

Для программирования построения формального решения на входном MAPLE-языке необходим ввод необходимой начальной информации (табл. 1) с последующим выполнением определенных алгоритмических операций (табл. 2).

Типы информации при решении дифференциальных уравнений в частных производных средствами MAPLE

Задание системы координат.

Источник

Оцените статью