how to programme transition matrix with matlab

62 views (last 30 days)
In dynamical system ( two dimensional ) we have transition matrix for a given A0, A1 and A2 ( are all matrices )
how we can programme this matrix with matlab ?

Answers (3)

Image Analyst
Image Analyst on 26 Dec 2020
Edited: Image Analyst on 26 Dec 2020
It looks like they're starting with i and j of zero so you need to skip the first row. Did you try eye() and a simple for loop?
n = 7;
A0 = 1 * rand(n)
A1 = 10 * rand(n)
A2 = 100 * rand(n)
T = eye(n)
for i = 2 : n
for j = 2 : n
T(i, j) = ...
A0 * T(i-1, j-1) + ...
A1 * T(i, j-1) + ...
A2 * T(i-1, j);
end
end
T
Note that it fails because we're taking matrices (the right hand side of the equation) and trying to stuff a matrix into a single element (the element at row i and column j), which you can't do. I think you need to explain it better.
And regarding your tags, what does this have to do with image analysis or processing?
  15 Comments
Image Analyst
Image Analyst on 17 Jan 2021
wassim, yes you CAN ask, and you just did. However you asked in the wrong place. You asked in azertazert's discussion instead of starting your own. Once you start your own, people will be able to tell you why t is not the same length as y, like ask you why you didn't define t as linspace(0, 10, length(y)).
Kent Millard
Kent Millard on 19 Jan 2021
@wassim bidi Hi Wassim. If you're still interested in asking your question, please click the 'Ask' link beneath the blue bar or use this link to start a new question thread. Best - Kent

Sign in to comment.


Walter Roberson
Walter Roberson on 31 Dec 2020
n = 7;
A0 = 1 * rand(n);
A1 = 10 * rand(n);
A2 = 100 * rand(n);
T(1,1:n) = {eye(n)};
T(1:n,1) = {eye(n)};
for i = 2 : n
for j = 2 : n
T{i, j} = ...
A0 * T{i-1, j-1} + ...
A1 * T{i, j-1} + ...
A2 * T{i-1, j};
end
end
T
T = 7x7 cell array
{7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double} {7×7 double}
  32 Comments
Walter Roberson
Walter Roberson on 3 Jan 2021
I was right in my previous concern: you do want to start the powers with 0.
A0 = [-0.1 0 ;0.1 -0.05];
A1 = [-0.01 0.1; 0.1 -0.05];
A2 = [-0.05 0;0.1 -0.01];
maxiter = 25;
x=[0 0]';
B=[0.1 0.1]';
syms t1 t2
alpha = 0.7;
beta = 0.9;
for i = 0 : maxiter
ti = B * ((t1^(i*alpha))/gamma(i*alpha+1));
for j = 0 : maxiter
tb = T(i-1, j-1, A0, A1, A2);
tj = ((t2^(j*beta))/gamma(j*beta+1));
x = x + tb * ti * tj;
end
end
fsurf(x(1), [0 20 0 20])
xlabel('t1')
ylabel('t2')
title('first x')
fsurf(x(2), [0 20 0 20])
xlabel('t1')
ylabel('t2')
title('second x')
function Tij = T(i, j, A0, A1, A2)
persistent tij Z
if isempty(tij);
tij = {eye(size(A0))};
Z = zeros(size(A0));
end
if i < 0 || j < 0
Tij = Z;
elseif i + 1 <= size(tij,1) && j+1 <= size(tij,2) && ~isempty(tij{i+1,j+1})
%i, j, size(tij)
Tij = tij{i+1,j+1};
else
ta0 = T(i-1, j-1, A0, A1, A2);
ta1 = T(i, j-1, A0, A1, A2);
ta2 = T(i-1, j, A0, A1, A2);
Tij = A0 * ta0 + A1 * ta1 + A2 * ta2;
tij{i+1, j+1} = Tij;
end
end
azertazert azertazertazertazert
yes walter you are right about the power should be begin from zero

Sign in to comment.


azertazert azertazertazertazert
Thank' Walter I will wait when you have time to write to me , thank you again
  1 Comment
azertazert azertazertazertazert
Hellow, WALter If You can help me for the last time
I a similar problem that I want how to plot and obtain the same solution that exist :
1-------- the system:
2- The solution is as follow
with T(i,j) is :
fo example
the plot must be :
but I'm havn't this graphIn my plot.
The modified programme is:
function Tij = T(i, j, A1, A2)
persistent tij Z
if isempty(tij);
tij = {eye(size(A1))};
Z = zeros(size(A1));
end
if i < 0 || j < 0
Tij = Z;
elseif i + 1 <= size(tij,1) && j+1 <= size(tij,2) && ~isempty(tij{i+1,j+1})
%i, j, size(tij)
Tij = tij{i+1,j+1};
else
ta1 = T(i, j-1, A1, A2);
ta2 = T(i-1, j, A1, A2);
Tij = A1 * ta1 + A2 * ta2;
tij{i+1, j+1} = Tij;
end
end
clear all
clc
%exmple1
A1 = [-0.1 0; 0.1 -0.05];
A2 = [-0.01 0.1;0.1 -0.05];
maxiter = 25;
x=[0 0]';
%exmple1
B1=[-0.05 0.01]';
B2=[-0.1 -0.1]';
syms t1 t2
alpha = 0.7;
beta = 0.9;
for i = 1 : maxiter
ti = ((t1^(i*alpha))/gamma(i*alpha+1));
ti1 = ((t1^((i+1)*alpha))/gamma((i+1)*alpha+1));
for j = 1 : maxiter
tb1 = T(i, j, A1, A2);
tb2 = T(i-1, j, A1, A2);
tb3 = T(i, j-1, A1, A2);
tj = ((t2^(j*beta))/gamma(j*beta+1));
tj1 = ((t2^((j+1)*beta))/gamma((j+1)*beta+1));
x = x + (-tb1*B1*ti*tj1 -tb1*B2*ti1*tj)+ (tb3*B1+tb2*B2)*ti*tj;
end
end
ezsurf(x(1), [0 20 0 20])
xlabel('t1')
ylabel('t2')
title('first x')

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products


Release

R2015b

Community Treasure Hunt

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

Start Hunting!