function handle as array

3 Ansichten (letzte 30 Tage)
Wout Laeremans
Wout Laeremans am 2 Dez. 2022
Bearbeitet: Torsten am 2 Dez. 2022
I define a function handle as
P = @(t) mtimes(expm(t.*M),P_initial);
Where P_initial is a 4x1 array and M a 4x4 matrix. This works fine, but now I have a function with for every t a 4x1 answer, for example at t = 0 I get:
P(0)
ans =
0.0000
0.0000
0.0011
0.9988
What I want is to get this first element as a separate function of time, so I want a P_1(t) as a function handle, but I do not know how to do so.
Thanks already! :)

Akzeptierte Antwort

Torsten
Torsten am 2 Dez. 2022
M = rand(4,4);
P_initial = rand(4,1);
P = @(t) mtimes(expm(t.*M),P_initial);
P(0)
g = @(a,x)a(x);
g(P(0),1)
  2 Kommentare
Torsten
Torsten am 2 Dez. 2022
Bearbeitet: Torsten am 2 Dez. 2022
M = rand(4,4);
P_initial = rand(4,1);
P = @(t) mtimes(expm(t.*M),P_initial);
g = @(a,x)a(x);
t = 0:0.01:1;
plot(t,arrayfun(@(t)g(P(t),1),t))

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Davide Masiello
Davide Masiello am 2 Dez. 2022
Bearbeitet: Davide Masiello am 2 Dez. 2022
That's because mtimes(a,b) = a*b, and if a is 4x4 and b is 4x1 than the operation yields a 4x1 array.
I think what you might want to do is
P = @(t) expm(t.*M).*P_initial;
Which will yield a 4x4 matrix where each column is .
But I am not completely sure I interpreted this correctly.
  3 Kommentare
Wout Laeremans
Wout Laeremans am 2 Dez. 2022
Yes, I want the solution of:
The general solution is given by:
Where I call P = [P_O; P_3; P_2; P_1] and M the transition matrix. I know I can also solve this using an ode solver or just define a time array with a small time increment. However I really want P_O(t) as a function handle.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Produkte


Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by