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

Minuswerte erstzen durch Mittelwert

 

XTick

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2007, 11:46     Titel: Minuswerte erstzen durch Mittelwert
  Antworten mit Zitat      
Hallo liebe MatLaber,
hab schon wieder eine Frage, sorry, aber am Anfang ist es echt nicht so einfach. Ich möchte in einem Vektor, von dem ich nicht wiess wie lang er ist, die negativen Werte durch den MIttelwert aus dem Wert davor und dem Wert danach ersetzen.
Folgendes habe ich dafür aufgesetzt, funktioniert aber noch nicht so ganz:
Weiss jeamdn Rat?

Code:

clear all;
close all;
clc;

a=[2 2 3 4 5 3 2 4 -1 2 3 -3 5]'

i=find(a<0)

I=repmat(i,length(i),1)
D=repmat(i,1,length(i))+repmat([-1,1],length(i),1)

mean=mean(D,2)

a(i)=mean
 


Vielen Dank im Voraus!


outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 13.12.2007, 12:45     Titel:
  Antworten mit Zitat      
Code:
a=[2 2 3 4 5 3 2 4 -1 2 3 -3 5]
id = find(a<0)
a(id) = arrayfun(@(x) mean([a(x-1) a(x+1)]),id)



MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
XTick

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2007, 16:25     Titel: Warum geht er bis ans Ende von Excel?
  Antworten mit Zitat      
Vielen Dank für die Hilfe. Habe mir jetzt da was gebastelt, das folgendermassen aussieht:

Code:

dateiname=xlsread('Data.xls','Tabelle2');
a=dateiname(:,3);

for i=1:length(a)
        if a(i)>=0.0
                y(i)=a(i);
        else
                y(i)=mean([a(i+2) a(i-2)]);
        end
end
y'
 


Doch ich verstehe nicht: wenn ich i=1:1000 mache gibts kein problem, wenn ich jedoch i=1:length(a) mache krieg ich die fehlermeldung:

Code:

??? Attempted to access a(65533); index out of bounds because numel(a)=65532.

Error in ==> OURKillX at 15
                y(i)=mean([a(i+2) a(i-2)]);
 


Weiss jemand Rat? Ich wollte doch gar nicht dass er bis zum Enden geht sondern nur bis legth(a) was bei ca. 2400 wäre.
Vielen Dank im Voraus!
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 13.12.2007, 17:02     Titel:
  Antworten mit Zitat      
Hallo XTick,

die Länge von a ist ganz gewiss 65532. Zur Überprüfung, wieviele Daten eingelesen werden, kannst Du mal
Code:

eingeben.

Das wäre aber noch kein Problem. Das Problem taucht auf, weil der letzte oder vorletzte Wert nicht >= 0 ist und Du für die Mittelwertbildung den Wert a(i+2) verwenden willst - also einen, der nicht existiert. Die Lösung liegt darin, die Schleife nur bis length(a)-2 laufen zu lassen.

Da Du angibst, a enthalte nur etwa 2400 Werte, besteht die Möglichkeit, das mit xlsread NaNs eingelesen werden, wo keine Daten stehen. (Passiert bei mir allerdings nicht...) NaNs sind auch nicht >=0. Ob das passiert, kannst Du mit
Code:

überprüfen. Das Ergebnis gibt an, wieviele NaNs in dateiname stehen. Gut wäre 0. Wink Wo die in der Matrix stehen, kann man sich mit
Code:
spy(isnan(dateiname))

anschauen.

Herzliche Grüße
Bijick

PS: Warum magst Du die schleifenlose Version von outsider nicht? Dort bestünde allerdings auch ein Problem, wenn das letzte Element von a negativ ist. Kann das auftreten? Und was soll dann berechnet werden?
_________________

>> why

Zuletzt bearbeitet von Bijick am 14.12.2007, 09:55, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
xtick

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2007, 23:38     Titel: danke
  Antworten mit Zitat      
danke für die hilfe werde es gleich morgen ausprobieren. ich mag schleifen einfach deshalb lieber weil sie mir vertrauter sind und ich mehr erfahrung hab als mit unbekannten befehlen Wink
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 14.12.2007, 07:12     Titel:
  Antworten mit Zitat      
Gerade in Matlab sind Schleifen aber deutlich langsamer! Falls Dir dein Code also langsam vorkommt, solltest Du anfangen ihn zu vektorisieren!
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
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.