WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Matrix unterteilen

 

Lopikalurst
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 03.12.09
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 03.12.2009, 19:39     Titel: Matrix unterteilen
  Antworten mit Zitat      
ich möchte eine funktion schreiben die eine matrix in nummerierte submatritzen aufteilt. also z.b.

A =

1 7
2 8
3 9
4 10
5 11
6 12

drei teile

B1 =

1 7
2 8

B2 =

3 9
4 10

B3 =

5 11
6 12


das problem ist dass ich nicht draufkomme wie ich die variablennamen richtig zuweise. d.h. dass ich eine funktion (ich nenne sie mal partition) habe die mir mit der eingabe [B]=partition(A,3) das oben genannte ergebnis liefert


bis jetzt sieht das ganze so aus:


function [namedervariable]=partition(X,n)
% X - Matrix
% n - Anzahl Segmente

% Länge der Segmente bestimmen
ls=floor(size(X,1)/n);

% Zählvariable initiieren
z=0;

for i=1:n
namedervariabe_i=X((z+1)Sadz+ls),1:size(X,2)));
z=z+ls;
end


ich weiß nur leider nicht wie ich matlab dazu bringen soll den namen der variable zu nehmen und daraus dann durchnummerierte variablen in den workspace rauzugeben also z.b. bei variablenname A und n segmenten --> A1, A2, ... An
Private Nachricht senden Benutzer-Profile anzeigen


Jan*
Forum-Century

Forum-Century


Beiträge: 178
Anmeldedatum: 06.11.09
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 04.12.2009, 10:46     Titel:
  Antworten mit Zitat      
Der Befehl den du suchst lautet eval. Damit kannst du Befehle ausführen, die in Strings stehen. D.h. du musst die Nummer deiner neuen Variable per int2str in einen String wandeln, und dir dann entsprechend den Zuweisungsbefehl in einen String schreiben und per eval ausführen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lopikalurst
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 03.12.09
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 06.12.2009, 13:37     Titel:
  Antworten mit Zitat      
hmm irgendwie bekomm ich das nicht hin

die funktion läuft zwar und zeigt im command window auch brav an dass variablen erstellt werden, das problem ist dass im workspace nix gespeichert wird...

funktion:
Code:
function partition(X,n)
% X - Matrix
% n - Anzahl Segmente

% Länge der Segmente bestimmen
    ls=floor(size(X,1)/n);

% Zählvariable initiieren
    z=0;

for i=1:n
    a=X((z+1):(z+ls),1:size(X,2));        % Teil der Matrix X herausnehmen
    eval(['X' int2str(i) '= a']);
    z=z+ls;
end



befehl + ergebins:
Code:
A=(1:10)'
>> partition(A,2)

X1 =

     1
     2
     3
     4
     5


X2 =

     6
     7
     8
     9
    10


sieht wunderbar aus, nur dass eben nix gespeichert wird, was irgendwie am zweck vorbeigeht
habs dann mal mit assign probiert, aber das läuft nicht


funktion:
Code:
function partition(X,n)
% X - Matrix
% n - Anzahl Segmente

% Länge der Segmente bestimmen
    ls=floor(size(X,1)/n);

% Zählvariable initiieren
    z=0;
    ws='base';

for i=1:n
    a=X((z+1):(z+ls),1:size(X,2));                   % Segment der Matrix X herausnehmen
    eval(['assignin(ws,' 'X_' int2str(i) ',a)']);    % Wert im Workspace zuweisen
    z=z+ls;                                          % Startpunkt für nächstes Segment
end



befehl + ergebnis:

Code:
>> partition(A,2)
??? Error using ==> eval
Undefined function or variable 'X_1'.

Error in ==> partition at 14
    eval(['assignin(ws,' 'X_' int2str(i) ',a)']);    % Wert im Workspace zuweisen
Private Nachricht senden Benutzer-Profile anzeigen
 
Lopikalurst
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 03.12.09
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 06.12.2009, 17:52     Titel:
  Antworten mit Zitat      
ok, problem gelöst, evtl. nicht elegant aber es geht

Code:
function partition(X,n)
% X - Matrix
% n - Anzahl Segmente

% Länge der Segmente bestimmen
    ls=floor(size(X,1)/n);

% Zählvariable initiieren
    z=0;

for i=1:n
    a=X((z+1):(z+ls),1:size(X,2));     % Segment der Matrix X herausnehmen
    b=['x_' int2str(i)];               % Variablenname erstellen
    assignin('base',b,a);              % Wert im Workspace zuweisen
    z=z+ls;                            % Startpunkt für nächstes Segment
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.