필터 지우기
필터 지우기

how to make a matrix-function from other matrix-function?

조회 수: 1 (최근 30일)
reza hamzeh
reza hamzeh 2019년 12월 17일
댓글: reza hamzeh 2019년 12월 17일
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)

채택된 답변

Matt J
Matt J 2019년 12월 17일
편집: Matt J 2019년 12월 17일
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)

추가 답변 (1개)

Matt J
Matt J 2019년 12월 17일
편집: Matt J 2019년 12월 17일
One way would be to make pa() a nested function,
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
Matt J
Matt J 2019년 12월 17일
reza's answer converted to commented:
is there any other way?
Matt J
Matt J 2019년 12월 17일
편집: Matt J 2019년 12월 17일
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

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Graphics Performance에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by