Not enough input arguments. Error in odefun (line 2) y1 = y(1); Error in bvp4c (line 5) sol =bvp4c(ode​fun,bcfun,​solinit);

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)

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

Execution of script bvp4c as a function is not supported:
Error in bvp4c (line 5)
sol =bvp4c(@odefun,@bcfun,solinit);
Did you manage to make one of MATLAB's example codes work ?
Did you never use MATLAB examples ?
Type
help bvp4c
Or load the examples directly from the website:
I did my code by those examples only. But still couldn't figure out where it went wrong
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 ?
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.
Where should i use this command
which -all bvp4c ?
Error: File: bp4.m Line: 21 Column: 1
The function "bc" was closed with an 'end', but at least one other function definition was not. To avoid confusion when using
nested functions, it is illegal to use both conventions in the same file.
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);
which -all bvp4c
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
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

Sign in to comment.

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

Products

Release

R2021b

Asked:

on 19 Mar 2022

Answered:

on 17 Dec 2022

Community Treasure Hunt

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

Start Hunting!