Как я могу получить аналитическое решение DAE? - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь запустить код matlab для решения DAE (2 многопараметрических ODE второго порядка, которые связаны с 3 алгебраическими многопараметрическими уравнениями). Код сочетает в себе решить и растворить. Это следовало методу, указанному в:

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

Когда я запускаю его, я получаю пустой вывод.

Code

    function WaterLiquidFilmProfilesAnalytical

syms a b c e f t A B C E F G H K

dEq1 = 'A * D2a + B * D2b + C * D2c = 0';

dEq2 = 'E * D2e - B * D2b - 2 * C * D2c - F * D2f = 0';

    Eq1 = ('G * a = e * b'); 

            Eq2 = str2sym(Eq1);

                [dEq3, initEq3] = TurnEqIntoDEq(Eq2, [G a e b], t, 0);

dEq3_char = SymArray2CharCell(dEq3);
                            initEq3_char = SymArray2CharCell(initEq3);

      Eq4 = ('H * b = e * c'); 

            Eq5 = str2sym(Eq4);

                [dEq4, initEq4] = TurnEqIntoDEq(Eq5, [H b e c], t, 0);

dEq4_char = SymArray2CharCell(dEq4);
                            initEq4_char = SymArray2CharCell(initEq4);

            Eq6 = ('K = e * f'); 

                    Eq7 = str2sym(Eq6);

                [dEq5, initEq5] = TurnEqIntoDEq(Eq7, [K e f], t, 0);

dEq5_char = SymArray2CharCell(dEq5);
                            initEq5_char = SymArray2CharCell(initEq5);

[a, b, c, e, f] = dsolve(dEq1, dEq2, dEq3_char{:},  dEq4_char{:},  dEq5_char{:},'a(0)=0','b(0)=0','c(0)=0','e(0)=0','f(0)=0',initEq3_char{:},initEq4_char{:}, initEq5_char{:},'t')
end

function [D_Eq, initEq] = TurnEqIntoDEq(eq, depVars, indepVar, initialVal)
% eq = equations
% depVars = dependent variables
% indepVar = independent variable
% initialVal = initial value of indepVar

depVarsLong = sym(zeros(size(depVars)));
for k = 1:numel(depVars)
  % Making the variables functions
  % eg. a becomes a(t)
  % This is so that diff(a, t) does not become 0
  depVarsLong(k) = str2sym([char(depVars(k)) '(' char(indepVar) ')']);
end

% Next making the equation in terms of these functions
eqLong = subs(eq, depVars, depVarsLong);

% Now find the ODE corresponding to the equation
D_EqLong = diff(eqLong, indepVar);

% Now replace all the long terms like 'diff(a(t), t)'
% with short terms like 'Da'

D_depVarsShort = sym(zeros(size(depVars)));
for k = 1:numel(depVars)
  D_depVarsShort(k) = str2sym(['D' char(depVars(k))]);
end
% Next make the long names like 'diff(a(t), t)'
D_depVarsLong = diff(depVarsLong, indepVar);
% Finally replace
D_Eq = subs(D_EqLong, D_depVarsLong, D_depVarsShort);

% Finally determine the equation
% governing the initial values
initEq = subs(eqLong, indepVar, initialVal);
end

function cc = SymArray2CharCell(sa)
cc = cell(size(sa));
for k = 1:numel(sa)
  cc{k} = char(sa(k));
end

end

Что я могу сделать, чтобы получить аналитическое решение этих DAE?

С уважением

Dursman

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