How can I define an array of symbolic functions?

25 views (last 30 days)
I want to make an array a1(t) a2(t)... an(t).
syms a(t)
creates a symbolic parameter 't' and 'a' which is an unknown function of 't'. I want an array of just this. How do I do that? I want to use this array to solve a system of ODEs using dsolve.

Accepted Answer

Walter Roberson
Walter Roberson on 8 Feb 2020
In MATLAB it not possible to create an array of symbolic functions. If you have even one symbolic function then MATLAB will build a single function that returns an array.
I was looking at this the other day and noticed that diff(a1, x) would produce a function as output but that diff(a1(x), x) would produce an expression. I was wondering whether that made a difference for dsolve purposes and made a mental note to investigate but I did not get around to it yet.
  5 Comments
Akshay Satpute
Akshay Satpute on 26 Apr 2022
i have a function of x
but i have 4 functions of x
and i want to store them like
a = f(x), b = f(x) , c = f(x) ,d =f(x)
these are the functions for 1 st 4 natural frequencies .
and i want to store and use it in for loop so , i ant to store like
delta = [a b c d ];
but i am not able to do that becuse arrays dont alow to store the expressions .
do you have any idea regarding this?
Walter Roberson
Walter Roberson on 26 Apr 2022
You cannot do that with [] for reasons I explained before. Use a cell array instead.

Sign in to comment.

More Answers (1)

Victor
Victor on 24 Apr 2020
I think you can do it with for loop end "execute" command and cell array
  3 Comments
Walter Roberson
Walter Roberson on 24 Apr 2020
Edited: Walter Roberson on 25 Apr 2020
No, that makes f into a vector of expressions, but the user wanted an array of symbolic functions.
Suppose that you had
syms f1(p) f2(p)
f1(p) = sin(p);
f2(p) = cos(p);
f = [f1, f2];
Then if this was an array of functions, then f(1) would be the function f1, symfun(sin(p),p) . But it isn't:
>> f(1)
ans =
[ sin(1), cos(1)]
That did not index, that took the 1 as the input to the functions.
Your suggestion was
syms f1(p) f2(p)
f1(p) = sin(p);
f2(p) = cos(p);
f = [f1(p), f2(p)];
and then
>> f(1)
ans =
sin(p)
At first that looks good, but if you take a closer look, this is the expression sin(p), not a function. The function would output like
>> f1
f1(p) =
sin(p)
Notice that the function form includes the argument p in the = line, but when we used your suggestion it did not say ans(p) = because f(1) is an expression rather than a function.
Sara Linares
Sara Linares on 25 Apr 2020
Thank you very much to both of you! You were really helpful and I really appreciate your time!!

Sign in to comment.

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!