help with bvp4c error
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hello! I am trying to solve a system of four coupled differential equation with two-point boundary conditions. I am getting errors and i am new to this, so i dont understand. Please help me fix it.
function proca_star
clear;
clc;
format long;
infinity = 10;
w=0.817;
x_init=1e-5:0.01:infinity;
global phi_c
for phi_c=[0.394 0.394 0 0]
%solinit = bvpinit(linspace(1e-5,infinity,1000),[1 1 phi_c 0],omega);
solinit = bvpinit(x_init,[1 1 phi_c 0],w);
options = bvpset('stats','on','RelTol',1e-6);
%condition=true;
%while condition
sol = bvp4c(@bsode,@bsbc,solinit,options);
%condition = sol.stats.maxerr >= 1e-5;
%end
r_data = sol.x;
f = sol.y;
% Plotting the results
figure(1)
plot(r_data, f(1,:));
axis([0 infinity 0 1.5]);
title('\sigma vs r')
xlabel('r')
ylabel('\sigma')
figure(2)
plot(r_data, f(2,:));
axis([0 infinity -0.5 1]);
title('f vs r')
xlabel('r')
ylabel('f')
figure(3)
plot(r_data, f(3,:));
axis([0 infinity 0 1]);
title('m vs r')
xlabel('r')
ylabel('m')
figure(4)
plot(r_data, f(4,:));
axis([0 infinity -0.5 1.5]);
title('g vs r')
xlabel('r')
ylabel('g')
end
end
% --------------------------------------------------------------------------
function dfdr = bsode(r, y)
w = 0.817;
N = 1 - 2 * y(3) / r;
dfdr = [4 * pi * r * 0.745 * (y(4)^2 + y(2)^2 / (N^2 * y(1)^2))
w * y(4) - 0.745 * y(1)^2 * N * y(4) / w
4 * pi * r^2 * (((0.745 * y(1)^2 * N^2 * y(4)^2)^2) / (2 * y(1)^2 * w^2) + 0.5 * 0.745 * (y(4)^2 * N + y(2)^2 / (N * y(1)^2)))
r^2 * y(2) * w / (y(1)^2 * N^2) - 2 * y(4)];
end
% --------------------------------------------------------------------------
function res = bsbc(ya, yb)
global phi_c
res = [ya(1) - 0.394
ya(2) - 0.394
ya(3) - 0
ya(4) - 0
yb(1) - 1
yb(2) - 0
yb(3) - 0.745
yb(4) - 0];
end
Here is the error shown:
Error using proca_star>bsode
Too many input arguments.
Error in bvparguments (line 96)
testODE = ode(x1,y1,odeExtras{:});
Error in bvp4c (line 119)
bvparguments(solver_name,ode,bc,solinit,options,varargin);
Error in proca_star (line 22)
sol = bvp4c(@bsode,@bsbc,solinit,options);
0 Kommentare
Antworten (1)
Torsten
am 16 Jul. 2024
Bearbeitet: Torsten
am 16 Jul. 2024
Use
solinit = bvpinit(x_init,[1 1 phi_c 0]);
instead of
solinit = bvpinit(x_init,[1 1 phi_c 0],w);
Why did you use the w-parameter in he call to "bvpinit" ?
And supply only 4 instead of 8 boundary conditions.
6 Kommentare
Torsten
am 17 Jul. 2024
Bearbeitet: Torsten
am 17 Jul. 2024
Initial conditions for "bvp4c" are only used as starting conditions for the solver iterations of the solution. They are not kept constant in any point of the domain and can be far different in the final solution. They are specified in the "guess" function or - if you choose them to be constant - in the call to "bvpinit".
Boundary conditions for "bvp4c" as defined in "bsbc". These are the relevant settings to make the solution unique and are respected during the iteration process and in the final solution.
So I don't understand your wording about initial conditions and surface/boundary conditions. They are always set separately, and only the boundary conditions set are really relevant for the final solution.
Maybe you think about how the shooting methods works: you have to guess 4 initial conditions and correct some of them depending on the end conditions specified. But also with the shooting method, you only specify 4 conditions that have to be fulfilled in the final solution - the other conditions are adequately adjusted.
Siehe auch
Kategorien
Mehr zu Boundary Value Problems finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!