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

Speichern in matlab

 

guguli
Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2013, 08:55     Titel: Speichern in matlab
  Antworten mit Zitat      
Hallo zusammen,
ich hab 3 while schleifen, mit denen ich die koordinate eines 3D array immer erhöhe. nun will ich diese Koordinate in speichern, so dass ich sie später in einem 3D plot anzeigen als graph anzeigen kann.

Also das hier ist eine der Schleifen: nur Y koordinate.
Code:

    while(Y_Timer < Y_runTime)
           Y_current = Y_current+1;
           Y_Timer = Y_Timer+ (Y_runTime/ (y - Ytsp));
             if(welt (X_current, Y_current, Z_current) == fleich_value)
                 %errordlg('Break offY','File Error');
                 Y_current = Y_current - 1;
                 Y_Timer = Y_Timer - (Y_runTime/ (y - Ytsp));
                 break;
             end
           
             if(welt (X_current, Y_current, Z_current) == welt(x,y,z))
                   
                    diameterDouble = toolRadius *2;
                    diameterInt = int32(diameterDouble);
                    cuttingDeepthInt = int32(cuttingDeepth);
                    if(diameterInt~= diameterDouble ||cuttingDeepthInt ~= cuttingDeepth)
                        diameterInt = diameterInt +1;
       
                    end
   
                    currentDeepth = 0;
                    if(diameterInt <= YKnochen)
                        dist = (YKnochen - diameterInt)/2;
                        distMittig = dist+1;
                        diameterInt = YKnochen - dist;
                        while(cuttingDeepthInt >= currentDeepth)
                            currentDeepth = currentDeepth+1;
                            knochen (currentDeepth, distMittig:diameterInt, distMittig:diameterInt) = 0;
                        end
                    end
                   
            end
            if(welt (X_current, Y_current, Z_current) ~= fleich_value && welt (X_current, Y_current, Z_current) ~= knochen_Value)
                 welt (X_current, Y_current, Z_current) = 4;
                 
            end
           
    end
 

es gibt auch die selbe schleife für X und Z. wie kann ich nun diese werte so speichern, dass ich die später plotten kann.

THX
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.07.2013, 09:04     Titel:
  Antworten mit Zitat      
hallo guguli
was hast du denn bis jetzt versucht? was hat nicht geklappt wie du wolltest? welche fehler sind aufgetreten ?
die variable Y kann ich in deinem code nicht finden.
Private Nachricht senden Benutzer-Profile anzeigen
 
guguli
Themenstarter

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2013, 10:11     Titel:
  Antworten mit Zitat      
Hi,

Also mit Y meine ich, Y_current Smile.

Ja ich hab das damit versucht.

Code:

index = 1;
while()...

if(welt (X_current, Y_current, Z_current) ~= fleich_value && welt (X_current, Y_current, Z_current) ~= knochen_Value)
                 welt (X_current, Y_current, Z_current) = 4;
                 y-coordinate(index) = Y_current;
                  index = index +1;
            end


 

Error: COde generation requires variable "y-coordinate" to be fully defined before subscripting it
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.07.2013, 10:26     Titel:
  Antworten mit Zitat      
dein code ist leider ohne randdaten nicht lauffähig und ich kann den fehler so nicht nachvollzihen. kannst du ein lauffähiges minimalbeispiel posten das den fehler reproduziert?
p.s.
sonst einfach mal den debugger vor der zeile setzen und die werte im workspace angucken. der debugger hilft in solchen sachen meist weiter.
Private Nachricht senden Benutzer-Profile anzeigen
 
guguli
Themenstarter

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2013, 10:46     Titel:
  Antworten mit Zitat      
Hi,
das ist der vereinfachte lauffähige Code:
Code:

function b = fcn()
    knochen_Value = 1;
    fleich_value = 2;
   welt = zeros(10,10,10);
    Xtsp= 1;
    Ytsp = 1;
    Ztsp = 1;
    welt(Xtsp,Ytsp,Ztsp) = 5;
    % tool current Position
    X_current=Xtsp;
    Y_current=Ytsp;
    Z_current=Ztsp;
    welt (X_current, Y_current, Z_current);
   
     welt(5,4,5) = knochen_Value;
     y = 3;
    Vy = 0.036;
    Y_runTime = (y - Ytsp)/ Vy;
   
    Y_Timer=0;
   
  while(Y_Timer < Y_runTime)
           Y_current = Y_current+1;
           Y_Timer = Y_Timer+ (Y_runTime/ (y - Ytsp));
             
            if(welt (X_current, Y_current, Z_current) ~= fleich_value && welt (X_current, Y_current, Z_current) ~= knochen_Value)
                 welt (X_current, Y_current, Z_current) = 4;
                 
            end
           
  end
   welt (X_current, Y_current, Z_current) = 3;
  b = welt;
 

Abgesehen von released(index)....
iCH muss noch dazusagen, dass ich generiere dies in Simulink mit matlab fcn blok. und mit to workspace blok lade ich es in matlab workspace.
nun will ich alle Y_current werte speichern und dann in workspace anzeigen lassen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.07.2013, 11:01     Titel:
  Antworten mit Zitat      
Code:
knochen_Value = 1;
    fleich_value = 2;
   welt = zeros(10,10,10);
    Xtsp= 1;
    Ytsp = 1;
    Ztsp = 1;
    welt(Xtsp,Ytsp,Ztsp) = 5;
    % tool current Position
    X_current=Xtsp;
    Y_current=Ytsp;
    Z_current=Ztsp;
    welt (X_current, Y_current, Z_current);
   
     welt(5,4,5) = knochen_Value;
     y = 3;
    Vy = 0.036;
    Y_runTime = (y - Ytsp)/ Vy;
   
    Y_Timer=0;
  index = 1;  
  while(Y_Timer < Y_runTime)
           Y_current = Y_current+1;
           Y_Timer = Y_Timer+ (Y_runTime/ (y - Ytsp));
             
            if(welt (X_current, Y_current, Z_current) ~= fleich_value && welt (X_current, Y_current, Z_current) ~= knochen_Value)
                 welt (X_current, Y_current, Z_current) = 4;
              y_coordinate(index)=Y_current;
                  index = index +1;    
            end
           
  end

läuft ohne probleme bei mir durch. was mir aber aufgefallen ist ist das du oben keine gültige matlab syntax für den variablen namen gewählt hast,
Code:
y_coordinate(index)
geht
Code:
y-coordinate(index)
ist kein variablen name sondern eine operatien von y und coordinate(index)
grüße winkow
ps mit simulink hab ich keine erfahrung. da muss dann nochmal wer anders in das thema hier gucken.
Private Nachricht senden Benutzer-Profile anzeigen
 
guguli
Themenstarter

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2013, 11:06     Titel:
  Antworten mit Zitat      
Also du meinst ich soll Y-coordinate schreiben soll für variablen???
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.07.2013, 11:10     Titel:
  Antworten mit Zitat      
guguli hat Folgendes geschrieben:
Also du meinst ich soll Y-coordinate schreiben soll für variablen???
den satz verstehe ich nicht. ich meine blos das "-" also minus nicht im variablen namen seien darf. das ist kein gültiger matlab syntax.
Private Nachricht senden Benutzer-Profile anzeigen
 
guguli
Themenstarter

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2013, 11:17     Titel:
  Antworten mit Zitat      
aso ich hab ja auch kein - sondern _ Smile...

Ichhab das jetzt so versucht:
Code:

function [b,c] = fcn()
    knochen_Value = 1;
    fleich_value = 2;
   welt = zeros(10,10,10);
    Xtsp= 1;
    Ytsp = 1;
    Ztsp = 1;
    welt(Xtsp,Ytsp,Ztsp) = 5;
    % tool current Position
    X_current=Xtsp;
    Y_current=Ytsp;
    Z_current=Ztsp;
    welt (X_current, Y_current, Z_current);
   
     welt(5,4,5) = knochen_Value;
     y = 3;
    Vy = 0.036;
    Y_runTime = (y - Ytsp)/ Vy;
   
    Y_Timer=0;
   index= 1;
 
  while(Y_Timer < Y_runTime)
           Y_current = Y_current+1;
           Y_Timer = Y_Timer+ (Y_runTime/ (y - Ytsp));
              released = zeros(10);
            if(welt (X_current, Y_current, Z_current) ~= fleich_value && welt (X_current, Y_current, Z_current) ~= knochen_Value)
                 welt (X_current, Y_current, Z_current) = 4;
                 released(index) = Y_current;
                 index = index +1;
            end
           
  end
   welt (X_current, Y_current, Z_current) = 3;
   c = released(index);
  b = welt;
 

kirge diese Fehlermeldung:
Variable 'released' is undefined on some execution paths.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.07.2013, 11:26     Titel:
  Antworten mit Zitat      
in dem code oder in deinem richtigem code? kann es sein das die variable release manchmal nicht erzeugt wird da die if bedingung nicht erfüllt ist und dann zur rückgabe nicht bereit steht?
Private Nachricht senden Benutzer-Profile anzeigen
 
guguli
Themenstarter

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2013, 11:44     Titel:
  Antworten mit Zitat      
das kann nicht sein. Die if abfrgae ist immer true. solange die scheife läuft.
Ich hab das jetzt so gemacht:
Code:

function [b,c] = fcn()
    knochen_Value = 1;
    fleich_value = 2;
   welt = zeros(10,10,10);
    Xtsp= 1;
    Ytsp = 1;
    Ztsp = 1;

    % tool current Position
    X_current=Xtsp;
    Y_current=Ytsp;
    Z_current=Ztsp;
    welt (X_current, Y_current, Z_current);
   
     welt(5,4,5) = knochen_Value;
     y = 6;
    Vy = 0.036;
    Y_runTime = (y - Ytsp)/ Vy;
   
    Y_Timer=0;
   index= 1;
  released = zeros(10);
  while(Y_Timer < Y_runTime)
           Y_current = Y_current+1;
           Y_Timer = Y_Timer+ (Y_runTime/ (y - Ytsp));
             
            if(welt (X_current, Y_current, Z_current) ~= fleich_value && welt (X_current, Y_current, Z_current) ~= knochen_Value)
                 welt (X_current, Y_current, Z_current) = 4;
                 released(index) = Y_current;
                 index = index +1;
            end
           
  end
   welt (X_current, Y_current, Z_current) = 3;
   c = released(index);
   b = welt;
 

aber das problem ist dass ich als ergebnis nur Nullen kriege. Sad. ICh vermute die werte von Y_current werden nicht da rein gespeichert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.07.2013, 11:52     Titel:
  Antworten mit Zitat      
guguli hat Folgendes geschrieben:
das kann nicht sein. Die if abfrgae ist immer true. solange die scheife läuft.

ist die if abfrage dann nicht sinnlos ?

normalerweise ist so ein problem ein fall für den debugger.
Private Nachricht senden Benutzer-Profile anzeigen
 
guguli
Themenstarter

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2013, 11:55     Titel:
  Antworten mit Zitat      
das problem ist die if abfrage brauche ich für den richtige Code Smile...
debuggen habe ich schon. Das problem ist dass c = 0 bleibt. also mein released ist schon richtig aber c übernimmt den vector nicht sondern setzt c = 0.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.07.2013, 11:59     Titel:
  Antworten mit Zitat      
das liegt daran das du c nicht release zuweist sondern release(index) und index ist um 1 höher als der letzte gespeicherte wert und damit 0 weil du release als zeros initialisiert hast.
Private Nachricht senden Benutzer-Profile anzeigen
 
guguli
Themenstarter

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2013, 19:10     Titel:
  Antworten mit Zitat      
Hi, danke.

ICh hab jetzt das hier als ergebnis(bild).

nun will ich einen graph zeichen, der mir die strecke anzeigt, die nach der reihe Y, Z, X zurücklegen.
Soll heißen die koordinaten für Y = (0,2,0) ist. usw. dann Z und dann X. wie kann ich auf diese werte nun zugreifen?????
THX

Beispiel.PNG
 Beschreibung:

Download
 Dateiname:  Beispiel.PNG
 Dateigröße:  44.51 KB
 Heruntergeladen:  360 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.