Ich versuche bvp4c zu verwenden, um ein System von 4 odes zu lösen. Das Problem ist, dass eine der Grenzen unbekannt ist.BVP4c für unbekannte Grenze lösen
Kann bvp4c damit umgehen? In meinem Code L ist das Unbekannte, für das ich mich löse.
Ich erhalte eine Fehlermeldung, die unten gedruckt wird.
function mat4bvp
L = 8;
solinit = bvpinit(linspace(0,L,100),@mat4init);
sol = bvp4c(@mat4ode,@mat4bc,solinit);
sint = linspace(0,L);
Sxint = deval(sol,sint);
end
% ------------------------------------------------------------
function dtdpdxdy = mat4ode(s,y,L)
Lambda = 0.3536;
dtdpdxdy = [y(2)
-sin(y(1)) + Lambda*(L-s)*cos(y(1))
cos(y(1))
sin(y(1))];
end
% ------------------------------------------------------------
function res = mat4bc(ya,yb,L)
res = [ ya(1)
ya(2)
ya(3)
ya(4)
yb(1)];
end
% ------------------------------------------------------------
function yinit = mat4init(s)
yinit = [ cos(s)
0
0
0
];
end
Leider bekomme ich die folgende Fehlermeldung;
>> mat4bvp
Not enough input arguments.
Error in mat4bvp>mat4ode (line 13)
-sin(y(1)) + Lambda*(L-s)*cos(y(1))
Error in bvparguments (line 105)
testODE = ode(x1,y1,odeExtras{:});
Error in bvp4c (line 130)
bvparguments(solver_name,ode,bc,solinit,options,varargin);
Error in mat4bvp (line 4)
sol = bvp4c(@mat4ode,@mat4bc,solinit);
So ist der erste Trick war sehr nützlich. Ich habe das getan, und ich glaube, dass ich auch den zweiten Trick umgesetzt habe. Es besteht immer noch darauf, dass es nicht genügend Eingabeargumente gibt. – user3532764