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

Einlesen und ploten von Daten

 

gamma
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 03.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2017, 18:15     Titel: Einlesen und ploten von Daten
  Antworten mit Zitat      
Hallo goMatlab Forum, ich bräuchte mal wieder eure Hilfe!
Im Anhang befindet sich meine Aufgabe bei der ich etwas Hilfe nötig hätte! Schon beim einlesen der Daten hab ich das Problem, dass ich nicht weiß wie ich auf die einzelnen Elemente meiner Struktur zurückgreife. Ich finde zwar Beschreibungen dazu, jedoch weiß ich ja nicht wie mein Feld heißt.
Kann mir also jemand für den Anfang sagen wie ich auf einzelnen Elemente meiner Struktur zugreifen kann und wie ich diese im weiteren Sinne zu einem Vektor mache? Danke schon mal!

Screenshot (5).png
 Beschreibung:

Download
 Dateiname:  Screenshot (5).png
 Dateigröße:  236.63 KB
 Heruntergeladen:  346 mal
Data_Assignment6.mat
 Beschreibung:

Download
 Dateiname:  Data_Assignment6.mat
 Dateigröße:  3.96 KB
 Heruntergeladen:  310 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.05.2017, 21:04     Titel:
  Antworten mit Zitat      
Hallo,

Code:
load Data_Assignment6.mat

liefert keine Struktur, sondern einen "ganz normalen" Double Vektor.
Insofern ist mir nicht klar, wo das Problem liegt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gamma
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 03.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2017, 01:05     Titel:
  Antworten mit Zitat      
Was mich verwirrt ist das ich die Meldung
Zitat:
x =

struct with fields:

x: [1×500 double]
zurück bekomme wennn ich die daten mit load einlese. Außerdem kann ich nicht auf die einzelnen Elemente des Vektors zugreifen denn
Code:
x = load('Data_Assignment6.mat');
x(2)
liefert mir die Fehlermeldung
Zitat:
Index exceeds matrix dimensions.
. Wo liegt mein Fehler?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2017, 08:30     Titel:
  Antworten mit Zitat      
Hallo,

das einfachste ist, wenn du das "x = " weglässt (Vorschläge bitte auch ausprobieren!).

Wenn du die Daten unbedingt in eine Struktur laden willst, dann ginge das so:
Code:
data = load('Data_Assignment6.mat');
x = data.x;


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gamma
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 03.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2017, 11:06     Titel:
  Antworten mit Zitat      
Am liebsten wäre es mir ja wenn ich die Daten als Vektor hätte aber ich weiß eben nicht wie ich das bewerkstellige! Wenn ich das "x=" weglasse habe ich das Problem, dass ich nicht weiß wie ich auf meine Daten zugreifen kann die sich im Workspace befinden. Also wie ich diese Daten dann anschließend in meiner Summe weiter verarbeiten kann!
Ich habe deshalb einmal mit der Struktur weiter gearbeitet aber wäre dir sehr dankbar wenn du mir sagen könntest wie ich sie als Vektor einlese.
Desweiteren habe ich ein Problem mit dem plotten
Code:
%load('Data_Assignment6.mat');
data = load('Data_Assignment6.mat');
x = data.x;
n = size(x)
for i = 1:n
    for m = 1:7
        for s = 1:3
            l(m,s) = log10(1/(pi*s*((1+x(i)-m)^2)/s^2))
            plot(l,x(i))
        end
    end
end

       
. Ich denke es ist klar wie ich versuche vorzugehen(ansonsten kommentiere ich auch gerne meinen code). Ich bekomme die Fehlermeldung
Zitat:
Error using plot
Vectors must be the same length

Ich denke das meine Summe nicht richtig ist weil ich nur 441 Werte bekomme was mir viel zu wenig erscheint für 500 x-Werte und 7 verschiedene m bzw 3 verschiedene s Werte.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2017, 18:41     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Am liebsten wäre es mir ja wenn ich die Daten als Vektor hätte aber ich weiß eben nicht wie ich das bewerkstellige!

So, wie ich es dir geschrieben habe.

Zitat:
Wenn ich das "x=" weglasse habe ich das Problem, dass ich nicht weiß wie ich auf meine Daten zugreifen kann die sich im Workspace befinden.

x ist dann direkt im Workspace, und du kannst "ganz normal" damit arbeiten.

Statt n = size(x) solltest du n = length(x) verwenden.

Zitat:
Error using plot
Vectors must be the same length

Ist die Fehlermeldung wirklich so verwunderlich? Du versuchst eine Matrix auf die x- und einen Wert auf die y-Achse zu plotten.

Zitat:
Ich denke das meine Summe nicht richtig

Welche Summe denn? Da ist nirgends eine Aufsummierung von irgendetwas in deinem Code.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gamma
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 03.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2017, 10:43     Titel:
  Antworten mit Zitat      
Danke das hat mir schon mal geholfen. Warum aber kann ich ganz normal mit x arbeiten wenn ich vorher nicht x definiert habe? Würde das mit jeder Variable gehen?
Ich habe jetzt zumindest eine Summe:
Code:
load('Data_Assignment6.mat');  
n = length(x);
m = 2;
s =1;
for i = 1:n
    for m = 1:7
        for s = 1:3
             l(m,s) = sum(log10(1/(pi*s*((1+x(i)-m)^2)/s^2)));
             plot(l)
         end
    end
end

Stimmt der plot jetz so? Bekomme zwar eine Graphik aber bin mir nicht sicher ob die so stimmt. Als nächstes muss ich die Funktion maximieren. Das müsste mit der negativen Funktion fminbnd gehen.
Code:
X = fminbnd(sum(log10(1/(pi*s*((1+x(i)-m)^2)/s^2))),1,7)
Ich bekomme die Fehlermeldung
Zitat:
Error using fcnchk (line 106)
FUN must be a function, a valid character vector expression, or an inline function object.

Error in fminbnd (line 191)
funfcn = fcnchk(funfcn,length(varargin));
Was mach ich falsch? Kann es sein das ich eine Funktion mit einem function handle übergeben muss? Wenn ja, wie? Meine versuche in diese Richtung haben leider nicht funktioniert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.05.2017, 15:26     Titel:
  Antworten mit Zitat      
Hallo,

du summierst in deinem Code über einen Wert. Werte die Funktion doch vektorisiert für alle x auf einmal auf und summiere dann das. Vor allem aber überschreibst du den Plot in jedem Schritt.

Code:
load('Data_Assignment6.mat');  
n = length(x);
% m = 2;
% s =1;
for i = 1:n
    for m = 1:7
        for s = 1:3
             l(m,s) = sum(log10(1./(pi*s*((1+x-m).^2)/s^2)));
         end
    end
end
surf(1:7, 1:3, l')


Zur Optimierung:
Wenn du m und s anpassen willst, brauchst du fminsearch oder fmincon statt fminbnd.

Zitat:
Kann es sein das ich eine Funktion mit einem function handle übergeben muss?

Ja.

Zitat:
Wenn ja, wie?

Bitte die Doku und vor allem die Beispiele zu den genannten Funktionen durchgehen. Du musst dabei ggf. m und s zu einem Vektor zusammenfassen.

Zitat:
Meine versuche in diese Richtung haben leider nicht funktioniert.

Bitte poste deine Versuche, damit man dir bei der Fehlersuche helfen kann.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gamma
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 03.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2017, 16:11     Titel:
  Antworten mit Zitat      
Ich bekomme folgende Fehlermeldung
Zitat:
Nonscalar arrays of function handles are not allowed; use cell arrays instead.

fun(m,s) = @(x) sum(log10(1./(pi*s*((1+x-m).^2)/s^2)))
für den Code
Code:
load('Data_Assignment6.mat');  
n = length(x);

fun(m,s) = @(x) sum(log10(1./(pi*s*((1+x-m).^2)/s^2)))
for i = 1:n
    for m = 1:7
        for s = 1:3
           
           l(m,s) = fun
           
        end
    end
end

Offensichtlich verstehe ich die function handle Funktion noch nicht ganz! Natürlcih hab ich mir schon was dazu angeschaut aber mir ist nicht ganz klar wie sie funktioniert!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.05.2017, 17:01     Titel:
  Antworten mit Zitat      
Hallo,

warum nutzt du Function Handles denn für den Teil, für den ich dir eine funktionierende Lösung geschickt habe, statt für die Optimierung?

Die Fehlermeldungen sind an sich selbsterklärend.
Code:

lfun = @(m,s) sum(log10(1./(pi*s*(1+(x-m).^2/s^2))));
f = @(u) -lfun(u(1), u(2));
fminunc(f, [0.1, 0.1])


Du hattest übrigens auch noch Fehler in der Klammernsetzung der Funktion.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gamma
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 03.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2017, 08:16     Titel:
  Antworten mit Zitat      
Danke für die Hilfe. Es funktioniert jetzt!
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.