|
|
| bozena |

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 17.02.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.06.2012, 12:59
Titel: Funktion "tue nichts"
|
 |
Hallo,
ich habe eine generelle Frage, zu den Funktionen. Dazu erkläre ich am besten mein Problem. Ich habe ein M-File geschrieben, indem Werte aus einer Excel-Datei eingelesen werden. Dabei liest Matlab aus zwei Spalten ein. In der einen Spalte gibt es in jeder Zeile Werte. In der anderen Spalte sind einige Zeilen leer. Ich will, dass Matlab die beiden Spalten addiert, ist die eine Zeile leer, so soll er den letzten Wert weiterverwenden. Erst wenn aus der leeren Zeile eine Zeile mit Wert wird, soll er den neuen Wert verwenden. Ich bin aber nicht sicher, ob das überhaupt geht. Ich habe einen Ausschnitt aus diesem Teil genommen, alle Variablen sind definiert und der Code läuft auch, wenn ich die Einschränkung weglasse. B ist die Spalte mit Werten, und S ist die Spalte, mit den leeren Zeilen.
Oder muss ich da anders herangehen?
Danke für die Hilfe!
|
|
|
|
|
|
| Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 11.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.06.2012, 16:24
Titel:
|
 |
Hallo Bozena,
es ist immer eine schlechte Idee innerhalb von For-Schleifen die Schleifenvariable zu
verändern (Zeile mit i=i+1) da sie beim nächsten Durchgang überschrieben wird.
Wenn B und S zwei Spalten sind, was sind dann D_1 und S_1?
Da A(i) bei jedem Durchgang der inneren j-Schleife wieder überschrieben wird, ist
sie überflüssig. Außerdem bricht die innere Schleife immer nach dem ersten Durchlauf
ab, wenn das letzte Element in B (B(end)) ungleich 0 ist.
Wie kann eine Zeile leer sein, wenn S ein Vektor mit Zahlen ist? Ich kenne Deine
Einleseroutine nicht. Werden leere Zeilen als NaN oder 0 geschrieben?
Für den Fall NaN:
Grüße
Sirius
|
|
|
|
| bozena |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 17.02.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.06.2012, 19:05
Titel:
|
 |
Hallo Sirius,
danke für deine Antwort! Ich möchte die Werte natürlich nicht überschreiben, sondern als Ergebnisvektor in eine andere Spalte bei Excel reinschreiben lassen. Ich versuche es daher nochmal, ohne Schleife, wobei mein altes Problem bleibt. C ist eine Konstante. B und S sind gleich lang. S ist jetze ein Vektor, der in unregelmäßigen Abständen eine Wert aufweist und ansonsten Nullen enthält also z.B. S = [1;0;0;0;6;0;0;0;0;7;0;4;0]. Die Berechnung soll so erfolgen, dass sobald S=0 ist, der letzte Wert ungleich Null für die Rechnung genommen werden soll.
So wie der Code jetzt ist, wird für S=0, die Null zur Berechnung genommen, soll sie aber nicht. Gibt es Lösungsansätze?
Grüße, Bozena
|
|
|
|
| Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 11.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.06.2012, 09:56
Titel:
|
 |
Hallo Bozena,
soll die letzte Zeile nicht mit berechnet werden, weil Du length(B) -1 schreibst?
Du kannst vor der Addition alle Nullen in S mit der vorherigen Zahl auffüllen
Grüße
Sirius
|
|
|
|
| bozena |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 17.02.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.06.2012, 08:53
Titel:
|
 |
Hallo Sirius,
die letzte Zeile soll schon mitgerechnet werden. length-1 habe ich nur geschrieben, weil ich zuvor i=i+1 mitgeführt hatte.
Dein Code funktioniert leider nur für die erste und nächste Zeile jeweils. Mein S Vektor sieht z.B. folgendermaßen aus: S=[1;0;0;0;0;0;4;0;0;0;9;0;0;0;0;0;0] nur noch viel länger Also unregelmäßige Anzahl von Nullen, die nacheinanderfolgen und von Zahlenwerten abgewechselt werden. Für meine Berechnung soll solange der letzte Wert verwendet werden, bis der neue Wert kommt. Also nicht mit den Nullen rechnen!
Gibt es eine Möglichkeit?
Vielen Dank für die Hilfe!
|
|
|
|
| Kascho1 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.06.2012, 12:51
Titel:
|
 |
Wieso eine mehr abziehen? Also so wie ich das verstanden habe sollte es so fuktionieren (ist vllt. nicht das eleganteste, aber ein Ansatz)
Gruß, Kascho
|
|
|
|
| bozena |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 17.02.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.06.2012, 13:57
Titel:
|
 |
Hallo Kascho,
deinem Code zufolge läuft es doch so ab: für i=3 ist k(3)=0, also rechnet er k(3)=k(3-1)=k(2)=0! Genau das soll er ja nicht machen. Solange k=0 ist für i=1:4 soll er die 1 nehmen! Ab i=5:9, die 3 usw. (ich habe mich jetzt auf dein Beispiel für k bezogen). Deswegen muss er immer einen mehr abziehen, je weiter er kommt..
Gruß, bozena
|
|
|
|
| Kascho1 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.06.2012, 14:50
Titel:
|
 |
hast du den den code so mal laufen lassen? Wenn er nicht das gewünschte tut, hab ich dein Problem nicht verstanden.
Wenn er auf k(i) zugreift ist einen schleifendurchlauf vorher auf k(i-1) zugriffen wurden und gegenbenfalls überschrieben.
Problem ergibt sich nur, wenn das erste element von k eine 0 ist ....
|
|
|
|
| Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 11.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.06.2012, 17:32
Titel:
|
 |
Hallo bezona,
wie Kascho1 schreibt wird bei jedem Schleifendurchlauf auf k-1 zugegriffen,
das aber sollte S(k-1)==0 sein, im vorherigen Schritt den Wert von S(k-2) bekommen hat,
usw.
Bei meinem Code hat sich ein kleiner Dimensionsfehler eingeschlichen.
sodass die Schleife in Wirklichkeit nur einmal durchlief.
Grüße
Sirius
|
|
|
|
| bozena |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 17.02.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.06.2012, 18:01
Titel:
|
 |
Hi Sirius,
es funktioniert genau so, wie ich es mir gewünscht habe. Vielen Dank!!
Gruß, bozena
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|