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));

 Accepted Answer

Jorg Woehl
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)

3 Comments

Thank you, It worked!!
I have another question: how to plot the solution for some values of "a"? in other words, I want to find some solutions with the parameter "a" that varies, in the same graph
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));

Sign in to comment.

More Answers (0)

Categories

Find more on Argument Definitions in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!