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

Runden von Zahlenwerten

 

pupil

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2011, 16:16     Titel: Runden von Zahlenwerten
  Antworten mit Zitat      
Hallo habe ein neues Problem.

Und zwar
In MATLAB sei ein Vektor c mit 20 Einträgen definiert. Ich muss den MatLab Code angeben, um aus diesem Vektor c einen Vektor d durch die folgenden Operationen zu erzeugen: Die ungeraden Einträge zwischen Eintrag Nr. 5 und Eintrag Nr. 16 (Grenzen einbezogen) sollen aufgerundet und die geraden Einträge abgerundet werden. Die restlichen Einträge sollen gerundet werden.

Ich weis dass ich die MatLab Befehle
Code:
brauche.
Aber wie gehe ich am besten vor?
Erst hätte ich mir gedacht die Elemente in drei Teilbereiche zu splitten.
Und zwar
Code:
e = d(1:1:4)
und f = c(5:1:16)
und g = c(17:1:20)


Jetzt kommt die große Frage und zwar wie stelle ich es an, dass MatLab mir die ungeraden Einträge zwischen Eintrag Nr. 5 und Eintrag Nr. 16 (Grenzen einbezogen) aufrundet und die geraden Einträge abrundet . Wie geht es überhaupt dass das Programm gerade und ungerade unterscheiden kann ?

Hoffe Ihr habt einen guten Rat auf Lager.
Mfg matze
Verschoben: 09.11.2011, 23:13 Uhr von Jan S
Von Allgemeine Diskussion nach Programmierung


Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 10.11.2011, 11:06     Titel:
  Antworten mit Zitat      
Hallo,

in der Liste der hilfreichen Funktionen fehlt noch odd und even ...

titus
Private Nachricht senden Benutzer-Profile anzeigen
 
pupil

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2011, 13:20     Titel:
  Antworten mit Zitat      
Mit odd und even kann ich jetzt gar nix anfangen ?
Gib mir mal bitte ein Bsp. wie du das meinst bzw. wie man das anwendet.
mfg matze
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2011, 13:51     Titel:
  Antworten mit Zitat      
Du kannst ja immer zwei Schritte machen, also z.B mit
Code:

bekommst du alle ungeraden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 10.11.2011, 14:04     Titel:
  Antworten mit Zitat      
Hallo Pupil,

habe mich gleich doppelt vertan, zum Einen: odd und even gibt es nicht in MATLAB. Zum anderen würden sie auch nicht helfen, da Du zwischen Eintrag 5 und 16 anders runden willst (ich hatte an Werte zwischen 5 und 16 gedacht)...

Sorry,
Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
pupil

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2011, 14:09     Titel:
  Antworten mit Zitat      
ich muss da doch auch
Code:

verwenden. aber ich weis iwie gar nicht wie ich des alles so zusammenbasteln soll?
Schleife ? ---> need help
mfg
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2011, 14:18     Titel:
  Antworten mit Zitat      
Musst du das verwenden? Du brauchst es nämlich nicht unbedingt. Du kannst dir jedenfalls überlegen, wie viel Rest bei der Division einer geraden Zahl bzw. ungeraden Zahl durch 2 bleibt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 10.11.2011, 14:49     Titel:
  Antworten mit Zitat      
Hallo,

im Prinzip geht es so:
Code:

% first just copy the vector
d = c;
% now find the indices for ceil:
idx = 5:2:16;
d(idx) = ceil(idx);
 


usw.

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
pupil

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2011, 21:26     Titel:
  Antworten mit Zitat      
Also ich habs jetzt mal so gemacht :
Code:
for e = c (1:1:4)
round (e)
for f = c (5:1:16)
if mod(f,2)
  ceil (f)
else
  floor (f)
end
for g = c (17:1:20)
round (g)
end
end
end; d = [e f g]


Ich finde diese Lösung schaut auch ganz plausiebel aus, ABER ich bekommen hierbei ummer ein nicht triviales ergebnis. Denn das Programm spuckt mir mehr rundungswerte aus als der reihenvektor c überhaupt hat bzw. als der daraus resultierende vektor d überhaupt haben sollt !
Bitte um Hilfe.
mfg matze
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2011, 22:47     Titel:
  Antworten mit Zitat      
In der jetzigen Form entspricht der Vektor d
Code:
d = [e f g]  <=> d = [c(4) c(16) c(20)]

Die Funktionen ceil, floor und round haben also keinen Einfluss, da du deren Ergebnis keiner Variablen zugewiesen hast.

Die Schrittweite 1 beim COLON ":" Operator kannst du weglassen, also z.B
Code:
c(1:4) statt c(1:1:4)


Wie du die Aufgabe ohne FOR-Schleifen und IF-Statement, welche in diesem Fall unnötig sind, haben Titus und Ich bereits angeführt.

mfg,
soad
Private Nachricht senden Benutzer-Profile anzeigen
 
pupil

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2011, 10:58     Titel:
  Antworten mit Zitat      
Ok und wie bau ich die definition dieser ergebnisse von ceil, round und floor nun in meine for schleifen rein (ich machs jetzt mal mit for schleifen, weils für mich so am plausibelsten ist) ???
gib mir mal bitte ein bsp angewandt auf meine for schleife in dem beitrag darüber.
mfg
matze
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2011, 11:57     Titel:
  Antworten mit Zitat      
z.B:
Code:
c = 1 + 9*rand(1,20);

e = zeros(1, 20);
for i = 1:4
    e(i) = round (c(i));
end
for i = 5:16
    if mod(i,2)
        e(i) = ceil (c(i));
    else
        e(i) = floor (c(i));
    end
end
for i = 17:20
    e(i) = round (c(i));
end


bzw. einfacher:
Code:
f = zeros(1, 20);
f(1:4) = round(c(1:4));
f(5:2:16) = ceil(c(5:2:16));
f(6:2:16) = floor(c(6:2:16));
f(17:20) = round(c(17:20));
Private Nachricht senden Benutzer-Profile anzeigen
 
pupil

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2011, 16:16     Titel:
  Antworten mit Zitat      
Danke Dir.

Jetzt kann ich mir die kurze Lösung auch gut plausibel vorstellen. wenn mans sieht is immer leichter zum verstehen als wie wenn man erst ewig rummprobieren muss.
 
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.