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

Defaultwerte mit nargin, bitte um Hilfe

 

sno75
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 06.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.02.2015, 17:36     Titel: Defaultwerte mit nargin, bitte um Hilfe
  Antworten mit Zitat      
Hallo zusammen,
ich soll eine Gleichung und ihre Ableitung eingeben, handles f u. df zuweisen. Außerdem sollen noch die Parameter x0 und nmax eingegeben werden. Die Funktion soll die Nullstelle und die Näherungswerte ausgeben.
Mein Problem:
Falls x0 oder/und nmax nicht angegeben sind, sollen Defaultwerte übernommen werden (x0=1, nmax=10). Ich habe versucht das mit dem nargin-Befehl zu lösen.

Code:

function [x, a] = newton(f, df, x0, nmax)

if nargin < 4, n=10;end
if nargin < 3, x0=1;end
x = x0

for n = 1:nmax
    x = x- f(x)/df(x);
    fprintf('x(%i) = %10g \n', n, x)
    v = ones(1,n);
    a(1,n) = x*v(n);      
end
disp(a)
 


Jedoch funktioniert das nicht. Was mache ich falsch?
Außerdem muss ich noch ein Kontrollbaustein einbauen welcher überprüft, ob f und df tatsächlich Funktionshandles sind (isa?). Bitte um Hilfe.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Sigggi
Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 27.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.02.2015, 17:56     Titel:
  Antworten mit Zitat      
Hallo,

probier mal statt

Code:

function [a,b] = MyFunction(a,b,c,d)
...
 


mit varargin

Code:

function [a,b] = MyFunction(varargin)
a = varargin{1};
b = varargin{2};
...
 


Wenn Du konkrete Eingabevariablen vorgibst, will MatLab die auch sehen. Analog dazu kannst Du auch mit varargout flexibel Variablen ausgeben.

Gruß, Siggi.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.02.2015, 23:26     Titel:
  Antworten mit Zitat      
Hallo,

die Codezeile sollte wohl lauten:
Code:
if nargin < 4, nmax=10; end % nmax statt n


Und eine Bitte: wenn etwas "nicht funktioniert", dann bitte immer genau beschreiben, was du mit der Funktion versucht hast und was daran nicht funktioniert hat - also welche Fehlermeldung es gab oder welches unerwartete Verhalten.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 06.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2015, 12:55     Titel:
  Antworten mit Zitat      
Danke, aber ich möchte das Problem mit nargin lösen.
Leider funktioniert das auch nicht mit nmax. f und df sind als Handles angegeben. Außerdem gebe ich einen weiteren Wert an. Der fehlende Wert (könnten auch beide sein) soll dann auf einen Standardwert gesetzt werden. Für die obige Funktion erhalte ich mit newton(f,df,x0,nmax) folgende Fehlermeldung, wenn der fehlende Wert n ist:
Undefined function or variable 'n'. (Dasselbe dann auch für x0)
An der Funktionszeile möchte ich wenn möglich auch nichts ändern. Das sind vorgegebene Parameter.

Könnt ihr mir bitte weiterhelfen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.02.2015, 13:04     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Für die obige Funktion erhalte ich mit newton(f,df,x0,nmax) folgende Fehlermeldung, wenn der fehlende Wert n ist:

Was sind in dem Aufruf f, df, x0, nmax? Bitte ein konkretes Beispiel.
Wie kann n fehlen? Das wird doch als Schleifenindex definiert.

Mit der von mir vorgeschlagenen Anpassung laufen jedenfalls folgende Aufruf fehlerfrei durch:
Code:
[x, a] = newton1(@(x)x^2, @(x)2*x, 1, 10)
[x, a] = newton1(@(x)x^2, @(x)2*x, 1)
[x, a] = newton1(@(x)x^2, @(x)2*x)


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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 06.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2015, 14:49     Titel:
  Antworten mit Zitat      
Vielen Dank Harald. Ich hatte lediglich einen Tippfehler im Code, jetzt funktioniert alles. Very Happy Very Happy
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.