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

txt Einlesen und Ausgeben

 

INIING
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 28.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2014, 14:30     Titel: txt Einlesen und Ausgeben
  Antworten mit Zitat      
Mit Matlab habe ich noch nicht viel programmiert und habe ein paar Probleme. Ich versuche ein Textfile mit 4 Spalten (Komma getrennt, dann neue Zeile) einzulesen und auszuwerten. Es sind Polarkoordinaten. Zunächst reale, dann fehlerhaft gemessene Werte. Also möchte ich den Fehlerwinkel bestimmen und graphisch auswerten mit 3 Farben. Fehler bis 2% grün, 2 -3,5 % gelb, dann den Rest rot.

Folgenden Code habe ich schon probiert aber er hat Fehler. Vor allem komme ich in Zeile 10 nicht weiter. Wie berechne ich denn den tangens Zeileweise und speichere ihn ab. Das auskommentierte habe ich im Netz gefunden und ist dann auszuprobieren, wenn ich die richtige Matrix oder das Array habe.

Das ist mein Programm:

Code:
%

filename = 'C:\Users\Documents\MATLAB\nums2.txt.txt';
fileID = fopen(filename,'r');
formatSpec = '%d %f';
sizeA = [2 Inf];
A = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'EmptyValue' ,NaN, 'ReturnOnError', false);
%A = fscanf(fileID,formatSpec,sizeA);
fclose(fileID);

B = (tan(A(:,2)) / (A(:,1))) - (tan(A(:,4)) / (A(:,3)));

figure(1);

for z = 0:0.25:1

    start_sim;                % Simulationsstart

                        plot(x,y);
                        title('...');
                        Xlabel('t'); Ylabel('s'); grid;
                        legend('0','0.25','0.5','0.75', '1');
                 
     hold all;
end

%>> subplot (2 ,3 ,3); hist (x ,50); // plot als 2D-Histogramm
%title(’hist Plot ’); axis tight;

%subplot (2 ,3 ,3); hist3(x ,[50 50]); // plot als 3D-Histogramm
%title(’hist3 Plot ’); axis tight;

%figure;hold on;  Darstellung in verschiedenen Farben
%plot(Zeit(Vektor==-5),Leistung(Vektor==-5),'.r');
%plot(Zeit(Vektor==0),Leistung(Vektor==0),'.b');
%plot(Zeit(Vektor==5),Leistung(Vektor==5),'.g');
%plot(Zeit(Vektor==10),Leistung(Vektor==10),'.k');

set(0,'DefaultAxesColorOrder',[0 0 1 ; 0 1 0 ; 0 0 0 ; 0 0 1 ; 0 1 0 ; 0 0 0; 0 0 1])
set(0,'DefaultAxesLineStyleOrder',{'-' , '-' , '-' , '--' , '--' , '--' , '+'});


loglog(x,y); xlim([1 100]);Xlabel(''); Ylabel(''); hold all;
legend('0.5','0.75','1','1.25', '1.5');
if p == 1
saveas(figure(104),'sinus.fig' )
elseif p== 2
saveas(figure(105),'sinus2.fig' )
elseif p== 3
saveas(figure(106),'sinus3.fig' )  
end
 


Vielen Dank schon eimal für euren Vorschläge.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.07.2014, 14:39     Titel:
  Antworten mit Zitat      
Hallo,

bitte immer dazu schreiben, was genau an einem Code nicht funktioniert.

Im vorliegenden Fall würde ich sagen, dass du ./ statt / verwenden solltest, um komponentenweise zu teilen.

Desweiteren: du liest anscheinend 2 Spalten ein (und das in unterschiedlichem Format - meist keine gute Idee), verwendest aber 4 Spalten. Außerdem bekommst du von textscan ein Cell Array, das muss z.B. mit cell2mat noch in ein numerisches Array umgewandelt werden.

Falls das noch nicht weiterhilft, bitte klarstellen, was du in der Zeile eigentlich berechnen möchtest.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 28.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2014, 15:11     Titel:
  Antworten mit Zitat      
Code:
% Das ist mein Programm.

filename = 'C:\Users\Documents\MATLAB\nums2.txt.txt';
fileID = fopen(filename,'r');
formatSpec = '%d %d %d %d'; //4 double Werte einlesen

A = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'EmptyValue' ,NaN, 'ReturnOnError', false); // das Lesen selber

%A = fscanf(fileID,formatSpec,sizeA);
fclose(fileID);

B = (tan(cell2mat(A(:,2))) ./ (cell2mat(A(:,1)))) - (tan(cell2mat(A(:,4))) ./ (cell2mat(A(:,3)))); // Rechenoperation, funktioniert nicht: Undefined function 'tan' for input arguments of type 'int32'.

figure(1); // ab hier nicht viel Ahnung, war nur copy and paste: funktioiniert das so oder gehts besser?

for z = 0:0.25:1

    start_sim;                % Simulationsstart

                        plot(x,y);
                        title('...');
                        Xlabel('t'); Ylabel('s'); grid;
                        legend('0','0.25','0.5','0.75', '1');
                 
     hold all;
end

 


Habe mal etwas geändert, aber viel weiter bin ich leider nicht gekommen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

%d ist Integer, nicht Double, siehe Doku von textscan.
Für Double musst du %f als Identifier verwenden.

Ich würde zudem cell2mat auf A insgesamt anwenden, dann brauchst du das nicht für jede einzelne Spalte machen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 28.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2014, 16:38     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Hilfe bislang. Bin nun schon weniger frustiert.

Doch nun klappt das plotten nicht. Wie mach ich das denn:
Ausgegeben sollen die Winkel auf irgendeine Weise so, dass man farblich erkennt, dass sie über gewisse Grenzen sind.

Über Vorschläge ware ich sehr dankbar. D beihaltet die Beträge der Winkelfehler. Auch für ausgefallene Möglichkeiten bin ich offen.

Code:
% Das ist mein Programm.

filename = 'C:\Users\maximilian.rath\Documents\MATLAB\nums2.txt.txt';
fileID = fopen(filename,'r');
formatSpec = '%f %f %f %f';

A = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'EmptyValue' ,NaN, 'ReturnOnError', false);

fclose(fileID);

A = cell2mat(A);
B = (atand(A(:,2)) ./ (A(:,1)));% - (atand(A(:,4)) ./ (A(:,3)));
C = atand(A(:,4)) ./ (A(:,3));
%B = (tan(cell2mat(A(:,2))) ./ (cell2mat(A(:,1)))) - (tan(cell2mat(A(:,4))) ./ (cell2mat(A(:,3))));

D = abs(C - B);

figure(1);

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.07.2014, 16:50     Titel:
  Antworten mit Zitat      
Hallo,

was soll auf welcher Achse sein, und was soll nach welchen Kriterien farblich unterschieden werden?

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 28.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2014, 17:43     Titel:
  Antworten mit Zitat      
Am Besten wären für die x-Achse kranX ("X-Achsenposition Kran") und für die Y-Achse die Werte von D ("Winkelfehler"). Kriterien 0-2 grün, 2-5 gelb, größer rot.

Aber da mit Matlab ziemlich gute Plots funktionieren, wollte ich eigentlich versuchen. 2 verschiedene Plots zu machen und zwar für A(:,1), A(:,2)(x,y-Kran) und A(:,3),A(:,4) x,y Sensor und den Fehler als Verbindung dieser beiden jeweiligen Werte graphisch in Farbe darzustellen. Aber erscheint mir doch ein wenig kompliziert und zudem weiß ich auch nicht, ob das möglich ist.

Gruß, Max
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

hast du denn kranX als separate Variable?

Vorschlag:
Code:
rot = D >= 5;
gelb = D >= 2; % wird teilweise von rot überlegt.
plot(kranX, D, 'g')
hold on
plot(kranX(gelb), D(gelb), 'y')
plot(kranX(rot), D(rot), 'r')


Zitat:
und den Fehler als Verbindung dieser beiden jeweiligen Werte graphisch in Farbe darzustellen.

Ich kann mir das optisch nicht vorstellen.

Zitat:
Aber erscheint mir doch ein wenig kompliziert und zudem weiß ich auch nicht, ob das möglich ist.

Möglich ist es ziemlich sicher. Um dabei weiterhelfen zu können, müsste ich allerdings sehen/verstehen, wie das aussehen soll. Kannst du das mal skizzieren?

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 28.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2014, 11:01     Titel:
  Antworten mit Zitat      
Im angehängten JPEG habe ich das mal gemalt, was ich mir vorgestellt habe. Ob das aber so sinnvoll sein wird, da bin ich mir nicht ganz sicher. Es sollen 2 Graphiken dargestellt seine. In der ersten (links) in 2 Koordinatensysteme, welche den Werteverlauf für sensor und kran darstellt und zusätzlich noch in den verschiedenen Farben die Größe des aktuellen Fehler durch eine Geradenverbindung des aktuellen Wertes.

In der 2. Graphik eine Ausgabe des Fehler für den aktuellen Wert.

plots.jpg
 Beschreibung:

Download
 Dateiname:  plots.jpg
 Dateigröße:  34.56 KB
 Heruntergeladen:  207 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.07.2014, 11:14     Titel:
  Antworten mit Zitat      
Hallo,

wie wär's denn mit etwas in der Art:
Code:
actual_data = [(10:10:100)', (2*(10:10:100))'];
measured_data = actual_data + 3*randn(size(actual_data));
plot(actual_data(:,1), actual_data(:,2), 'o')
hold on
deviations = measured_data - actual_data;
quiver(actual_data(:,1), actual_data(:,2), deviations(:,1), deviations(:,2), 'AutoScale', 'off')
hold off


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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 28.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2014, 15:05     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Hilfe. Fand den Vorschlag gut.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

quiver unterstützt übrigens auch noch verschiedene Farben, s.o.

Grüße,
Harald
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.