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

fallunterscheidung von messwerten

 

noob
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2008, 09:17     Titel: fallunterscheidung von messwerten
  Antworten mit Zitat      
hi leute

folgendes problem liegt an:

wir möchten in matlab eine art fallunterschiedung mit messwerten durchführen.

und zwar haben wir ~2x1000 Messwerte(x und y) diese werden geplottet. des weiteren wird auch noch ein kreis geplottet um einen bestimmten punkt. jetzt hätten wir gerne eine unterscheidung, und zwar den prozentanteil der messwerte die innerhalb des kreises sind und den prozentanteil der außerhalb liegt. im idealfall sollten die prozentanteile dann in den plot als legende geschrieben werden

bitte um anregungen

für eine bessere vorstellung der code und noch ein bildchen *g*

lg

Code:

clear all;
clc;
%
files=dir('*.m');
for i=1:length(files) ;
load(files(i).name,'-ascii');
[pfad, name, ext, vers]=fileparts(files(i).name);
%Auswertung
eval(['temp=',name]);
x=temp(:,1);
y=temp(:,2);
t = 0:0.1:2*pi;
x_ = mean(x) ;
y_ = mean(y) ;
r = 0.3;
plot(x_,y_,'rx','LineWidth',4);
axis equal
axis([min(x)-0.2 max(x)+0.2 min(y)-0.2 max(y)+0.2]);
hold on
plot(x_+r*cos(t),y_+r*sin(t),'r','LineWidth',3)
plot(x,y);
hold off
xlabel('x')
ylabel('y')
title(name)
grid on
%
path = strcat(pwd,filesep,'2d',filesep);
mkdir(path);
print('-djpeg',[path name]);
%X=temp(:,1)*temp(:,2)';
%save([name,'.txt'],'X','-ascii');
end
 


bildchen.JPG
 Beschreibung:

Download
 Dateiname:  bildchen.JPG
 Dateigröße:  33.17 KB
 Heruntergeladen:  847 mal
Private Nachricht senden Benutzer-Profile anzeigen


keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 04.02.2008, 10:11     Titel:
  Antworten mit Zitat      
Vorweg: Ich hab noch nie mit Polarkoordinaten gearbeitet, daher stelle ich hier lediglich Vermutungen anhand mathematischer Überlegungen auf.

Ich würde erstmal alle x-y-Paare in Radius-Winkel-Paare transformieren. Danach sollte es möglich sein, über eine if-Abfrage zu prüfen, ob der Punkt innerhalb des roten Kreises liegt. Für jeden Messwert, der innerhalb des Kreises liegt, könnte ein Counter erhöht werden.
Am Ende gibt (Counter / Anzahl Messdaten) den prozentualen Anteil innerhalb des Kreises an, während 1 - (Counter / Anzahl Messdaten) den Anteil ausserhalb angibt.

Wie genau die if-Abfrage jedoch aussehen müsste, weiss ich leider nicht. Prinzipiell ginge auch eine Abfrage der kartesischen x-y-Koordinaten, das dürfte aber vermutlich noch umständlicher werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2008, 10:15     Titel:
  Antworten mit Zitat      
leider fehlt uns etwas das mathematische verständnis, um solche aufgaben zu lösen, wesshalb wir sich auch an dieses forum gewandt haben

trotzdem vielen dank für die ersten ansätze

lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 04.02.2008, 11:07     Titel:
  Antworten mit Zitat      
Also nochmal Kreisgleichung:

Auf dem Kreisrand gilt: (x-x_Mitte)²+(y-y_Mitte)²=r²

Im Kreis gilt: (x-x_Mitte)²+(y-y_Mitte)²<r²

Abfrage (mit Euren Bezeichnungen):
Code:
Innen=length(find((x-x_)^2+(y-y_)^2<r^2));
Anteil_Innen=Innen/length(x);


find bestimmt die Indizes der Einträge in x und y, die die Bedingung erfüllen; length bestimmt die Länge dieses Vektors, also die Anzahl der Punkte, die die Bedingung erfüllen. Eventuell wollt Ihr auch <= statt < abfragen, das kommt auf die Bedeutung an.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 04.02.2008, 11:09     Titel:
  Antworten mit Zitat      
Zu langsam beim posten und zu kompliziert ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2008, 11:43     Titel:
  Antworten mit Zitat      
hmmm..

kannst du uns helfen, warum es nicht funktioniert?

wir bekommen folgende fehlermeldung:
??? Error using ==> mpower
Matrix must be square.

Error in ==> plot_2d at 17
Innen=length(find((x-x_)^2+(y-y_)^2<r^2));

liegt es vielleicht daran, weil es in einer schleife verbaut wird?

oder hat es vl. mit der zeile
Code:
plot(x_+r*cos(t),y_+r*sin(t),'r','LineWidth',3)
 
zu tun? fehlt hir nicht irgendwo noch ein ^2?

bitte hilf uns weiterhin

danke
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 04.02.2008, 11:49     Titel:
  Antworten mit Zitat      
Es muss (x - x_).^2 + (y - y_).^2 heissen.
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2008, 12:13     Titel:
  Antworten mit Zitat      
jaja das problem mit den punkten!

danke, das haben wir nicht gesehn

ein anliegen hätten wir da jetzt noch:

wir würden gerne den wert "Anteil_Innen" im plot ausgeben. wir dachten da eine eine art legende, jedoch kann die anscheinend nur texte ausgeben und keinen variableninhalt.

gibts da vielleicht eine möglichkeit das vernüftig auszugeben wie zum beispiel: "Der Prozentanteil der Messpunkte innerhalb des definierten Kreises liegt bei ... Prozent"

dann wäre diese sache für uns weitgehens erledigt.

bitten um letzte hilfe

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 04.02.2008, 12:31     Titel:
  Antworten mit Zitat      
Also den Anteil als String zu bekommen, sollte recht einfach gehen, aber ich das dann sinnvoll als Legende verwendet werden kann, weiss ich nicht. Ich hab bisher noch keinen Text einfach so in Plots eingefügt, nur halt Legenden zu Kurven im Plot, aber das ist nicht ganz das selbe.

Code:

leg = strcat('Der Prozentanteil der Messpunkte innerhalb des definierten Kreises liegt bei ', num2str(Anteil_Innen), ' Prozent');
 


leg ist nun ein String, der den gewünschten Satz enthält.

Edit: Argh, da werden die Leerzeichen verschluckt.

Alternativ:
Code:

leg = ['Der Prozentanteil der Messpunkte innerhalb des definierten Kreises liegt bei ' num2str(Anteil_Innen) ' Prozent'];
 

So müsste es auch mit den Leerzeichen passen.
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2008, 13:45     Titel:
  Antworten mit Zitat      
danke für den tipp..

wir habens jetzt so gelöst
Code:
leg = ['Der Prozentanteil der Messpunkte innerhalb des definierten Kreises liegt bei ' num2str(Anteil_Innen) ' Prozent'];
legend(leg)


jetzt schreibt er es sehr brav ins bildchen

lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 04.02.2008, 19:36     Titel:
  Antworten mit Zitat      
Peinlich, peinlich, das mit den Punkten Embarassed Dafür empfehle ich noch mal den Befehl text, falls legend doch nicht so ganz passt. Man muss nur x- und y- Wert der linken oberen Ecke des Textes und den Text übergeben. Letzterer kann auch aus mehreren Strings in einem cell array stehen (gut für mehrere Zeilen). Beispiel:

Code:
text(max(x)+0.3, max(y)+0.3,{'Der Prozentanteil der Messpunkte','innerhalb des Kreises liegt',['bei' num2str(100*Anteil_Innen) ' Prozent.']);


Und bitte die 100 nicht vergessen. Ein Anteil von 0.2 entspricht 20% und nicht 0.2%.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2008, 08:47     Titel:
  Antworten mit Zitat      
hi, dass mit der legende sieht unserer Meinung etwas besser aus.
Danke trotzdem

Das mit den Punkten kann man natürlich verzeihen.

lg
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 - 2024 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.