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

Unterprogrammaufruf endet immer mit Fehlermeldung

 

Kathrin
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 21.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2009, 19:36     Titel: Unterprogrammaufruf endet immer mit Fehlermeldung
  Antworten mit Zitat      
Hallo ich habe ein Problem!

Vor kurzem habe ich begonnen mit Matlab zu arbeiten. Ich habe mir zum Test ein Programm mit Unterprogrammaufruf heruntergeladen. Ich bekomme beim Aufruf folgende Fehlermeldung:

??? Subscript indices must either be real positive integers or logicals.

Error in ==> C:\Dokumente und Einstellungen\TiKath\Desktop\Studium\Euler\euler1.m
On line 21 ==> x(I) = x(I-1) + h*f( t(I-1), x(I-1) );

Das Programm:
Code:

function [t, x] = euler1(f, tBereich, x0, h)
% Integration der eindimensionalen DGL
% x’ = f(x, t)
% mit der Eulerformel.
% Argumente
% Funktion f
% Zeitintervall [tStart tEnd]
% Startwert x(0) = x0
% Schrittweite h
% Ergebnis
% Spaltenvektor t mit Zeitwerten
% Spaltenvektor x mit Naeherungsloesung x(t)
t0 = tBereich(1); % Anfangszeit
t1 = tBereich(2); % Endzeit
N = ceil((t1 - t0)/h) + 1; % Zahl der Zeitpunkte
x = zeros(N,1); % Vektoren fuer die Loesung
t = zeros(N,1);
x(1) = x0;
t(1) = t0;
for I = 2:N
x(I) = x(I-1) + h*f( t(I-1), x(I-1) );
t(I) = t(I-1) + h;
end
 


Das zugehörige Unterprogramm:
Code:

function xdot = radioaktiv(t, x)
% rechte Seite der DGL beim radioaktiven Zerfall
% Parameter lambda fest
lambda = 0.1;
xdot = -lambda*x;
 


Aufgerufen habe ich es:
Code:

[t, x] = euler1(@radioaktiv, [0 60], 10000, 1.0);
 

bzw.
Code:

[t, x] = euler1(@radioaktiv, [0 60], [10000], 1.0);
 

bzw. mit einer Variable Bereich mit [0 60] :
Code:

[t, x] = euler1(@radioaktiv, Bereich, 10000, 1.0);
 


Kann mir da jemand helfen?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

ich habe das bei mir mal laufenlassen, und habe keine Probleme.
Setze doch mal einen Haltepunkt (break point) in die Zeile 21 und schau dir im Workspace an, was I ist. Das erscheint mir am ehesten ein möglicher Grund für diese Fehlermeldung.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 21.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2009, 20:56     Titel:
  Antworten mit Zitat      
Ich habe die Funktion mal in ein Matalb Programm umgewandelt
Also so:
Einmal ohne Funktionsübergabe
Code:

%f=@radioaktiv;
tBereich=[0 60];
x0=10000;
h=1.0;

t0 = tBereich(1); % Anfangszeit
t1 = tBereich(2); % Endzeit
N = ceil((t1 - t0)/h) + 1; % Zahl der Zeitpunkte
x = zeros(N,1); % Vektoren fuer die Loesung
t = zeros(N,1);
x(1) = x0;
t(1) = t0;
for I = 2:N
    %dummy=f( t(I-1), x(I-1) )
    dummy=radioaktiv( t(I-1), x(I-1) );
    x(I) = x(I-1) + h*dummy;
    t(I) = t(I-1) + h;
end
 

und es läuft.

und einmal mit Funktionsübergabe:
Code:

f=@radioaktiv;
tBereich=[0 60];
x0=10000;
h=1.0;


t0 = tBereich(1); % Anfangszeit
t1 = tBereich(2); % Endzeit
N = ceil((t1 - t0)/h) + 1; % Zahl der Zeitpunkte
x = zeros(N,1); % Vektoren fuer die Loesung
t = zeros(N,1);
x(1) = x0;
t(1) = t0;
for I = 2:N
    dummy=f( t(I-1), x(I-1) )
    %dummy=radioaktiv( t(I-1), x(I-1) );
    x(I) = x(I-1) + h*dummy;
    t(I) = t(I-1) + h;
end
 

Und es läuft nicht. Sad

Ich weiß nicht warum er die Funktion so nicht haben will. Ich hatte es eben noch bei einem Bekannten auf Octave getestet und da lief es auch ohne Probleme.
Kann das ein Bug in meiner Version sein?
Mein Matlab hat die Version 6.5.0.180913a Release 13 June 18, 2002

Bzw. was kann man sonst noch machen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich weiss nicht, ob es in dieser Version Function Handles überhaupt schon gab. Da solltest du ggf. mal die Doku deiner Version lesen.

Eine Alternative wäre
Code:


Oder der Umstieg auf eine neuere MATLAB-Version.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 21.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2009, 18:13     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine Antwort.
Leider hat es mit inline auch nicht funktioniert. Vielleicht sollte ich wirklich auf eine neuere Version umsteigen.
Seltsam ist nur, dass vor einigen Wochen ein anderer Matlab Code mit Funktionsüergabe auf meinem Notebook funktioniert hat, aber jetzt funktioniert es nicht mehr.
Vielleicht hat es mit einem Update zu tun.

Gruss Kathrin
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.