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

Kreis plotten bzw Koordinaten plotten

 

lorenz1980
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 05.07.08
Wohnort: Berlin
Version: 2010b
     Beitrag Verfasst am: 02.12.2008, 18:39     Titel: Kreis plotten bzw Koordinaten plotten
  Antworten mit Zitat      
Hi,

zwei Fragen:
a) wenn ich ermittelte Werte für x, y habe und diese auf einem Kreis liegen (x also mehr als einen Wert haben kann!), wie plotte ich das?!

Bsp:
Code:
x=[3;5;5;7];
y=[3;1;5;3];


b) Und wie würde ich einen Kreis plotten, wenn ich den Kreismittelpunkt und den Radius habe?!
Private Nachricht senden Benutzer-Profile anzeigen


dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2008, 19:05     Titel:
  Antworten mit Zitat      
Hallo,

Code:
m = 12;
n = 2.45;

fplot(@(x)m*x+n,[0 10]);


MfG

EDIT: Das war die Antwort zu "fplot mit Paramterübernahme?".. der Thread-Ersteller hat anscheinend Titel und Inhalt geändert..
Private Nachricht senden Benutzer-Profile anzeigen
 
lorenz1980
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 05.07.08
Wohnort: Berlin
Version: 2010b
     Beitrag Verfasst am: 02.12.2008, 19:11     Titel:
  Antworten mit Zitat      
dib0r hat Folgendes geschrieben:

EDIT: Das war die Antwort zu "fplot mit Paramterübernahme?".. der Thread-Ersteller hat anscheinend Titel und Inhalt geändert..


Hatte mittlerweile eine unschönere Lösung gefunden - nur mittels plot. Aber danke, so ists schicker Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2008, 19:19     Titel:
  Antworten mit Zitat      
Hallo nochmal,

Um einen Kreis zu plotten, benötigst du Mittelpunkt und Radius. Den Mittelpunkt berechnest du aus dem Schwerpunkt (bzw. Mittelwert der Koordinaten), den Radius über den Mittelwert der euklidischen Distanz zwischen dem Mittelpunkt und den Werten.

Code:
x=[3;5;5;7];
y=[3;1;5;3];

xm = mean(x); % mittelpunkt x
ym = mean(y); % mittelpunkt y

r = mean(hypot(x-xm,y-ym)); % radius


Den Kreis zeichnen würde ich mit ezplot.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
lorenz1980
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 05.07.08
Wohnort: Berlin
Version: 2010b
     Beitrag Verfasst am: 02.12.2008, 19:20     Titel:
  Antworten mit Zitat      
Mittelpunkt und Radius habe ich ja - es fehlt eben der plot ^^

habe nun
Code:
ezplot(@(x,y) (x - xy(1))^2 + (y - xy(2))^2 - r.^2)


genutzt und nun heißt es:
Zitat:
Warning: Function failed to evaluate on array inputs; vectorizing the function may
speed up its evaluation and avoid the need to loop over array elements.


Kann ich das beschleunigen? Geht darum, dass ich Input-Daten habe und die Daten an eine Funktion anpasse - hier eben ein Kreis. Die Outputs sind Mittelpunkt und Radius.
Dann möchte ich eben Input-Daten und BestFit-Kreis übereinander plotten.

Sieht aktuell so aus:
Code:
 function [xy, r]  = FitCircle(x, y)
% ---------------------------------------------------------------
% FitCircle.m
%
% Lineares Ausgleichsproblem (Least-Square) in der Ebene: Kreis
%
% Autor              Markus Lorenz
% --------------------------------------------------------------
%
% Input-Parameter       x - Vektor der x-Koordinaten
%                       y - Vektor der y-Koordinaten
%
% Output-Parameter      xy - Koordinaten des Kreismittelpunktes
%                       r - Radius des Kreises
%
% Aufruf                [xy, r] = FitCircle(x, y)
%                          mit z.B. (x, y) = ([1;3;6],[9;3;1])
% --------------------------------------------------------------

% Fehlerprüfung Länge(x) = Länge(y)?
    if length(x)~=length(y)
        error('FEHLER: Länge der Eingabevektoren sind nicht identisch!');
    else

    % Mittelwertfindung
        x_mean = mean([x y])';

    % Besimme Abweicheichung jedes x_n, y_n zum Mittelwert
        x_abw = x - x_mean(1);
        y_abw = y - x_mean(2);

    % Bilde Überwachungsmatrix A
       A = [2*x_abw,  2*y_abw,  -ones(length(x_abw), 1) ];

    % Bilde Lösungsvektor b
       b = x_abw.*x_abw + y_abw.*y_abw;
   
   
    % LGS lösen (Gauß-Elimination bzw QR-Zerlegung/ Least-Square)
       u = A\b;

    % Mittelpunkt-Abweichung vom Ursprung & Radius bestimmen
        xy  = u(1:2);
        r  = sqrt(xy'*xy - u(3));

    % Kreismitte bestimmen
       xy  = xy + x_mean;
       
    end
   
        % TODO: Punkte einzeichnen & zusammen mit Ausgleichskreis plotten
    %       evtl Fehler mit ausgeben (Abweichung vom Fit zum Messpunkt


Code:
x=[3;5;5;7];
y=[3;1;5;3];

plot(x,y,'+'), axis on, axis normal
[xy, r]=FitCircle(x,y)

%(x - xy(1))^2 + (y - xy(2))^2 = r^2;
ezplot(@(x,y) (x - xy(1))^2 + (y - xy(2))^2 - r.^2)
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2008, 19:56     Titel:
  Antworten mit Zitat      
Hallo,

ich dachte eher an die Benutzung mittels String.
Code:
xm % Mittelpunkt
ym % Mittelpunkt
r % Radius
str = ['(x-' num2str(xm) ')^2 + (y-' num2str(ym) ')^2 - ' num2str(r) '^2'];
ezplot(str);


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
lorenz1980
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 05.07.08
Wohnort: Berlin
Version: 2010b
     Beitrag Verfasst am: 05.12.2008, 13:56     Titel:
  Antworten mit Zitat      
Code:
x=[3;5;5;7];
y=[3;1;5;3];

plot(x,y,'+'), hold on, axis ([min(x)-0.1*max(x) 1.1*max(x) min(y)-0.1*max(x) max(y)+0.1*max(x)])
[xy, r]=FitCircle(x,y)

str = ['(x-' num2str(xy(1)) ')^2 + (y-' num2str(xy(2)) ')^2 - ' num2str(r) '^2'];
ezplot(str)


So nutze ich nun die Methode.
Problem: Es wird kein Kreis, sondern nur ein Dreiviertelkreis gezeichnet - der rechte Kreisteil fehlt.... Wieso?
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2008, 15:05     Titel:
  Antworten mit Zitat      
Du kannst auch so plotten
Code:
x=[3;5;5;7];
y=[3;1;5;3];

[xy, r]=FitCircle(x,y)

t=0:.01:2*pi;
plot(r*cos(t)+xy(1),r*sin(t)+xy(2))
hold on;
plot(x,y,'+');
axis([min(x)-0.1*max(x) 1.1*max(x) min(y)-0.1*max(x) max(y)+0.1*max(x)]);
axis equal;
str = ['(x-' num2str(xy(1)) ')^2 + (y-' num2str(xy(2)) ')^2 - ' num2str(r) '^2'];
title([str '=0']);

aber ich glaub, den axis Befehl musst Du nochmal prüfen.
 
Helmert
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 04.09.08
Wohnort: Karlsruhe
Version: 2011a
     Beitrag Verfasst am: 05.12.2008, 15:28     Titel:
  Antworten mit Zitat      
Hallo Lorenz,

warum es mit ezplot nicht funktioniert, steht im Hilfetext von ezplot:
Code:

 EZPLOT   Easy to use function plotter
    % [...]
    EZPLOT(FUN2) plots the implicitly defined function FUN2(X,Y) = 0 over
    the default domain -2*PI < X < 2*PI and -2*PI < Y < 2*PI.
 

Es werden offenbar nur x-Werte zwischen -2pi und 2pi dargestellt. Das ist zwar keine Lösung für Dein Problem, aber zumindest eine Erklärung.

Davon abgesehen finde ich Deinen Lösungsansatz zur Schätzung eines ausgleichenden Kreises nach vermittelnden Beobachtungen (FitCircle) sehr interessant. Kannst Du mir dazu ggf. eine Literaturstelle nennen?
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.