Solving bvp using shooting method to solve coupled first order odes
10 views (last 30 days)
Show older comments
I was initially trying using python but cant solve using matlab. please help me out. I have attached a sample code and the equations and boundary conditions i need to use to plot mass-radius plot for one star.
scaled equations: dadr1 = (1/2) * a * ((1 - a**2)/r1 + 4 * np.pi * G * r1 *
(psi0_1**2 * a**2 * (1 + 1 / alpha1**2)/(4*np.pi*G) + phi**2))
dalphadr1 = (alpha1/2) * (((a**2 - 1)/r1 + 4 * np.pi * G * r1 *
(psi0_1**2 * a**2 * (1 / alpha1**2 - 1)/(4*np.pi*G) + phi**2)))
dpsidr1 = phi
dphidr1 = -(1 + a**2 - r1**2 * psi0_1**2 * a**2) * (phi/r1) - \
(1 / alpha1**2 - 1)/(4*np.pi*G)**0.5 * psi0_1 * a**2
boundary conditions:ya[0] - 1, # a(0) = 1
ya[1] - 1/omega, # alpha(0) = 1 scaled
ya[2] - phi_c/(4*np.pi*G)**(1/2), # psi0(0) = phi_c scaled
yb[2] - 0, # Allow psi0(inf) to be close to zero, but not exact
yb[3] - 0
onestar2()
%Program to calculate the inital data
%Considering a spherically symmetric scalar field
%\psi(t,r)=\psi_0(r)exp(i\omega t)
%Line element in polar-areal gauge
%ds^2=-\alpha(r)^2 dt^2+A(r)^2 dr^2+r^2d\Omega^2
function onestar2
clear;
clc;
format long;
infinity = 15;
omega=0.50;
x_init=1e-5:0.01:infinity;
global phi_c
for phi_c=[0.07 0.04 0.02 0.01]
%solinit = bvpinit(linspace(1e-5,infinity,1000),[1 1 phi_c 0],omega);
solinit = bvpinit(x_init,[1 1 phi_c 0],omega);
options = bvpset('stats','on','RelTol',1e-6);
%condition=true;
%while condition
sol = bvp5c(@bsode,@bsbc,solinit,options);
%condition = sol.stats.maxerr >= 1e-5;
%end
r_data = sol.x;
f = sol.y;
i=1;
while (f(3,i)>1e-5)
i=i+1;
end
r_data = r_data(1:i);
%Calculating ADM Mass
A1=f(1,1:i);
mass=(r_data./2).*(1-A1.^(-2));
%Scaling alpha and omega
al_last = 1./f(2,i);
al_calc = al_last.*f(2,1:i);
omega_f = al_last*sol.parameters;
fprintf('\n');
fprintf('The parameter is %7.3f \n',...
sol.parameters)
fprintf('The final omega value is %7.3f \n',...
omega_f)
hold on;
figure(1)
plot(r_data,mass);
axis([0 infinity 0 0.7]);
title('Mass')
xlabel('r')
ylabel('M')
legend('0.07', '0.04', '0.02', '0.01')
hold on;
figure(2)
plot(r_data,al_calc);
axis([0 infinity 0.7 1.1]);
title('Lapse')
xlabel('r')
ylabel('\alpha')
legend('0.07', '0.04', '0.02', '0.01')
hold on;
figure(3)
plot(r_data,f(3,1:i));
axis([0 infinity 0 0.1]);
title('ScalarField')
xlabel('r')
ylabel('\Psi_0')
legend('0.07', '0.04', '0.02', '0.01')
hold off
% figure(4)
% plot(r_data,f(4,:));
% axis([0 infinity 0 2]);
% title('FieldDerivative')
% xlabel('r')
% ylabel('Q')
end
end
% --------------------------------------------------------------------------
%Function to decalre the complete set of differential equations
%y=[y(1),y(2),y(3),y(4)]=[A,alpha,psi_0,Q]
%V=1/2 m^2 \psi\psi* (free field term)
%dV/d\psi=1/2 m^2 \psi*
function dfdr = bsode(r,y,p)
m = 1;
%omega = 0.97;
dfdr = [ (1/2)*((y(1)/r)*(1-y(1)^2)+4*pi*r*y(1)*(y(3)^2*y(1)^2*(m^2+p(1)^2/y(2)^2)+y(4)^2))
(y(2)/2)*((y(1)^2-1)/r+4*pi*r*(y(3)^2*y(1)^2*(p(1)^2/y(2)^2-m^2)+y(4)^2))
y(4)
-(1+y(1)^2-4*pi*r^2*y(3)^2*y(1)^2*m^2)*(y(4)/r)-(p(1)^2/y(2)^2-m^2)*y(3)*y(1)^2];
% --------------------------------------------------------------------------
%Function file for declaring the boundary conditions
%Regularity at origin : A(0)=1, \psi_0(0)=\psi_c, Q(0)=0
%Asymptotic flat condition: A(r->\inf)=1, \alpha(r->inf)=1, \psi_0(r->inf)=0
end
function res = bsbc(ya,yb,p)
global phi_c
res = [ya(1)-1 %fixed
%yb(1)-1
ya(2)-1 %fixed
%yb(2)-1
ya(3)-phi_c %fixed
yb(3) %fixed
ya(4) ]; %fixed
end
6 Comments
Torsten
on 4 Sep 2024
Edited: Torsten
on 4 Sep 2024
I removed the syntax errors, but MATLAB is not able to solve your equations (see above).
Since you fixed the values of all variables at x = 0, you should try an initial-value solver like ode45 to see what you get for different values of p. But I doubt that fixing all variables at x = 0 is the correct choice of the boundary conditions because it seems you have a singular point there.
Answers (0)
See Also
Categories
Find more on Boundary Value Problems in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!