С Новым годом! Форум программистов, компьютерный форум, киберфорум
Wolfram Mathematica
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
1 / 1 / 0
Регистрация: 20.07.2013
Сообщений: 64

Уравнение нелинейной диффузии Колмогорова-Петрова-Пискунова

04.10.2014, 16:50. Показов 4727. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, реализовать нелинейное уравнение диффузии. Задали сделать в Mathematica, а она ни в какую не работает(
Миниатюры
Уравнение нелинейной диффузии Колмогорова-Петрова-Пискунова  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.10.2014, 16:50
Ответы с готовыми решениями:

Уравнение Колмогорова-Петровского-Пискунова
Помогите решить данное уравнение методом Галеркина. u''(x,t)+ku(x,t)(1-u(x,t))=0

Уравнение Колмогорова
Проблема состоит в том, что я не могу понять как реализовать в матлабе уравнения Колмогорова. Есть граф состояний (теория массового...

УрМатФиз - Уравнение диффузии
На границе x=0 бесконечного слоя 0 \leq x \leq l происходит массообмен с окружающей средой, имеющей постоянную концентрацию диффундирующего...

23
Модератор
Эксперт по математике/физике
 Аватар для VSI
5289 / 4071 / 1392
Регистрация: 30.07.2012
Сообщений: 12,486
04.10.2014, 17:58
 Комментарий модератора 
Правила форума CyberForum.ru
4.7. Как можно более полно описывайте суть проблемы или вопроса, что было сделано для ее решения и какие результаты получены.
5.18. Запрещено размещать задания в виде картинок и других файлов с их текстом.

Текст задания набираем вручную, для формул есть встроенный редактор.

А потом загляните СЮДА...
0
1 / 1 / 0
Регистрация: 20.07.2013
Сообщений: 64
04.10.2014, 19:13  [ТС]
Не нашла в редакторе формул, как записать частную производную второго порядка, потому и прикрепила фотографию.

Добавлено через 11 минут
"Туда" я заглянула, но все равно тот пример не подходит под мою задачу...

Вот остальные фото по задаче..
Миниатюры
Уравнение нелинейной диффузии Колмогорова-Петрова-Пискунова   Уравнение нелинейной диффузии Колмогорова-Петрова-Пискунова   Уравнение нелинейной диффузии Колмогорова-Петрова-Пискунова  

0
Модератор
Эксперт по математике/физике
 Аватар для VSI
5289 / 4071 / 1392
Регистрация: 30.07.2012
Сообщений: 12,486
04.10.2014, 19:50
Цитата Сообщение от Eva_19
"Туда" я заглянула, но все равно тот пример не подходит под мою задачу...
Неужели? Тогда ознакомьтесь со следующим материалом...
0
1 / 1 / 0
Регистрация: 20.07.2013
Сообщений: 64
04.10.2014, 20:15  [ТС]
Извините.. Уже несколько десятков сайтов перелопатила, но все равно не пойму, как реализовать задачу в Mathematica.. Поэтому и обратилась на форум с этим вопросом
0
1 / 1 / 0
Регистрация: 20.07.2013
Сообщений: 64
05.10.2014, 10:26  [ТС]
Я разобралась с тем сайтом про решение диффур, но остался один вопрос: как записать в математике вторые частные производные?
Миниатюры
Уравнение нелинейной диффузии Колмогорова-Петрова-Пискунова  
0
Модератор
Эксперт по математике/физике
 Аватар для VSI
5289 / 4071 / 1392
Регистрация: 30.07.2012
Сообщений: 12,486
05.10.2014, 11:58
Цитата Сообщение от Eva_19
...как записать в математике вторые частные производные?
Вот так...
Миниатюры
Уравнение нелинейной диффузии Колмогорова-Петрова-Пискунова  
0
1 / 1 / 0
Регистрация: 20.07.2013
Сообщений: 64
05.10.2014, 13:37  [ТС]
А такая форма записи подойдет?
В том случае, если Вам требуется найти частную производную функции f(x,y,z,...,t) напишите в окне гаджета: D[f[x, y, z,…,t], j], где j — интересующая Вас переменная. Если нужно найти частную производную по некоторой переменной порядка n, то следует ввести: D[f[x, y, z,…,t], {j, n}], где j означает то же, что и Выше.
0
Модератор
Эксперт по математике/физике
 Аватар для VSI
5289 / 4071 / 1392
Регистрация: 30.07.2012
Сообщений: 12,486
05.10.2014, 14:29
Подойдет... Но вид записи частной производной в документе будет отличаться от общепринятого в математике...
0
1 / 1 / 0
Регистрация: 20.07.2013
Сообщений: 64
05.10.2014, 14:41  [ТС]
Хорошо.. А такая вещь нормально сработает?
pde = D[u[x, t], {x, 2}] + k*u[x, t]*[1-u[x, t]] == 0
sol = DSolve[pde, u[x, t], {x, t}]
0
Модератор
Эксперт по математике/физике
 Аватар для VSI
5289 / 4071 / 1392
Регистрация: 30.07.2012
Сообщений: 12,486
05.10.2014, 14:46
А почему бы Вам самостоятельно не попробовать сделать это?
0
1 / 1 / 0
Регистрация: 20.07.2013
Сообщений: 64
05.10.2014, 17:10  [ТС]
Я и рада была бы самостоятельно все это сделать, но:
1. Программа ни в какую не хочет работать на моем ноуте.
2. Ехать в универ, где есть компьютерные классы, я не могу по очень простой причине - сильно болею, и никого не хочу заражать.
И уж если Вы, уважаемый модератор, не можете\не хотите\Вам лень помочь с заданием (хотя тот архив был вполне кстати), то так и скажите. Я пойму и пойду дальше тыркаться с заданием.
0
Модератор
Эксперт по математике/физике
 Аватар для VSI
5289 / 4071 / 1392
Регистрация: 30.07.2012
Сообщений: 12,486
05.10.2014, 20:52
Цитата Сообщение от Eva_19
А такая вещь нормально сработает?
Нет...
0
1 / 1 / 0
Регистрация: 20.07.2013
Сообщений: 64
06.10.2014, 11:07  [ТС]
А можно хотя бы сказать, в чем ошибка?
0
 Аватар для tvoretsmira
462 / 452 / 56
Регистрация: 28.05.2013
Сообщений: 699
06.10.2014, 21:20
в Mathematica cкобки круглые, а в квадратные заключают аргументы функций. Потому, я думаю, что должно быть так:
pde = D[u[x, t], {x, 2}] + k*u[x, t]*(1-u[x, t]) == 0
2
1 / 1 / 0
Регистрация: 20.07.2013
Сообщений: 64
07.10.2014, 14:35  [ТС]
А теперь задача осложнилась.... Надо решить это уравнение методом Галеркина

Добавлено через 10 минут
Если кто знает, помогите, пожалуйста. Надо срочно сдать эту задачу...

Добавлено через 11 минут
И еще надо учитывать время .. Тут на самом деле без вашей помощи не обойтись
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
09.10.2014, 10:09
Лучший ответ Сообщение было отмечено Eva_19 как решение

Решение

VSI, помоги перевести мои наброски в Mathematica, потому как в матлаб блок символьных вычислений слабоват для этого дела у меня доходит до вычисления интеграла по t и надолго повисает, хотя вручную там особо нечего решать, многочлен же.

Набросок на MATLAB
Matlab M
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
% очищаем памяить и экран
clear all
clc 
 
% пределы:
a = 0;
b = 1;
 
k = 0.7; % коэф-т в уравнении
 
syms x t % определяем символьные переменные
u = sin(pi*x)-x; % начальное значение при t=0
%disp('составляем базисные функции и составляем уравнение общего вида')
for i = 1:4
    for j = 1:4
        % базисные функции
        fi(i) = x^(i)*(1-x);
        ro(j) = t^(j)*(1-t);
        C = sym(['C',num2str(i),num2str(j)]); % создаем новую переменную - коэф-т
        u = u + C*fi(i)*ro(j); % общий вид функции, накапливаем сумму
    end
end
 
d2Udx2 = diff(u,'x',2); % вторая производная по х
dUdt = diff(u,'t'); % первая производная по t
 
%disp('Вычисляем невязку')
R = d2Udx2 - dUdt + k*u*(1-u); % невязка
 
II = sym(zeros(1,16)); % пустой массив
%disp('Вычисляем интегралы')
ii = 1;
for i =1:4
    for j = 1:4
        % fprintf('Интеграл №%i ',ii);
        p = expand( R*fi(i)*ro(j) ); % подынтегральная функция (раскрываем скобки)
        % fprintf('Составили подынтегральную ф-цию... ');
        % считаем двойные интегралы
        It = int( collect(p,'t'),'t',a,b); % собираем множители при t и интегрируем по t
        % fprintf('Проинтегрировали по t... ');
        II(ii) = int( collect(It,'x'), 'x', a,b); % собираем множители при х и интегрируем по x
        % fprintf('Проинтегрировали по x \n');
        ii = ii+1; 
    end
end
 
% решаем систему интегралов относительно Сi:
% disp('Решаем систему')
name = symvar(II); % имена коэф-тов
z = solve(II); % решаем систему относительно Cij
 
% подставляем найденный результат в ф-цию общего вида:
% disp('Подставляем в функцию общего вида')
U = subs(u,{name},{z.C11, z.C12, z.C13, z.C14, z.C21, z.C22, z.C23, z.C24, z.C31, z.C32, z.C33, z.C34, z.C41, z.C42, z.C43, z.C44});
 
% рисуем и включаем сетку
disp('Рисуем')
ezsurf(U,[a,b,a,b]), grid on
xlabel('x')
ylabel('t')


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

https://www.cyberforum.ru/cgi-bin/latex.cgi?u(x,t) = \sum \sum C_{ij} \varphi_i(x)\rho_j(t)

В методе Галеркина в качестве ортогональных ф-ций берется: https://www.cyberforum.ru/cgi-bin/latex.cgi?\Psi _k(z) = z^{(k-1)}(1-z);

В символьном виде составляется взвешанная сумма (строка 20) с неизвестными коэф-тами (строка 19) и вычисляются компоненты уравнения (строки 24,25) : вторая производная по х и первая производная по t. Все в общем виде.

Затем составляется невязка, т.е. все компоненты уравнения переносятся в правую часть (строка 28).

После чего составляются условия ортогональности, т.е. вычисляются двойные интегралы (строки 36-41)

https://www.cyberforum.ru/cgi-bin/latex.cgi?II_k = \int_{0}^{1} \int_{0}^{1} R \varphi_i \rho_j dt dx

*в матлаб не получилось записать все сразу, да и так лучше видно, где идет расчет.

Теоретически должны получить 16 выражений c 16-ю неизвестными Cij. Приравниваем их нулю и решаем систему (строка 50).

Полученный набор Cij подставляем в уравнение общего вида (строка 54).

И для полного счастья рисуем поверхность решения (строка 58)
1
Эксперт функциональных языков программированияЭксперт по математике/физике
4312 / 2104 / 431
Регистрация: 19.07.2009
Сообщений: 3,200
Записей в блоге: 24
16.10.2014, 23:35
Посмотрите, правильно ли я перевёл код из предыдущего поста:
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
n = 4;
a = 0;
b = 1;
k = 7/10;
u0 = Sin[\[Pi] x] - x;
\[CurlyPhi][i_] = x^i (1 - x);
\[Rho][j_] = t^j (1 - t);
 
u = Sum[c[i, j] \[CurlyPhi][i] \[Rho][j], {i, 1, n}, {j, 1, n}]
$Assumptions = c[__] \[Element] Reals && i > 0 && j > 0 && Element[{i, j}, Integers];
R = D[u, {x, 2}] - D[u, t] + k u0 (1 - u0) // Simplify
 
Integrant = Expand[R \[CurlyPhi][i] \[Rho][j]];
II[i1_, j1_] := 
  Block[{i = i1, j = j1}, 
   With[{integrant = Integrant}, 
    Integrate[integrant, {x, a, b}, {y, a, b}]]];
eqns = Flatten@Array[II[##] == 0 &, {n, n}] // Simplify
vars = Flatten@Array[c, {n, n}]
 
Solve[eqns, vars]
u /. %
У меня это считается минут 10.
1
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
17.10.2014, 09:21
Mysterious Light, огромнейшее мерси!
Если подправить мелочи:
- можно взять n=3;
- u0 = Sin[\[Pi] x] + x; (тут я ошибся знаком)
- u = u0 + Sum...
- R = ... + k u (1 - u)
то будет так
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
n = 3;
a = 0;
b = 1;
k = 7/10;
u0 = Sin[\[Pi] x] + x;
\[CurlyPhi][i_] = x^i (1 - x);
\[Rho][j_] = t^j (1 - t);
 
u = u0 + Sum[c[i, j] \[CurlyPhi][i] \[Rho][j], {i, 1, n}, {j, 1, n}]
$Assumptions = c[__] \[Element] Reals && i > 0 && j > 0 && Element[{i, j}, Integers];
R = D[u, {x, 2}] - D[u, t] + k u (1 - u) // Simplify
 
Integrant = Expand[R \[CurlyPhi][i] \[Rho][j]];
II[i1_, j1_] := 
  Block[{i = i1, j = j1}, 
   With[{integrant = Integrant}, 
    Integrate[integrant, {x, a, b}, {y, a, b}]]];
eqns = Flatten@Array[II[##] == 0 &, {n, n}] // Simplify
vars = Flatten@Array[c, {n, n}]
 
Solve[eqns, vars]
u /. %
Остается вопрос как построить поверхность u(x,t) на промежутке {x[a,b], t[a,b]}, чтобы проверить правильность решения.
И не совсем понятно, что получится, если решений системы будет два
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4312 / 2104 / 431
Регистрация: 19.07.2009
Сообщений: 3,200
Записей в блоге: 24
17.10.2014, 23:11
Довольно интересное наблюдение:

Рассмотрим в тех же обозначениях
а именно....
Haskell
1
2
3
4
5
6
7
8
9
10
11
n = 3;
a = 0;
b = 1;
k = 7/10;
u0 = Sin[\[Pi] x] + x;
\[CurlyPhi][i_] = x^i (1 - x);
\[Rho][j_] = t^j (1 - t);
 
u = u0 + Sum[c[i, j] \[CurlyPhi][i] \[Rho][j], {i, 1, n}, {j, 1, n}]
$Assumptions = Element[{c[__], x, t}, Reals] && i > 0 && j > 0 && Element[{i, j}, Integers];
R = D[u, {x, 2}] - D[u, t] + k u (1 - u) // Simplify
интегрант Integrant = Expand[R φ[i] ρ[j]] и попробуем его проинтегрировать двумя способами:
Haskell
1
2
3
4
Short[iiiiii = Integrant /. {i -> 2, j -> 3}]
Timing[Short[iiix = Integrate[iiiiii, {x, 0, 1}], 3]]
Timing[Short[iii = Integrate[iiix, {t, 0, 1}], 3]]
Timing[Short[Integrate[iiiiii, {x, 0, 1}, {t, 0, 1}], 5]]
У меня получается 200с + 53с последовательным интегрированием против 630с двойным. Результат совпадает. Почему лучше интегрировать последовательно, не знаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.10.2014, 23:11
Помогаю со студенческими работами здесь

Трехмерное уравнение диффузии
подскажите, может кто решат в matlab трехмерное уравнение диффузии

Уравнение детерминированной диффузии. Теплопроводность
Доброго времени суток. Нужна помощь в учебной задаче. Необходимо написать программу для работы с численным решением уравнения...

Программа: уравнение диффузии в круге
Очень нужна помощь в написании программы на матлаб. Задача следующая: решить уравнение диффузии в круге. В качестве результата...

Дифференциальное уравнение диффузии газа в частных производных
Здравствуйте. У меня есть уравнение, как я понимаю это дифференциальное уравнение в частных производных. Уравнение описывает диффузию...

Уравнение Колмогорова, слишком мало начальных условий
Подскажите пожалуйста, что в нижеприводящем уравнении я ввожу не так. Спасибо.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru