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

Ackermannfunktion

 

Kroko123
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 10.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2013, 23:11     Titel: Ackermannfunktion
  Antworten mit Zitat      
Hallo liebe Leute,

ich habe ein Problem mit der Implementierung der Ackermannfunktion. Als Pseudo Code habe ich dieses hier gegeben, was ich nun implementieren möchte:

FUNCTION a(n,m)
IF n=0 THEN
RETURN m+1
ELSE
IF m=0 THEN
RETURN a(n-1,1)
ELSE
RETURN a(n-1,a(n,m-1))
END
END


Dies ist meine Implementierung, die leider nicht funktioniert:

Code:

function a(n,m)
clear;clc;
 
n=input('**a(n,m)**  Bitte geben Sie n ein: ');
m=input('**a(n,m)**  Bitte geben Sie m ein: ');
 
    if n==0
    m+1;
    else
         if m==0
        a(n-1,1);
         else
        a(n-1,a(n,m-1));
         end
       
    end
 
fprintf('Ergebnis ist: %d',f);
 
end
 
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: 13.07.2013, 09:14     Titel:
  Antworten mit Zitat      
Hallo,

verstehe ich es richtig, dass die Funktion sich rekursiv aufrufen soll?

Hier ein paar Hinweise:
- die Funktion muss ein Rückgabeargument haben, und dieses muss in der Funktion gesetzt werden
- das erste m und n sollten von außen übergeben statt per input abgefragt werden, da es sonst mit den rekursiven Aufrufen schwierig wird.
- das clear; clc ist in einer Funktion unsinnig.

Wenn etwas nicht funktioniert, ist es grundsätzlich wichtig zu sagen, was genau nicht funktioniert. Gibt es beispielsweise Fehlermeldungen (wenn ja, welche) oder weicht das Verhalten der Funktion vom gewünschten ab (wenn ja, inwiefern)?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 10.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2013, 10:17     Titel:
  Antworten mit Zitat      
Hallo,

Also Fehlermeldung sehe ich diese hier:
Code:
??? Undefined function or method 'a' for input arguments of type 'double'.

Error in ==> pruefungsvorbereitung1 at 13
        a(n-1,a(n,m-1));
 


Ja soweit ich weiß soll sie sich rekursiv aufrufen. Wie soll ich denn denn den Übergabewert "nach außen bringen?".

Was genau das Programm leisten soll kann ich leider gar nicht sagen, ich habe nur den oben genannten Pseudocode gegeben. Nun sollte daraus ein Matlab Programm implementiert werden.

Grüße
Marcel
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: 13.07.2013, 10:29     Titel:
  Antworten mit Zitat      
Hallo,

du musst die Funktion schon unter dem Namen speichern, mit dem sie aufgerufen werden soll. Also entweder alle a durch pruefungsvorbereitung1 ersetzen, oder die Datei als a.m speichern.

Ansonsten: siehe oben.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 10.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2013, 11:11     Titel:
  Antworten mit Zitat      
Leider verstehe ich das nicht Sad

Ich möchte doch einfach nur mal eben den Pseudo Code von oben in einen Matlab Code implementieren.

Habe nun stehen (unter a.m abgespeichert):
Code:
function a(n,m)

    if n==0
    m+1;
    else
         if m==0
        a(n-1,1);
         else
        a(n-1,a(n,m-1));
         end
       
    end
 
fprintf('Ergebnis ist: %d',f);
 
end
 
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: 13.07.2013, 11:54     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Leider verstehe ich das nicht

Was verstehst du nicht?

Leider hast du den ersten meiner Hinweise noch nicht umgesetzt. Das musst du schon machen, damit die Funktion weiß, was sie zurückgeben soll.

Falls du noch Probleme mit Funktionen in MATLAB hast, hilft vielleicht die Doku:
http://www.mathworks.com/help/matlab/ref/function.html

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 10.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2013, 15:27     Titel:
  Antworten mit Zitat      
Servus,

nun habe ich es so geschrieben:
Code:
function Hauptprogramm

n=input('Bitte geben sie n ein: ');
m=input('Bitte geben sie m ein: ');


Ergebnis=a(n,m);

printf('Ergebnis ist: %d',Ergebnis);


function Ergebnis=a(n,m)

    if n==0
    m+1;
    else
         if m==0
        a(n-1,1);
         else
        a(n-1,a(n,m-1));
         end

    end
 


Und erhalte nun die Fehlermeldung:
Code:
??? Error using ==> a
Too many input arguments.

Error in ==> a at 7
Ergebnis=a(n,m);


Ja nun wo liegt nun mein Fehler? Sad Irgendwas mache ich immer verkehrt, leider habe ich noch 3 socher Aufgaben mit Rekursion. Gestern habe ich die selben schon mit Iteration gemacht, damit ging es problemlos.

Grüße
Marcel
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 13.07.2013, 15:37     Titel:
  Antworten mit Zitat      
deine funktion besitzt jetzt zwar laut definition einen rückgabe wert, dieser wird aber in der funktion nicht erzeugt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Kroko123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 10.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2013, 15:40     Titel:
  Antworten mit Zitat      
Ah, okay, danke.

Und wie und was baue ich da jetzt wo ein?
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: 13.07.2013, 16:40     Titel:
  Antworten mit Zitat      
Hallo,

hast du denn den von mir vorgeschlagenen Link mal gelesen?

Code:
function Ergebnis=a(n,m)

    if n==0
    Ergebnis = m+1; % so gehts
    else
         if m==0
        a(n-1,1); % hier musst du's genauso machen
         else
        a(n-1,a(n,m-1)); % ... und da auch
         end

    end


Meine Empfehlung wäre, sich die Grundlagen von MATLAB systematisch anzueignen anstatt sich von einem Problem zum anderen zu hangeln.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 10.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2013, 17:03     Titel:
  Antworten mit Zitat      
Gut, dann belassen wir es eben mal dabei.

Ich habe nun keine Zeit mich weiter in Matlab einzuarbeiten. Als Maschinenbauer möchte ich einfach nur die Prüfung bestehen und mehr auch nicht.

Trotzdem vielen Dank.
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: 13.07.2013, 17:40     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Gut, dann belassen wir es eben mal dabei.

Sag jetzt bitte nicht, dass du aufgibst, obwohl ich dir die Lösung quasi mundgerecht serviert habe.

Zitat:
Als Maschinenbauer möchte ich einfach nur die Prüfung bestehen und mehr auch nicht.

Mit der Prüfung könnte das schwierig werden, wenn solch elementare Kenntnisse fehlen.
Sorry, aber meinst du denn, dass man euch zum Spaß versucht, MATLAB beizubringen? Solche Kenntnisse können für das Berufsleben sehr wertvoll sein.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 10.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2013, 18:11     Titel:
  Antworten mit Zitat      
Alles schön und gut, aber ich fange jetzt nicht an mir den Text im besagten Link zu übersetzen. In Deutsch hätte ich es mir gerne durchgelesen.

Matlab finde ich gut und es interessiert mich auch, aber nicht solche Sachen mit Rekursion und dergleichen. Auch die Programmierung mit Rückgabewerden usw. verstehe ich eher weniger. Nun werde ich allerdings mir nicht alles in einer Woche selbst beibringen, da ich noch einige andere Sachen zutun habe.

Ebenfalls möchte ich noch eine Medianberechnung mit Teile und Herrsche machen, so dass ich noch einiges zutun habe. bzw. ich gebe es lieber schon vorher auf, weil das wird nichts.

Leider verstehe ich auch gar nicht, was das Programm genau macht, wie gesagt, ich haben nur den Pseudo Code. Für mich ist daraus nicht ersichtlich, wo denn welcher Wert eingegeben wird und wo, was etwas übergeben wird.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 13.07.2013, 18:37     Titel:
  Antworten mit Zitat      
nunja harald hat die lösung schon hingeschrieben. da ist nicht mehr viel zu ändern außer das was er als kommentar dazugeschrieben hat. wenn das prüfungsrelevant ist sollte das irgendwann mal im unterricht dran gewesen und du solltest dir nicht alles selber beibringen müssen in einer woche. die dokumentation von matlab ist recht gut aber halt auf englisch was man aber als maschinenbaustudent schon irgendwie beherrschen sollte.
Private Nachricht senden Benutzer-Profile anzeigen
 
Kroko123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 10.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2013, 18:39     Titel:
  Antworten mit Zitat      
Zur Ackermannfunktion habe ich genau das, was oben steht: "Den Pseudocode", nicht mehr und nicht weniger.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.