# error on using fplot

65 views (last 30 days)
Lorenzo Mereu on 8 Mar 2021
Commented: Jorg Woehl on 8 Mar 2021
Hi, I'm new on matlab and maybe this could be a silly answer. I solved this fourth order differential equation, but I have some problems with the function "fplot(usol(x))". Could anyone help me? Thank you! That's the code:
syms u(x) d
a=0.1
Du=diff(u,x)
D2u=diff(u,x,2)
D3u=diff(u,x,3)
ode=diff(u,x,4)==-4*(a^4)*u
c1=u(0)==d
c2=D2u(0)==0
c3=D2u(1)==0
c4=D3u(1)==0
conds=[c1 c2 c3 c4]
usol(x)=dsolve(ode,conds)
usol(x)=subs(usol(x))
fplot(usol(x));
-------------------------------
I report also the error:
Error using fplot>singleFplot (line 240)
Input must be a function or functions of a single
variable.
Error in
fplot>@(f)singleFplot(cax,{f},limits,extraOpts,args)
(line 200)
hObj = cellfun(@(f)
singleFplot(cax,{f},limits,extraOpts,args),fn{1},'UniformOutput',false);
Error in fplot>vectorizeFplot (line 200)
hObj = cellfun(@(f)
singleFplot(cax,{f},limits,extraOpts,args),fn{1},'UniformOutput',false);
Error in fplot (line 166)
hObj =
vectorizeFplot(cax,fn,limits,extraOpts,args);
Error in fourhordertravesuoloelastico (line 18)
fplot(usol(x));

Jorg Woehl on 8 Mar 2021
Edited: Jorg Woehl on 8 Mar 2021
Your solution usol contains two symbolic variables, x and d, but fplot can only deal with functions of a single variable. I suppose that you have forgotten to substitute the value for d, which is probably what you were trying to do in the line usol(x)=subs(usol(x)) - otherwise, this line wouldn't do anything.
For example, this works just fine:
d = 0.2
usol = subs(usol)
fplot(usol) Jorg Woehl on 8 Mar 2021
In this case, you could put your code (except for the fplot line) in a function myfun(a) or even myfun(a, dValue), where you supply the needed numerical values. (Note that if want d to remain a symbolic varialbe inside the function, you need to supply its numerical value using another variable dValue).
function usol = myfun(a, dValue)
syms u(x) d
Du = diff(u, x);
...
d = dValue;
usol = subs(usol);
end
Then call your function multiple times to create your plots and add them all to the same graph:
fplot(myfun(0.1, 0.2));
hold on;
fplot(myfun(second_a_value, 0.2));
fplot(myfun(third_a_value, 0.2));