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

Problem mit der Übergabe von Werten

 

greenapple
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 18.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2013, 15:17     Titel: Problem mit der Übergabe von Werten
  Antworten mit Zitat      
Hallo,
ich bin neu hier und nutze seit einiger Zeit Matlab für die Uni.
Habe nun schon seit einigen Tagen ein Problem mit einer Aufgabe aus unserer Übungsgruppe.
Es get um die Reaktion in einem Rührkesselreaktor A+2B--->C.
Ich kann leider meinen Fehler einfach nicht finden.

Wäre sehr dankbar wenn ihr mir weiterhelfen könntet

Hier die Hauptfunktion
Code:

function auswertung

clear all; close all; clc; % Aufräumen

%Reaktorinhalt
p.VR=5000; % entspricht 5m^3

%Reaktionsgeschw.
p.k1=30; % 30

%Gesamtvolumenstrom
p.FAzu=50; % entspricht 0,05m^3/s
p.FBzu=50;
p.Fab=100;

% Zulaufkonzentration
p.CAzu=1;
p.CBzu=2;
%p.CCzu=0;


x0 = 0;
t_span = [ 0 500 ];
ops = odeset;

[t,c] = ode45(@berechnung,t_span,x0,ops,p);


figure;
plot(t,c,'b-');
grid on;
xlabel('Zeit');
ylabel('Füllhöhe');
titel ('Verlauf der Füllhöhe über die Zeit');
end
 


und hier die Nebenfunktion

Code:

% Berechnung der Werte für die Hauptfunktion
% Rückgabe der Werte für die Ausgabe

function dc = berechnung( t,c,p )

% Übergabe der Werte
cA=c(1);
cB=c(2);
cC=c(3);

r1=p.k1*cA*cB^2;

dcA=p.FAzu/p.VR*p.CAzu-p.Fab/p.VR*cA-r1;

dcB=p.FBzu/p.VR*p.CBzu-p.Fab/r.VR*cB-2*r1;

dcC=(-p.Fab/p.VR)+cC+r1;


dc=[dcA; dcB; dcC];

dcdt=dcdt'; % transponiert den lösungsvektor da
            % Rückgabewert ein Spaltenvektor sein muss

end
 


berechnung.m
 Beschreibung:

Download
 Dateiname:  berechnung.m
 Dateigröße:  455 Bytes
 Heruntergeladen:  184 mal
auswertung.m
 Beschreibung:

Download
 Dateiname:  auswertung.m
 Dateigröße:  805 Bytes
 Heruntergeladen:  183 mal
Private Nachricht senden Benutzer-Profile anzeigen


Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 19.12.2013, 01:58     Titel:
  Antworten mit Zitat      
Hallo,

Die Fehlermeldung lautet
Code:
Index exceeds matrix dimensions.

Error in berechnung (line 8)
cB=c(2);

Error in odearguments (line 88)
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

Error in ode45 (line 114)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

Error in auswertung (line 26)
[t,c] = ode45(@berechnung,t_span,x0,ops,p);

dh. in berechnung.m gibt es einen Fehler in Zeile 8
Code:
denn "Index exceeds matrix dimensions." Das übernommene c ist 0 (1x1), du möchtest cB aber c(2) zuweisen, was nicht geht, da es c(2) nicht gibt. Die Übergabepßarameter in auswertung.m Zeile 26 passen nicht.


http://www.mathworks.de/de/help/mat.....features.html#brqxeeu-177

Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.12.2013, 13:45     Titel: Re: Problem mit der Übergabe von Werten
  Antworten mit Zitat      
Hallo greenapple,

Das Posten der Fehlermeldung ist erforderlich, wenn Du Hilfestellung beim Lösen benötigst.
Der Debugger hilft sehr gut beim Finden von Problemen. Allerdings verhinderst Du den Einsatz, indem Du alle Breakpoints löschst:
Code:

function auswertung

clear all; close all; clc; % Aufräumen
 

Diese Art "auszuräumen" ist sinnfrei. "clear all" löscht zwar alle lokalen Variblen, am Anfang einer Funktion gibt es aber gar keine solchen. Das Löschen der breakpoints ist noch übler. Und dass damit auch alle geladenen Funktionen aus dem Speicher netfernt werde und ein zeitaufwändiges Nachladen von der Festplatte erforderlich machen, ist unpraktisch und Zeitverschwendung. Ich rate deshalb ausdrücklich und immer wieder von dieser inflationär genutzen Zeile ab.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
greenapple
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 18.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2013, 19:25     Titel:
  Antworten mit Zitat      
Danke schon mal
werde mich informieren wieso sie das "Aufräumen" bei jedem Programm als so wichtig empfinden, haben wir zumindest so gelernt.

Das Problem in Zeile 26 mit dem ode45 solver verstehe ich allerdings nicht, habe ihn in der Form schon öfter verwendet und es ging bis jetzt immer.

Code:
[t,c] = ode45(@berechnung,t_span,x0,ops,p);
 


Auch was ich an dem "cB=c(2);" ändern muss geht mir nicht ganz ein.
Habe den erwähnten Artikel überfolgen konnte aber nichts passendes diesbezüglich finden.

Durch diese Aufspaltung weise ich doch der Variablen "c" die übertragen wird mehere Werte zu die dann als Vektor übertragen werden.

Code:
cA=c(1);
cB=c(2);
cC=c(3);


Wäre froh wenn mir jemand helfen könnte bin leider noch am Anfang mit matlab und es gestaltet sich teils echt kompliziert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 19.12.2013, 20:19     Titel:
  Antworten mit Zitat      
Hallo,

greenapple hat Folgendes geschrieben:

Auch was ich an dem "cB=c(2);" ändern muss geht mir nicht ganz ein.

Vermutlich nichts; hat aber auch niemand geschrieben Wink


greenapple hat Folgendes geschrieben:
Habe den erwähnten Artikel überfolgen konnte aber nichts passendes diesbezüglich finden.

Der hat mit deinem Problem auch nur insofern etwas zu tun, als dass er dir den Debugger näher bringen soll.


greenapple hat Folgendes geschrieben:
Das Problem in Zeile 26 mit dem ode45 solver verstehe ich allerdings nicht, habe ihn in der Form schon öfter verwendet und es ging bis jetzt immer.

Ich zitiere mich mal selber:
Seban hat Folgendes geschrieben:
Das übernommene c ist 0 (1x1), du möchtest cB aber c(2) zuweisen, was nicht geht, da es c(2) nicht gibt. Die Übergabepßarameter in auswertung.m Zeile 26 passen nicht.


Schau dir also an, welche Variablen du in Zeile 26 beim Aufruf der Funktion ode45 übergibst und welche Variablen du in berechnung.m verwenden möchtest.

Grüße,
Seban
_________________

Richtig fragen
Debugging
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.