Dear all,
I wanted to solve this two set of non-linear ODE using matlab :
are constant
The boundary conditions are the following :
and at
and at ( ν is an arbitrary constant < 1)
this the code that I constracted so far
function bvp4c_mathworks
rspan = [0.01 1];
init = zeros(1,4);
solinit = bvpinit(rspan,init);
sol = bvp4c(@ode4,@bc4,solinit);
eta = sol.x;
theta = sol.y(1,:);
Sr = sol.y(2,:);
plot(eta,theta)
hold on
plot(eta,Sr,'r')
hold off
legend('Nr(r)','\beta(r)')
end
function du = ode4(eta,u)
theta = u(1);
Sr = u(2); % beta
dtheta = u(3); % d(theta)/dr
dSr = u(4); % d(Sr)/dr
lambda =15.94;
P=12; %P=F*a/D; F is the applied force ; a radius of the membrane ; D = E*h^3/12(1-nu^2)
alpha = 3; %alpha =C*a^2/D ; C in-plane stifnnes
du(1) = dtheta;
du(2) = dSr;
du(3) = (P/(2*pi*eta)-(1/eta)*dtheta+(1/eta^2+lambda^2+Sr));
du(4) = (alpha*theta^2/(2*eta^2)+3/eta*dSr);
du(4) = du(4)/eta;
end
function res = bc4(u0, ur)
res = [ur(1)-0
ur(2)-0
ur(3)-0
u0(2)-0];
end

2 comentarios

Torsten
Torsten el 4 de Jul. de 2019
du(3) and du(4) and your boundary conditions do not correspond to your mathematical equations.
zakaria azdad
zakaria azdad el 4 de Jul. de 2019
I put theta= u(3) than du(3) = d²theta, probably I am wrong, could you give a suggestion to fix the bugg? and how could you modify the boundary conditions.
thanks

Iniciar sesión para comentar.

 Respuesta aceptada

Torsten
Torsten el 4 de Jul. de 2019
Editada: Torsten el 4 de Jul. de 2019

1 voto

function du = ode4(eta,u)
theta = u(1);
Sr = u(2); % beta
dtheta = u(3); % d(theta)/dr
dSr = u(4); % d(Sr)/dr
lambda = 15.94;
P=12; %P=F*a/D; F is the applied force ; a radius of the membrane ; D = E*h^3/12(1-nu^2)
alpha = 3; %alpha =C*a^2/D ; C in-plane stifnnes
du = zeros(4,1);
du(1) = dtheta;
du(2) = dSr;
du(3) = P/(2*pi*eta)- 1/eta*dtheta + theta*(1/eta^2+lambda^2+Sr);
du(4) = -alpha*theta^2/(2*eta^2) - 3/eta*dSr;
end
function res = bc4(ul,ur)
nu = 0.1;
res = zeros(4,1);
res(1) = ul(1);
res(2) = ur(1);
res(3) = ul(4);
res(4) = ur(4)+(1-nu)*ur(2);
end

9 comentarios

zakaria azdad
zakaria azdad el 6 de Jul. de 2019
Editada: zakaria azdad el 6 de Jul. de 2019
I wanted to solve for different value of P and store the output of theta and Sr for each value of P.
function du = ode4(eta,u)
theta = u(1);
Sr = u(2); % beta
dtheta = u(3); % d(theta)/dr
dSr = u(4); % d(Sr)/dr
lambda = 15.94;
P=linspace(1e-3,1e3,1e4); %P=F*a/D; F is the applied force ; a radius of the membrane ; D = E*h^3/12(1-nu^2)
alpha = 3; %alpha =C*a^2/D ; C in-plane stifnnes
for i=1:length(P)
du = zeros(4,i);
du(1,i) = dtheta;
du(2,i) = dSr;
du(3,i) = P(i)/(2*pi*eta)- 1/eta*dtheta + theta*(1/eta^2+lambda^2+Sr);
du(4,i) = -alpha*theta^2/(2*eta^2) - 3/eta*dSr;
end
end
Than define so is there a guide how to do it?
Torsten
Torsten el 8 de Jul. de 2019
The loop over P must be in the main program "bvp4c_mathworks", not in ode4.
To obtain w, introduce a third differential equation
dw/dr = theta
with initial condition
w(0) = 0
function bvp4c_mathworks
rspan = [0.01 1];
init = zeros(1,5);
solinit = bvpinit(rspan,init);
P = linspace(1e-3,1e3,1e4);
for i=1:numel(P)
sol{i} = bvp4c(@(eta,u)ode4(eta,u,P(i),@bc4,solinit);
end
end
function du = ode4(eta,u,P)
theta = u(1);
Sr = u(2); % beta
dtheta = u(3); % d(theta)/dr
dSr = u(4); % d(Sr)/dr
lambda = 15.94;
alpha = 3; %alpha =C*a^2/D ; C in-plane stifnnes
du = zeros(5,1);
du(1) = dtheta;
du(2) = dSr;
du(3) = P/(2*pi*eta)- 1/eta*dtheta + theta*(1/eta^2+lambda^2+Sr);
du(4) = -alpha*theta^2/(2*eta^2) - 3/eta*dSr;
du(5) = theta;
end
function res = bc4(ul,ur)
nu = 0.1;
res = zeros(5,1);
res(1) = ul(1);
res(2) = ur(1);
res(3) = ul(4);
res(4) = ur(4)+(1-nu)*ur(2);
res(5) = ul(5)
end
Best wishes
Torsten.
zakaria azdad
zakaria azdad el 8 de Jul. de 2019
Editada: zakaria azdad el 8 de Jul. de 2019
Thank you for your suggestions!!
I have modified the function so I can be able to plot different quantities in this way.
rspan = linspace(0.01,1,100);
init = zeros(1,5);
solinit = bvpinit(rspan,init);
P = linspace(10,50,100);
for i=1:numel(P)
sol{i} = bvp4c(@(eta,u)ode4(eta,u,P(i)),@bc4,solinit);
eta{i} = sol{i}.x;
theta{i} = sol{i}.y(1,:);
Sr{i} = sol{i}.y(2,:);
W{i} =sol{i}.y(5,:);
plot(eta{1,i},P(i))
hold on
end
I tried to plot as a functionof P(i) but it doesn't work. do you see a an issue there?
I noticed that eta, theta and Sr have a structure of 1x100 cell and each cell have 45 colum. When I try to plot(w,P) it tells me that Vectors must be the same length.
However, when I change P = linspace(10,50,45); it works. How can I solve this issue?
Torsten
Torsten el 8 de Jul. de 2019
rspan = linspace(0.01,1,100);
init = zeros(1,5);
solinit = bvpinit(rspan,init);
P = linspace(10,50,100);
theta = zeros(numel(P),numel(rspan));
Sr = zeros(numel(P),numel(rspan));
w = zeros(numel(P));
for i=1:numel(P)
sol = bvp4c(@(eta,u)ode4(eta,u,P(i)),@bc4,solinit);
theta(i,:) = deval(sol,rspan,1);
Sr(i,:) = deval(sol,rspan,2);
w(i) = deval(sol,rspan(end),5);
end
plot(P,w)
zakaria azdad
zakaria azdad el 8 de Jul. de 2019
I am bit lost.
Using your last suggestion, i can't determine eta vs theta. When I put eta =dval(sol,rspan) and than I plot etaVs theta, I get something different from using eta =sol.x and theta= sol.y(1,:) ?
can you clarify this issue?
thanks in advance.
Torsten
Torsten el 9 de Jul. de 2019
Editada: Torsten el 9 de Jul. de 2019
The theta for which P-value do you want to plot against eta ? For all of them ?
Then just use
plot(rspan,theta)
after the for-loop.
Hi, thaks a lot!!
Finaly I have the code put together. However, I get a warning message "Unable to meet the tolerance without using more than 2000 mesh points." eventhough my rspan is
rspan = linspace(0.001,1,5000);
I played arround with vlues and it just didn't converged.
This happened when a large value (E+7) of α are entred.
Any suggestions?
Torsten
Torsten el 9 de Jul. de 2019
Yes, use the solution of a converging run as initial guess for a subsequent run.
But you will have to do this on your own now because it's time to start learning MATLAB.
zakaria azdad
zakaria azdad el 9 de Jul. de 2019
Any hint where to start?

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Programming en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 4 de Jul. de 2019

Comentada:

el 9 de Jul. de 2019

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by