seth_not@home: matlab

Beitrag lesen

gudn tach!

mit zusammenstueckeln meinte ich, dass ich in einer schleife sowas wie
'A(1:v(1),1:v(2),1:v(3),1:v(4),1:v(5))=1;' basteln wuerde. das geht zwar, ist jedoch sehr lahm in der ausfuehrung und nicht huebsch.

Ja, das ist nun, nachdem ich Dein Problem vollständig erfasst habe, auch mein bisher einziger Ansatz. :/

ich habe es nun, weil ich damit fertig werden wollte, ueber folgenden algorithmus geloest:

% gegeben:
% v, z.b. [2 3 2 2 4 2]
% dims_A = ausdehnungen von A, z.b.  [5 2 6 2 6 3]
dim_A  = length(dims_A); % dimension von A (also auch von v), z.b. 6
size_A = prod(dims_A);   % anzahl der elemente von A
A      = zeros(dims_A);  % erzeuge matrix, setze alles null
ind    = ones(dim_A, 1); % index des ersten elements in der matrix A
for j=1:size_A           % schleife ueber alle matrixkomponenten
  if(ind<=v)             % komponentenweiser vergleich
    A(j) = 1;            % setze ggf. 1
  end
  ind(1) = ind(1)+1;     % naechstes element
  % pruefe, ob uebertrag; uebertrage ggf.
  for k=1:length(ind)    % schleife ueber alle komponenten des index-vektors
    temp_diff = dims_A(k)-ind(k); % pruefe, ob index ueberhaupt existiert
    if(temp_diff<0)      % falls nicht, ist ein uebertrag vorhanden
      ind(k) = 1;        % setze aktuelle komponente des index-vektors zurueck
      if(k<length(ind))  % und uebertrage ueberhang auf naechste komponente
        ind(k+1) = ind(k+1)-temp_diff;
      else
        error('aaah, out of range, das darf noch nedd sein!');
      end
    end
  end
  clear temp_diff;
end

prost
seth