Not enough input arguments. Error in odefun (line 2) y1 = y(1); Error in bvp4c (line 5) sol =bvp4c(odefun,bcfun,solinit);
Show older comments
function dydx = odefun(y,x) % equation to solve
y1 = y(1);
y2= y(2);
dy1_dx = y(2);
dy2_dx = [U*y2+K*y1/D];
dy_dx = [dy_dx; dy2_dx];
end
function bcfun=bvp_bc(ya,yb)
bc=[ya(1)-3*yb(1)-2];
guess =[2;1];
xmesh = linspace(0,1,5);
solinit = bvpinit(xmesh,guess);
sol =bvp4c(odefun,bcfun,solinit);
plot(sol.x,sol.y(1,:),'--o');
title('chlorine decay')
xlabel('pipe length(m)');
ylabel('Concentration (mg/L)');
function dydx = ode(x,y)
D=0.1; % m2/s
U=1; % m/s
K = 1*10^-6; % 1/s
dydx = [y(2)*(U*y(2)+K*y(1))/D];
end
function res = bc(ya,yb)
res = [ya(1)-3 yb(1)-2];
end
I need to plot C vs x using Matlab's BVP4C
Answers (2)
Walter Roberson
on 19 Mar 2022
0 votes
As we told you in one of your other questions, the first two parameters to bvp4c need to be function handles, not function names. As in bvp4c(@odefun, @bcfun, solinit)
10 Comments
Naveen Krish
on 19 Mar 2022
Torsten
on 19 Mar 2022
Did you manage to make one of MATLAB's example codes work ?
Naveen Krish
on 19 Mar 2022
Did you never use MATLAB examples ?
Type
help bvp4c
Or load the examples directly from the website:
Naveen Krish
on 19 Mar 2022
Torsten
on 19 Mar 2022
So, this is the first example from the MATLAB website:
xmesh = linspace(0,pi/2,5);
solinit = bvpinit(xmesh, @guess);
sol = bvp4c(@bvpfcn, @bcfcn, solinit);
plot(sol.x, sol.y, '-o')
function dydx = bvpfcn(x,y)
dydx = zeros(2,1);
dydx = [y(2)
-y(1)];
end
function res = bcfcn(ya,yb)
res = [ya(1)
yb(1)-2];
end
function g = guess(x)
g = [sin(x)
cos(x)];
end
Does it work on your PC ?
Walter Roberson
on 19 Mar 2022
Execution of script bvp4c as a function is not supported:
Error in bvp4c (line 5)
You named your own code bvp4c which is exactly what we have been saying you must not do.
You need to rename your bvp4c.m to something else like find_bv.m
I asked you repeatedly to show us the output of
which -all bvp4c
but you never did. If you had shown us that output when we first asked for it, the problem would have been solved many hours ago.
Naveen Krish
on 19 Mar 2022
Naveen Krish
on 19 Mar 2022
Edited: Walter Roberson
on 21 Mar 2022
Walter Roberson
on 21 Mar 2022
guess =[2;1];
xmesh = linspace(0,1,5);
solinit = bvpinit(xmesh,guess);
sol = bvp4c(@odefun,@bcfun,solinit);
plot(sol.x,sol.y(1,:),'--o');
title('chlorine decay')
xlabel('pipe length(m)');
ylabel('Concentration (mg/L)');
function dydx = odefun(y,x) % equation to solve
y1 = y(1);
y2= y(2);
dy1_dx = y(2);
dy2_dx = [U*y2+K*y1/D];
dy_dx = [dy_dx; dy2_dx];
end
function res = bcfun(ya,yb)
res = [ya(1)-3
yb(1)-2];
end
MOSLI KARIM
on 17 Dec 2022
function ANSWER_MATHWORKII
D=0.1; % m2/s
U=1; % m/s
K = 1*10^-6;% equation to solve
guess =[2;1];
xmesh = linspace(0,1,5);
solinit = bvpinit(xmesh,guess);
sol =bvp4c(@fct,@bc,solinit);
plot(sol.x,sol.y(1,:),'--o');
title('chlorine decay')
xlabel('pipe length(m)');
ylabel('Concentration (mg/L)');
% dydx = [y(2) ; U*y(2)+(K*y(1))/D];
function yp=fct(x,y)
yp=[y(2);U*y(2)+(K*y(1))/D ];
end
function res = bc(ya,yb)
res = [ya(1)-3 ;yb(1)-2];
end
end
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!