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 Matrixindex "index must be a positive integ

 

Backfisch
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 28.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2015, 14:55     Titel: Problem mit Matrixindex "index must be a positive integ
  Antworten mit Zitat      
Hallo Leute,

ich muss mich zu Anfang direkt entschuldigen, dass ich das Thema nochmal anschneide, aber es geht um einen Matrixindex, bzw. um einen Schritt in einer Schleife, der kleiner als 1 ist.
Da ich absolut keine Matlaberfahrung habe und mehr oder weniger ins kalte Wasser geworfen wurde, muss ich mir Matlab nun selbst beibringen. Folgender Code funktioniert einwandfrei und gibt einen Plot aus:
Code:

close all;
clc;

%ad- & absorbierter Teil
KLPC = 4;                  
KM = 5;                    

c_diff = [0:1:20];
c_ad = zeros(length(c_diff));
c_ad_total = zeros(1,4);

for c_diff = [0:1:20]
    c_ad = (KLPC * c_diff) / (KM + c_diff);
    c_ad_total(c_diff+1) = c_ad;  
end

plot(c_ad_total,'linewidth',2,'color','blue');
hold on;
xlim([1 20]);
ylim([0 3.5]);
xlabel('c_D_i_f_f [mol/L]');
ylabel('c_A_d [mol/L]');
title('ad- & absorbierter Teil');
 

Den hold on-Befehl kann man hierbei ignorieren. Der restliche Teil des Codes geht noch weiter, ist aber irrelevant.

Mein Problem besteht darin, dass ich den obenstehenden Code nun mit kleineren Werten und Schritten brauche. Folgender Code gibt mir den Fehler "Attempted to access c_ad_total(2e-05); index must be a positive integer or logical." aus.
Code:

close all;
clc;

%ad- & absorbierter Teil
KLPC = 4;                  
KM = 5;

c_diff = [1e-5:1e-5:1e-3];
c_ad = zeros(length(c_diff));
c_ad_total = zeros(1,20);

for c_diff = [1e-5:1e-5:1e-3]
    c_ad = (KLPC * c_diff) / (KM + c_diff);
    c_ad_total(c_diff+1e-5) = c_ad;  
end

 

Ich habe nun soweit recherchiert, dass es wohl daran liegt, dass mein Index nicht kleiner als 1 sein darf und ich am besten eine Hilfsvariable vor der Schleife benutzen soll, die stetig größer wird. Ich habe nun allerdings keine Ahnung, wie das als Code auszusehen hat und dazu leider auch nichts konkretes über die Suchfunktion gefunden. Ich hoffe, ich nerve mit diesem - vermutlich einfachen - Problem nicht.

Viele Grüße,
Backfisch
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: 17.03.2015, 15:16     Titel: Re: Problem mit Matrixindex "index must be a positive i
  Antworten mit Zitat      
Hallo Backfisch,
Code:
KLPC = 4;                  
KM = 5;

c_diff = 1e-5:1e-5:1e-3;  % [] um Vektoren ist Zeitverschwendung
% c_ad = zeros(length(c_diff));  % Pre-allocation überflüssig, wenn Array nicht wächst
n = length(c_diff);
c_ad_total = zeros(1, n);

% for c_diff = [1e-5:1e-5:1e-3]  % c_diff redefined !?
for k = 1:n
    c_ad_total(k) = (KLPC * c_diff(k)) / (KM + c_diff(k));
end

Oder einfacher ohne Schleife:
Code:
c_diff = 1e-5:1e-5:1e-3;
c_ad_total = (KLPC * c_diff) ./ (KM + c_diff);
 


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 28.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2015, 13:18     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für deine schnelle Hilfe!
Nach ein paar Anpassungen läuft mein Code jetzt sahnig Cool.

Viele Grüße,

Backfisch
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.