how to increase the run time of the matrix ?
    4 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
Hey ,
I am runnng a code for finding the shorter path , i am able to do it easily for matrix of 37*37 but as I increase its value it start to take lot of time.I tried to preallocate few values in it but not able to do it easily.
I am attaching 2 files for the reference. less_time.m is of 37*37 matrix and more_time.m is of 148*148 matrix.
kindly guide me how to preallocate the values in it so that I can increase the time of the operations
2 comentarios
  Jan
      
      
 el 25 de Mzo. de 2021
				If runtime matters, omit the brute clearing header "clc; clear all; close all". It is useless inside a function, but removes all loaded funtions from the memory. Reloading them from the slow disk is a waste of time.
Respuestas (2)
  Jan
      
      
 el 25 de Mzo. de 2021
        
      Editada: Jan
      
      
 el 25 de Mzo. de 2021
  
      Some standard ideas for improving the runtime:
- sqrt(X) is faster than X^0.5
- The JIT acceleration is more powerful, if you write one command per line. Avoid constructs like this: "mink=k;minl=m;minkl=PLkm;"
- Logical indexing is faster than numerical indexing.
     % Replace:     
     Nonzero=find(PLK); 
     PLKPLK=PLK(Nonzero);
     % by:
     PLKPLK = PLK(PLK ~= 0);
- This works, but the multiplication by 1 is confusing only, most of all in the combination with a lowercase L:
    D = zeros(l*1,l*1);
    % Nicer:
    D = zeros(l, l);  % But I avoid "l" consequently to reduce confusions    
- If you need 1 element only, do not waste time with searching all elements:
    Select=find(Pcum>=rand); 
    to_visit=LJD(Select(1));
    % Faster:
    Select = find(Pcum>=rand, 1); 
    to_visit=LJD(Select);    
- In line 110 I assume you want a vector, not a matrix: "PP=zeros(Len_LJD);" Use PP=zeros(Len_LJD, 1) instead.
- Then you can replace:
            PP=zeros(Len_LJD); 
            for i=1:Len_LJD 
               PP(i)=(Tau(W,LJD(i))^Alpha)*((Eta(LJD(i)))^Beta); 
            end 
            sumpp=sum(PP); 
            PP=PP/sumpp;%Build probability distribution
            Pcum(1)=PP(1); 
            for i=2:Len_LJD 
               Pcum(i)=Pcum(i-1)+PP(i); 
            end 
            Select=find(Pcum>=rand); 
            to_visit=LJD(Select(1));
    % By:
            PP       = Tau(W,LJD).^Alpha .* Eta(LJD).^Beta;
            PP       = PP / sum(PP);
            Pcum     = cumsum(PP);
            Select   = find(Pcum >= rand, 1); 
            to_visit = LJD(Select);
2 comentarios
Ver también
Categorías
				Más información sobre Matrix Indexing en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


