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

Endwerte aus random simulation speichern und histogramm help

 

Sebbok
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 14.04.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2015, 20:06     Titel: Endwerte aus random simulation speichern und histogramm help
  Antworten mit Zitat      
Hallo liebe Matlab gemeinde. Danke für die vielen tipps die ich hier aus dem Forum nutzen konnte für mein project. Aber jetzt bin ich an einer Stelle angelangt die mich zum verzweifeln bringt ... meine simulation simuliert ein hospital und reinigung etc und am ende kommt die prozentuale verunreinigung von contaminierten oberflächen und contaminierten Krankenschwestern ( nurses) raus. diese beiden END werte würde ich gerne in für jede simulation in einem vektor speichern und dann daraus ein histogramm erstellen um eine verteilung zu erkennen.
also X-achse contamination in % und Y-achse anzahl der simulationen die diesen wert hatten.

mein code
Code:
function [t,N,D,I] = SImulationhospital % junk function to run it without 2 files


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear variable;
close all;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Surfaces
N = 10000;          % numbers of surfaces
d =  9800;
i = 200;            % contaminated surfaces


D = d/N;
I = i/N;


% clean surfaces
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%nurses
NN = 825;                  % number Nurses
in = 325;               % contaminated nurses
dn = 500;                % decontaminated nurses

IN = in/NN;
DN = dn/NN;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 
 n = 101;

 while n > 1

 r = -0.375;
 v = 0.375;
 xz = (v-r).*rand(1)+r;
%
tt = -0.35;
vv = +0.35;
xx = (vv-tt).*rand(1)+tt;
%
rr = -0.1;
ss = 0.1;
st = (ss-rr).*rand(1)+rr;
%
zz = -0.2;
xr = 0.2;
xxs =(xr-zz).*rand(1)+zz;

a = 0.525 +xz ;%meana + xz;
b = 0.55 +xx;%meanb +xx;
p = 0.5 +st;%meanp +st;
q = 0.4 +xxs;% meanq +xxs;
 
     
 x0=[D I DN IN];
 tspan=[0,20];
 
 [t,x] = ode45(@surclean2334,tspan,x0,[],[a,b,p,q]);
 
    plot(t,x(:,1),'r','linewidth',2)
    hold on
    plot(t,x(:,2),'g','linewidth',2)
    hold on
    plot(t,x(:,3),'b','linewidth',2)
    hold on
    plot(t,x(:,4),'k','linewidth',2)
    hold on
    grid on
    xlabel('days')
    ylabel('fractions of surfaces & nurses')
    M = max(x);
    N = min(x);
     fprintf('maxima %g',xz);
     fprintf('minima %g',N);
   n = n-1;
 end

 legend ('surfaces clean','surfaces cont','clean nurses ','cont nurses');
 %legend ('boxoff');
 
 function drdt = surclean2334( ~,x,val )
%UNTITLED3 Summary of this function goes here
%D=x1  
%I=x2
%DN=x3
%IN=x4
%Nmax= 200;

a=val(1);
b=val(2);
p=val(3);
q=val(4);

if (a <= 0)
    a= 0;
else
    a=a;
end

if (b <= 0)
    b= 0;
else
    b=b;
end

if (p <= 0)
    p=0;
else
    p=p;
end
if (q <= 0)
    q=0;
else
    q=q;
end
          s1 = -x(1)*a+(1-x(1))*b;
          s2 = x(1)*a- b*(1-x(1));
          s3 = x(4)*q -p*x(2)*x(3);
          s4 = -x(4)*q +p*x(2)*x(3);
          drdt = [s1;s2;s3;s4];
               
end
end
 
 


Wenn man den code laufen lässt kommen also 100 simulationen zustande ich würde jetzt gerne von den 100 simulationen die endwerte speichern von allen 4 gleichungen und ein histogramm für 2 machen also die verteilung von anzahl der jeweiligen endergebnisse für oberflächen und nurses.

ich hab folgendes versucht
Code:
h = x(end);
           hist (h,50)


aber das funktioniert nicht und ich hab keine ahnung wie man werte auslesen lässt und in einem vektor dann speichert. -.- bitte um Hilfe oder link zu einer erklärung ( hab schon überall gesucht aber ich formuliere wohl meine frage nicht richtig jedenfalls kommt beim suchen nix bei raus )

Vielen Dank für alle die sich hier so intensiv bemühen ihr seid spitze !
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 14.04.2015, 23:57     Titel:
  Antworten mit Zitat      
ich würde die werte, ich glaube hier x, in einem cell array speichern. dann hast du am ende alle. wie man cell arrays adressiert steht in der doc. dann könnte man mit cellfun arbeiten denke ich. alternativ kann man auch die berechnung deiner werte die du haben willst also s1 bis s4 in die schleife zihen und diese in einer matrix speichern. kleine anmerkung. ich würde auch hier cell arrays benutzen da das verstecken eines index im namen immer schlecht ist.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Sebbok
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 14.04.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2015, 00:05     Titel:
  Antworten mit Zitat      
Vielen Dank ich werde das gleich mal morgen früh ausprobieren. Bin leider noch totaler anfänger und musste mir bis jetzt alles selber zusammenreimen. Was meinst du mit indicis im Namen verstecken ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 15.04.2015, 00:15     Titel:
  Antworten mit Zitat      
Zitat:
Was meinst du mit indicis im Namen verstecken ?

na sowas zb
Code:
s1 = -x(1)*a+(1-x(1))*b;
          s2 = x(1)*a- b*(1-x(1));
          s3 = x(4)*q -p*x(2)*x(3);
          s4 = -x(4)*q +p*x(2)*x(3);

besser ist:
Code:
s(1) = -x(1)*a+(1-x(1))*b;
          s(2) = x(1)*a- b*(1-x(1));
          s(3)= x(4)*q -p*x(2)*x(3);
          s(4) = -x(4)*q +p*x(2)*x(3);

das kann man dann nähmlich einfacher weiter verarbeiten.
_________________

richtig Fragen
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: 16.04.2015, 13:37     Titel: Re: Endwerte aus random simulation speichern und histogramm
  Antworten mit Zitat      
Hallo Sebbok,

Noch ein paar Kommentare zum Code:

Code:
function [t,N,D,I] = SImulationhospital

% Dies löscht die Variable mit Namen "variable":
clear variable;
% Diese Variable existiert hier aber noch gar nicht. Vielleicht meinst Du:
% clear variables
% Aber am Anfang einer Funktion existieren gar keine Variablen, also bringt
% ein clear hier gar nichts.

close all;  % Sollen wirklich alle andern Fenster geschlossen werden? Wozu?
clc;

if (a <= 0)
    a= 0;
else
    a=a;  % Das ist überflüssig!
end
% Einfacher:
a = max(a, 0);

Die MAX Funktion ist allerdings nicht glatt. Das ist ein ernstes Problem, denn ODE45 kann genauso wie auch die anderen ODE-Integratoren von Matlab nur glatte Funktionen integrieren. Unstetigkeiten in der zu integrierenden Funktion reduzieren entweder die Schrittweite so stark, dass die Unstetigkeit durch die stark zunehmenden Rundungsfehler verdeckt wird - dann ist das Ergebnis aber ebenfalls von rundungsfehlern dominiert. Oder der Integrator stoppt mit einer Fehlermeldung. Wenn man großes Pech hat, hüpft der Integrator zufällig über die Unstetigkeitsstelle und das Ergebnis ist sehr unzuverlässig ohne dass man das Problem bemerken kann.

Deswegen ist es eine feste Grundregel in der Numerik, alle unstetigen Befehle aus den zu integrierenden Funktionen rauszuhalten: MIN, MAX, ABS, RAND, DATE, IF, ...
Siehe auch:
http://saba.kntu.ac.ir/eecd/ecourse.....b%20premier/Chapter08.pdf
http://comjnl.oxfordjournals.org/content/13/4/401.full.pdf
http://pcmap.unizar.es/numerico/upload/DisconRep-2002.pdf

Gruß, Jan
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.