how to make a matrix-function from other matrix-function?
    4 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    reza hamzeh
 el 17 de Dic. de 2019
  
    
    
    
    
    Comentada: reza hamzeh
 el 17 de Dic. de 2019
            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 comentarios
Respuesta aceptada
  Matt J
      
      
 el 17 de Dic. de 2019
        
      Editada: Matt J
      
      
 el 17 de Dic. de 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)
Más respuestas (1)
  Matt J
      
      
 el 17 de Dic. de 2019
        
      Editada: Matt J
      
      
 el 17 de Dic. de 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 comentarios
  Matt J
      
      
 el 17 de Dic. de 2019
				
      Editada: Matt J
      
      
 el 17 de Dic. de 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
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

