how to make a matrix-function from other matrix-function?
1 view (last 30 days)
Show older comments
hi. i want to plot the function N. every thing work well except the pa-function. in fact i dont know how to make a matrix-function (pa) from the other matrix-function (ro)
in mathematica its easy to do but in matlab i dont know how to do that? is it possible? can you help me plz.
T=1;
Haf = str2func(sprintf('@(%s)%s;','var1','[var1/2 0 0 0;0 -var1/2 var1 0;0 var1 -var1/2 0;0 0 0 var1/2]'));
ro=@(var1) expm(-Haf(var1)/T)/trace(expm(-Haf(var1)/T));
range1=0:0.1:10;
pa =@(var1) [ro(1,1) ro(2,1) ro(1,3) ro(2,3);ro(1,2) ro(2,2) ro(1,4) ro(2,4);
ro(3,1) ro(4,1) ro(3,3) ro(4,3);ro(3,2) ro(4,2) ro(3,4) ro(4,4)];
N = @(var1) 0.5*(sum(abs(eig(pa(var1))))-1);
for k=1:numel(range1)
Nv(k) = N(range1(k));
end
plot(range1,Nv)
0 Comments
Accepted Answer
Matt J
on 17 Dec 2019
Edited: Matt J
on 17 Dec 2019
Here's yet another way, which uses only anonymous functions,
T=1;
Haf = str2func(sprintf('@(%s)%s;','var1','[var1/2 0 0 0;0 -var1/2 var1 0;0 var1 -var1/2 0;0 0 0 var1/2]'));
ro=@(var1) expm(-Haf(var1)/T)/trace(expm(-Haf(var1)/T));
ex=@(r)[r(1,1) r(2,1) r(1,3) r(2,3);r(1,2) r(2,2) r(1,4) r(2,4);
r(3,1) r(4,1) r(3,3) r(4,3);r(3,2) r(4,2) r(3,4) r(4,4)];
pa=@(var1) ex(ro(var1)) ;
N = @(var1) 0.5*(sum(abs(eig(pa(var1))))-1);
range1=0:0.1:10;
for k=1:numel(range1)
Nv(k) = N(range1(k));
end
plot(range1,Nv)
More Answers (1)
Matt J
on 17 Dec 2019
Edited: Matt J
on 17 Dec 2019
function mainFunc
T=1;
Haf = str2func(sprintf('@(%s)%s;','var1','[var1/2 0 0 0;0 -var1/2 var1 0;0 var1 -var1/2 0;0 0 0 var1/2]'));
ro=@(var1) expm(-Haf(var1)/T)/trace(expm(-Haf(var1)/T));
range1=0:0.1:10;
N = @(var1) 0.5*(sum(abs(eig(pa(var1))))-1);
for k=1:numel(range1)
Nv(k) = N(range1(k));
end
plot(range1,Nv)
function out=pa(var1)
r=ro(var1);
out=[r(1,1) r(2,1) r(1,3) r(2,3);r(1,2) r(2,2) r(1,4) r(2,4);
r(3,1) r(4,1) r(3,3) r(4,3);r(3,2) r(4,2) r(3,4) r(4,4)];
end
end
2 Comments
Matt J
on 17 Dec 2019
Edited: Matt J
on 17 Dec 2019
Many others. You could also make it a local function (or put it in a separate mfile), but in that case, you would have to pass ro,
function mainFunc
T=1;
Haf = str2func(sprintf('@(%s)%s;','var1','[var1/2 0 0 0;0 -var1/2 var1 0;0 var1 -var1/2 0;0 0 0 var1/2]'));
ro=@(var1) expm(-Haf(var1)/T)/trace(expm(-Haf(var1)/T));
range1=0:0.1:10;
N = @(var1) 0.5*(sum(abs(eig(pa(var1,ro))))-1);
for k=1:numel(range1)
Nv(k) = N(range1(k));
end
plot(range1,Nv)
end
function out=pa(var1,ro)
r=ro(var1);
out=[r(1,1) r(2,1) r(1,3) r(2,3);r(1,2) r(2,2) r(1,4) r(2,4);
r(3,1) r(4,1) r(3,3) r(4,3);r(3,2) r(4,2) r(3,4) r(4,4)];
end
See Also
Categories
Find more on Graphics Performance in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!