function handle as array

9 ビュー (過去 30 日間)
Wout Laeremans
Wout Laeremans 2022 年 12 月 2 日
編集済み: Torsten 2022 年 12 月 2 日
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! :)

採用された回答

Torsten
Torsten 2022 年 12 月 2 日
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 件のコメント
Wout Laeremans
Wout Laeremans 2022 年 12 月 2 日
Hi Torsten, this comes close to what I want thank you! Do you also know how I can plot g(P(t),1) for a general t?
Torsten
Torsten 2022 年 12 月 2 日
編集済み: Torsten 2022 年 12 月 2 日
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))

サインインしてコメントする。

その他の回答 (1 件)

Davide Masiello
Davide Masiello 2022 年 12 月 2 日
編集済み: Davide Masiello 2022 年 12 月 2 日
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 件のコメント
Davide Masiello
Davide Masiello 2022 年 12 月 2 日
編集済み: Davide Masiello 2022 年 12 月 2 日
you can define a cell array of functions
M = rand(4,4);
P_initial = rand(1,4);
for i = 1:length(M)
P{i} = @(t)mtimes(expm(t.*M),P_initial);
end
P
P = 1×4 cell array
{@(t)mtimes(expm(t.*M),P_initial)} {@(t)mtimes(expm(t.*M),P_initial)} {@(t)mtimes(expm(t.*M),P_initial)} {@(t)mtimes(expm(t.*M),P_initial)}
With your formulation, however, they are all the same.
Are you sure you must use expm and mtimes?
I think the problem might be ill-posed in that aspect.
Wout Laeremans
Wout Laeremans 2022 年 12 月 2 日
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.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by