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

Plotten einer Funktion mit 2 Variablen und einer Schleife

 

Backfisch
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 28.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2015, 13:37     Titel: Plotten einer Funktion mit 2 Variablen und einer Schleife
  Antworten mit Zitat      
Hallo Leute,

ich mache momentan ein Praktikum und wurde dazu genötigt, mit MATLAB eine Formel zu berechnen und zu plotten Laughing . Genötigt deshalb, weil ich absolut keine Erfahrung mit dem Programm habe und es von der Pike auf lernen muss. Ich entschuldige mich auch schon für formelle Fehler, da dies mein erster Beitrag ist.

Nun zu meinem Problem: die angesprochene Gleichung enthält zwei Variablen und eine Summe, sprich, es muss mit einer Schleife gearbeitet werden. Ich weiss nun weder, ob die von mir geschriebene Schleife richtig ist, noch wie ich die Summe implementiere. Zudem gibt mir das Programm einen Fehler an, in dem es heißt, dass ich die Variable c gefälligst preallocaten soll ("Subscripted assignment dimension mismatch." bei c(index_x, index_t) = c1-c), obwohl ich dies per "zeros"-Befehl getan habe. Ich bitte um Hilfe, da ich nicht mehr weiter weiß. Vielen Dank schonmal im voraus und viele Grüße, Backfisch

Formel:
c(x,t)=c1-SUMME(n bis unendlich)[4*(c1-c0)/(n*pi)*exp{-((n^2*pi^2*D*t)/l^2)}*sin((n*pi*x)/l)}]
Siehe auch Anhang

Hier mein Code:
Code:
clear all;
close all;
clc;

distance_step = 0.1e-4;         % Größe der Distanzschritte
time_step = 1e-3;               % Größe der Zeitschritte

c0 = 0;                         % Anfangskonz. in SC (mmol/L)
c1 = 100;                       % äußere Randschichtkonz. in SC (mmol/L)
D = 5e-12;                      % Diffusionskoeffizient (m^2/s)
l = 2e-5;                       % Gesamtdicke SC (m)
 
x = [0:distance_step:l];        % Strecke von 0 bis 2e-5 mit Schrittgröße distance_step
final_time = 1;                 % Endzeit
t = [0:time_step:final_time];   % Strecke von 0 bis l mit Schrittgröße time_step
c = zeros(length(x),length(t)); % Erstellen eines Arrays zur Verringerung der Rechenzeit

for index_x=1:1:length(x)       % Schleifenstart + Variablendefinierung-->x geht von 1 bis Ende mit Schrittgröße 1
    for index_t=1:1:length(t)   % schleifenstart + Variablendefinierung-->t geht von 1 bis Ende mit Schrittgröße 1
        c = 100;
        for n=1:2:100           % für n=1-100 in Zweierschritten
            c = c - 4*(c1-c0/(n*pi)) * exp(-(n^2*pi^2*D*t)/(l^2)) * sin(n*pi*x(index_x)/l); %Formel, Einfügen der Summe?
        end
        c(index_x, index_t) = c1-c;
    end
end

figure(1);
plot(x,c);
xlabel('Thickness (l)');
ylabel('Concentration (c)');
title('Plot')


 

Ich habe mir Kommentare zu den einzelnen Befehlen geschrieben. Falls welche davon falsch sein sollten, wäre ich für eine Korrektur dankbar Rolling Eyes .

Diffusionsgleichung - Kopie.png
 Beschreibung:
Formel

Download
 Dateiname:  Diffusionsgleichung - Kopie.png
 Dateigröße:  9.79 KB
 Heruntergeladen:  334 mal
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: 28.01.2015, 16:51     Titel: Re: Plotten einer Funktion mit 2 Variablen und einer Schleif
  Antworten mit Zitat      
Hallo Backfisch,

Herzlich willkommen im Forum!

Zitat:
Zudem gibt mir das Programm einen Fehler an, in dem es heißt, dass ich die Variable c gefälligst preallocaten soll ("Subscripted assignment dimension mismatch." bei c(index_x, index_t) = c1-c), obwohl ich dies per "zeros"-Befehl getan habe.

Meldungen über "Preallocation" sind Hinweise von MLint, aber keine Fehlermeldungen. "Subscripted assignment mismatch" ist dagagen eine Fehlermeldung. Um sie im Forum zu diskutieren ist es hilfreich eine vollständige Kopie zu posten.

Code:
c(index_x, index_t) = c1-c;

Auf der rechten Seite steht ein Element der Matrix "c". Auf der linken wird vom Skalar c1 die gesmte Matrix c abgezogen, sodass Du eine Matrix erhältst, die so groß ist wie c selbst. Nun kann man aber einem Element keine Matrix zuweisen.

Wenn Du den "brutalen CLEAR-Header" weglässt, könntest Du den Debugger benutzen um das Problem zu untersuchen:
Code:

Da "clear all" auch die Debugger Breakpoints löscht ist es ein wirklich bösartiger Feind des Programmierers. Da Programme nur in den seltensten Fällen bug-frei geschrieben werden, ist es grundsätzlich auf jeden Fall zu vermeiden das Debuggen zu verhindern. Leider empfehlen aber immer noch Dozenten Scripts mit diesen Befehlen zu starten. Seufz.

Viele Grüße, 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: 19.02.2015, 08:45     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich konnte notgedrungen die letzten Tage nicht ins Netz und deine Tipps umsetzen Smile. Habe den clear-Header jetzt auf den Müll geschmissen und den debugger laufen lassen. Jetzt funktioniert alles, aber das Konzept wurde über den Haufen geworfen und durch ein Neues ersetzt Rolling Eyes .

Danke nochmal für die Hilfe!

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.