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

Gradientenbildung unter bestimmten Vorraussetzungen

 

Windstaerke13
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 06.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2012, 22:02     Titel: Gradientenbildung unter bestimmten Vorraussetzungen
  Antworten mit Zitat      
Hey Leute,

ich habe mich in letzter Zeit mal ein wenig mit Matlab beschäftigt, aber stehe nun for einem Problem:
Unten findet ihr ein Programm, welches mir unterschiedliche Positionen einer Messfühlerplatte plottet, die sich dreht.

Nun habe eine Matrix (A) 5x8. In der Spalte stehen 5 Messergebnisse einer Messung. Insgesamt 8 Messungen.
Ich will über den Gradienten Befehl Spalte für Spalte einzeln auswerten & auf die messpunkte übertragen.

Sprich meine erste Spalte in Matrix A , soll in dem unten beschriebenen Programm in einer durchgezogenen Punktlinie eingetragen werden ( von links nach rechts).
Meine zweite Spalte der Matrix A soll nun auf der nächsten durchgezogenen Punktlinie eingetragen werden. Und diese eintragung soll mithilfe des Gradientenbefehls erfolgen.
Hat vlt jemand von euch eine Idee wie man den gradienten der ersten Spalte der Matrix berechnet und auf die erste durchgezogene Punktlinie übertragen kann?
mfg jan

Code:
Messfuehler = 5
Messplattenlaenge = 20

q = 2*floor(Messfuehler/2);     % q ist Anzahl der Messungen
t = 0:2*pi/q:2*pi;                    %Definiere koordinaten für Winkel
abs = 1/(s-1);                         %Abstand Messfuehler
x=cos(t)
y=sin(t)

X = abs/2.*x;                         %Definition von Vektor mit koordinaten
                                             % für alle Kreise
Y = abs/2.*y;

for i:0:s/2-1
X = [X(abs/2+i*abs).*x);
Y = [Y(abs/2+i*abs).*y);
end

plot(X,Y,'.k','MarkerSize',5)
axis equal


[EDITED, Jan S, Bitte Code-Formatierung verwenden - Danke]
Private Nachricht senden Benutzer-Profile anzeigen


Windstaerke13
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 06.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2012, 22:05     Titel:
  Antworten mit Zitat      
Achja...Am Ende will ich quasi ein Bild haben, wie mein Programm es mir anzeigt. Aber anstatt der einzelnen Punkte sollen es Vektorden an genau diesen Stellen sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
verbesserung

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2012, 23:00     Titel: blub
  Antworten mit Zitat      
Habe ein Fehler beim schreiben gemacht.hier die verbesserte version

Code:
Messfuehler = 5
Messplattenlaenge = 20

q = 2*floor(Messfuehler/2); % q ist Anzahl der Messungen
t = 0:2*pi/q:2*pi; %Definiere koordinaten für Winkel
abs = 1/(s-1); %Abstand Messfuehler
x=cos(t)
y=sin(t)

X = abs/2.*x; %Definition von Vektor mit koordinaten
% für alle Kreise
Y = abs/2.*y;

for i:0:Messfuehler/2-1
X = [X(abs/2+i*abs).*x);
Y = [Y(abs/2+i*abs).*y);
end

plot(X,Y,'.k','MarkerSize',5)
axis equal


[Bitte code-Umgebung benutzen - Danke! Jan]
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 10.09.2012, 10:51     Titel: Re: blub
  Antworten mit Zitat      
Hallo,

Der gepostete Code läuft nicht, da er keine valide Matlab-Syntax hat.
Code:
abs = 1/(s-1); % Vorsicht! Nicht die built-in Funktion ABS() überschreiben!

% Error:
for i:0:Messfuehler/2-1
% Vielleicht meinst Du:
for i = 0:Messfuehler/2-1

% Error:
X = [X(abs/2+i*abs).*x);
Y = [Y(abs/2+i*abs).*y);
% Hier wird X überschrieben und die schließende eckige Klammer fehlt

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Windstaerke12

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2012, 18:44     Titel:
  Antworten mit Zitat      
Hallo
So habe nochmal geschaut, der Fehler sollte nun draußen sein

Code:
function CirclePlot(s,k)

l = 155;       %Länge
s = 30         %Anzahl Sensoren
k = 100        %messungen rund um den kreis
abstand = 4.8      %abstand zwischen 2 Sensoren

% Zuerst definiere ich die Koordinaten fuer die Winkel
t = 0:2*pi/k:2*pi;

% Nun die Koordinaten auf einem Kreis mit Radius 1 mit Parametrisieren durch (cos(t),sin(t))
% fuer 0<=t<=2*pi)
x = cos(t);
y = sin(t);
% Definition eines (langen) Vektor mit den Koordinaten
% fuer alle Kreise:
X = abstand/2.*x;   % Koordinaten fuer innersten Kreis
Y = abstand/2.*y;

for i=0:s/2-1         % von 0 -14
    X = [X (abstand/2+i*abstand).*x];
    Y = [Y (abstand/2+i*abstand).*y];
end

plot(X,Y,'.k','MarkerSize',5)
axis equal

end



Aber nun habe ich folgendes Problem:

Ich will aus einer Matrix 30x100 jeweils eine Zeile als x-y Koordinate in das oben aufgeschriebene Programm einfügen.
Nach der übertragen von den Weten aus der Matrix auf dieses obige Programm will ich noch die 4 nearest neigbouhrs methode für jeden punkt durchführen & anschließend daraus ein Gradientenfeld erstellen. Das Gradientenfeld soll dann einfach meine errechneten Vektorden in diesem obigen Programm, anstatt der Punkte, darstellen.

Ich weiß das klingt etwas kompliziert. Aber leider endet mein Latein für Matlab ab diesem Punkt. Hast du Jan oder vlt auch wer anders eine Idee für die Umsetzung dieses Problems?!

Dankesehr schonmal
Beste Grüße Jan

[EDITED, Jan S, Bitte Code-Formatierung verwenden - Danke]
 
Windstaerke12

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2012, 18:48     Titel:
  Antworten mit Zitat      
ähm nochmal das programm, weil ich was rausnehmen musste:

Code:
l = 155;       %Länge
s = 30         %Anzahl Sensoren
k = 100        %messungen rund um den kreis
abstand = 4.8      %abstand zwischen 2 Sensoren

% Zuerst definiere ich die Koordinaten fuer die Winkel
t = 0:2*pi/k:2*pi;

% Nun die Koordinaten auf einem Kreis mit Radius 1 mit Parametrisieren durch (cos(t),sin(t))
% fuer 0<=t<=2*pi)
x = cos(t);
y = sin(t);
% Definition eines (langen) Vektor mit den Koordinaten
% fuer alle Kreise:
X = abstand/2.*x;   % Koordinaten fuer innersten Kreis
Y = abstand/2.*y;

for i=0:s/2-1         % von 0 -14
    X = [X (abstand/2+i*abstand).*x];
    Y = [Y (abstand/2+i*abstand).*y];
end

plot(X,Y,'.k','MarkerSize',5)
axis equal


Grüüße

[EDITED, Jan S, Bitte Code-Formatierung verwenden - Danke]
 
Windstaerke12

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2012, 20:12     Titel:
  Antworten mit Zitat      
Hallo zusammen,
ich habe mal probiert weiter zu programmieren
Code:
A = [7 9 6 7 8; 2 7 9 5 6; 7 9 8 5 4;2 3 7 5 4;9 1 4 7 8;1 9 3 7 8;8 8 8 7 5;9 2 9 7 8;4 4 5 1 7;6 6 6 7 5]
Matrix1 = zeros(3,messpgesm)% Erstelle 3*Messpunktematrix
Matrix2 = zeros(3,messpgesm)
G = zeros(10,5)
l = 100;       %Länge
s = 5         %Anzahl Sensoren
k = 10        %messungen rund um den kreis
abstand = 4.8      %abstand zwischen 2 Sensoren
r = 2.4                %Abstand vom Mittelpunkt des Lieals

messpgesm = s*k;   %Berechne Gesamt Anzahl der Messpunkte

% Zuerst definiere ich die Koordinaten fuer die Winkel
t = 0:2*pi/k:2*pi;

% erste zeile x werte, zweite Zeile y werte , 4 zeile ftnwerte
for q=1:messpgesm/2
Matrix1(1,:) = r*cos(t)
Matrix1(2,:) = r*sin(t)
Reshmat =reshape(A,1,messpgesm)  %reshape Matrix A
Matrix1(3,:) = Reshmat(r,t)
Matrix2(1,:) = [Matrix2(1,:) (abstand/2+i*abstand).*Matrix1(1,:)];
Matrix2(2,:) = [Matrix2(2,:) (abstand/2+i*abstand).*Matrix1(2,:)];

for n=1:k        
[dx,dy] = gradient(Matrix2(:,n))       %gradienten bilden
quiver(dx,dy)
end
r=r+abstand;
end



Ich wollte hier als Beispiel die Matrix A auf das oben geschriebene Programm übertragen.Anschließend habe ich probiert meine x(cost), y(sint) und funktionswerte (reshmat) einzulesen. Diese werden in Matrix 2 gespeichert.
und anschließend muss ich in einer schleife 10 mal einen gradienten aus den jeweiligen 2 Zeilen der Matrix 2 pro Spalte bilden.Diese sollen dann als vektorpfeile dargestellt werden.
1)Jetzt weiß ich nicht, ob das bisher so richtig ist, wie ich das programmiert habe.

2)Des Weiteren brauche ich eine Lösung, wie ich quasi nach einem quiver Vorgang die Vektoren auf einem Bild speicher, aber dann beim nächsten Vorgang einen weiteren plot über das vorherige bild lege, sodass sich dadurch ein Gesamtbild zusammenfügt. Weiß jemand wie man das lösen kann?

Damit sich die Vektoren nicht überlagern, erhöhe ich am Ende der Schleife den parameter r.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 11.09.2012, 22:33     Titel:
  Antworten mit Zitat      
Hallo Windstaerke12,

Ich habe noch nie so oft in einem die Code-Umgebung verbessert.

Dein code läuft immer noch nicht:
Code:
A = [7 9 6 7 8; 2 7 9 5 6; 7 9 8 5 4;2 3 7 5 4;9 1 4 7 8;1 9 3 7 8;8 8 8 7 5;9 2 9 7 8;4 4 5 1 7;6 6 6 7 5]
Matrix1 = zeros(3,messpgesm)% Erstelle 3*Messpunktematrix
...
% Error message: ??? Undefined function or variable 'messpgesm'.

Weiter unten wird diese Variable definiert. Aber ob der Wert dann auch nach oben kopiert werden darf, weiß nur der Autor des Programms.

Es ist verblüffend, dass du eine FOR-Schleife über "q" laufen läßt, der Schleifen-Zähler "q" aber gar nicht verwendet wird. Dagegen moniert MLint, dass in:
Code:
Matrix2(1,:) = [Matrix2(1,:) (abstand/2+i*abstand).*Matrix1(1,:)];

"i" als imaginäre Einheit verwendet wird.

Solange der gepostete Code weder läuft noch frei von Warnungen ist, ist das Bearbeiten der eigentlichen Frage ineffizient, wenn nicht unmöglich. Bitte teste Deinen Code vor dem Posten, oder schreibe eine Bemerkung dazu, das der Code nicht getestet wurde, sondern nur in einem Nicht-Matlab-Editor verfasst.

Es ist nicht leicht, fremde Leute dazu zu motivieren, freiwillig bei der Lösung eines Problems zu helfen. Hier gibt es noch Potential für Verbesserungen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Windstaerke12

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2012, 10:05     Titel:
  Antworten mit Zitat      
Hallo Jan,

tut mir Leid, dass aus dem vorherigen post nicht offensichtlich war, dass das Programm noch nicht läuft. Ich wollte damit eig nur nochmal probieren zu demonstrieren was ich genau vorhabe.
Der Post hingegen von 18:44 ist das was läuft & auf dessen weitere Bearbeitung sich meine Fragestellung bezieht.


Nochmal entschuldigung, dass das aus dem letzten Post nicht klar hervor ging.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.09.2012, 12:26     Titel:
  Antworten mit Zitat      
Hallo Windstaerke12,

Alles in Ordnung und ich meine es gibt keinen Grund sich zu entschuldigen. Du bist der einzige der darunter leidet, wenn hier keine hilfreiche Antwort gepostet wird.

Ich bin übrigens nun noch verwirrter. Um 18:44 hast Du Code geposted, um 18:48 aber eine verbesserte oder berichtigte Version. Die Fragestellung ist über mehrere Posts verteilt und beim Hin- und Herscrollen verliere ich den Überblick darüber, welche Fragenteile sich auf welches Programm beziehen.

Darum empfehle ich folgendes, was hier ausnahmsweise mal den Statuten des Forums widerspricht: Öffne einen neuen Thread, poste einen möglichst kurzen relevanten Code-Abschnitt und stelle eine einzige klare Frage dazu, die man am besten mit 3 Zeilen Code oder 2 Sätzen beantworten kann. dann ist eine hilfreiche Antwort am wahrscheinlichsten.

Es ist gar nicht ungewöhnlich, dass man mehrere Anläufe braucht, bis eine Frage knapp, klar und präzise ist. Eine wirklich perfekt gestellte Frage enthält praktisch die Antwort bereits, oder es ist eine "Ja" oder "Nein" Antwort möglich. Aber perfekte Fragen sind bekanntermaßen sehr selten.

Gruß, Jan
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.