Мне нужно решить два дифференциальных уравнения первого порядка, с одним неизвестным параметром в каждом уравнении (m_0 и m1 - неизвестные параметры), и у меня есть четыре граничных условия. Моя функция для угадывания решения: pinit
:
function pinit = mat4init(z)
pinit = [ 0.65.*cos(z)
0.65.*cos(z) ];
end
У меня также есть функция для граничных условий mat4bc
, где я ставлю граничные условия для первого уравнения (с индексом 1) и после этого для второго уравнение:
function res = mat4bc(pa, pb)
res = [ pa(1,:)-8
pb(1,:)-1
pa(2,:)
pb(2,:) ];
end
Я делаю предположение для неизвестных параметров m0 и m1 со значениями 2 и 1. Вместе с другими значениями в функции matrix4ode
приведены дифференциальные уравнения:
function dpdz = matrix4ode(z, p)
m0 = 2;
m1 = 1;
z = linspace(0,pi,10);
ri = 0.7;
R = ri - z .* (ri - 1);
beta = 1;
dpdz = zeros(2, size(z,2));
dpdz(1,:) = - 32 .* beta .* m0 ./ (R .^ 4 .* p(1,:));
dpdz(2,:) = -( - 8 .* dpdz(1,:) ./ R - dpdz(1,:) .* p(2,:) - 32 .* beta .* m1 ./ R .^ 4 ) ./ p(1,:);
end
И я использую bvpinit
:
solinit = bvpinit(linspace(0,pi,10),@mat4init , [2 1]);
и после этого вызываю bvp4 c с кодом:
m0 = 2;
m1 = 1;
z = linspace(0,pi,10);
ri = 0.7;
R = ri - z .* (ri - 1);
beta = 1;
sol = bvp4c(@matrix4ode,@mat4bc,solinit);
и я получил ошибку:
Error using matrix4ode
Too many input arguments.
Error in bvparguments (line 105)
testODE = ode(x1,y1,odeExtras{:});
Error in bvp4c (line 130)
bvparguments(solver_name,ode,bc,solinit,options,varargin);
Как, если у меня нет дополнительных входных аргументов в функции matrix4ode? Что мне делать? Вот мой код