Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

"Ist Element von ..." ausdrücken

 

ThoRie
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2019, 14:22     Titel: "Ist Element von ..." ausdrücken
  Antworten mit Zitat      
Hallo,

ich habe ein Problem mit folgendem Code:
Code:

function Folgenglieder=folgePzwei(n)
clc;  
k = zeros(n,1);
x = zeros(n,1);
##Berechnung der Elemente von k.
k(1) = 1;
for i = 2:n
    k(i) = i;
endfor
##Berechnung von x.
x(1) = 1;
for i = 2:n
  if x(i-1)-k(i)<=0
    x(i) = x(i-1)+k(i);
  else
      x(i) = x(i-1)-k(i);
  endif
endfor
##Anzeigen der Folgenglieder (k zur Nummerierung) ohne x0.
disp([k,x])
endfunction
 

Und zwar soll er nicht nur abgleichen, dass x(i-1)-k gößer als 0 ist, sondern auch, dass dieses Element noch nicht in dem Vektor auftaucht.
Also, die Anweisung ist konkret gesagt:

Die Funktion soll in Abhängigkeit von n folgende Folge berechnen:


<br />
x_o=0,\,x_k=\begin{cases}x_{k-1}-k, \text{ falls }x_{k-1}-k\text{ positiv und noch nicht Element der Folge ist,}\\x_{k-1}+k,\text{ sonst.} \end{cases}
<br />

Das habe ich jetzt erstmal über eine "oder"-Prüfung gemacht, damit er nicht immer beide Bedingungen überprüfen muss, sondern er erstmal nur das "positv" checken soll, da das wahrscheinlich häufiger auftreten wird. Ansonsten kann man das ja einfach tauschen.

Mein Problem ist jetzt halt, dass ich keine Ahnung habe, wie ich die zweite Bedingung so formulieren kann, dass Octave weiß, was er machen soll Confused

Vielleicht hat da ja jemand eine Idee Smile
Private Nachricht senden Benutzer-Profile anzeigen


ThoRie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 22.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2019, 14:31     Titel:
  Antworten mit Zitat      
Okay ich habe das Problem gelöst:

Code:

function Folgenglieder=folgePzwei(n)
clc;  
k = zeros(n,1);
x = zeros(n,1);
##Berechnung der Elemente von k.
k(1) = 1;
for i = 2:n
    k(i) = i;
endfor
##Berechnung von x.
x(1) = 1;
for i = 2:n
  if  any(x==x(i-1)-k(i)) || x(i-1)-k(i)<=0 ##Der Teil mit any() ist neu
    x(i) = x(i-1)+k(i);
  else
      x(i) = x(i-1)-k(i);
  endif
endfor
##Anzeigen der Folgenglieder (k zur Nummerierung) ohne x0.
disp([k,x])
endfunction
 

Außerdem ist es tatsächlich klüger, den zuerst zu setzen, da das sehr schnell deutlich häufiger auftritt als ein negativer Wert Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 10.952
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.06.2019, 16:02     Titel:
  Antworten mit Zitat      
Hallo ThoRie,

Code:
k = zeros(n,1);
x = zeros(n,1);
##Berechnung der Elemente von k.
k(1) = 1;
for i = 2:n
    k(i) = i;
endfor

Das kann man deutlich vereinfachen:
Code:

Da k(i) dann aber den Wert i hat, kann man k eigentlich ganz weglassen.

Code:

function Folgenglieder=folgePzwei(n)
x = zeros(n,1);

x(1) = 1;
for i = 2:n
  if  any(x==x(i-1)- i) || x(i-1) <= i
     x(i) = x(i-1) + i;
  else
      x(i) = x(i-1) - i;
  endif
endfor
endfunction

Gruß, Jan
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2019 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.