Team:TU Munich/Modeling/Yeast Growth
From 2012.igem.org
(Difference between revisions)
(→Yeast Growth) |
|||
Line 1: | Line 1: | ||
{{Team:TU_Munich/Header}} | {{Team:TU_Munich/Header}} | ||
- | = Yeast Growth = | + | = Yeast Growth Model= |
+ | |||
+ | == Code == | ||
+ | |||
+ | <pre> | ||
+ | |||
+ | data1=[1,1.3625,2.875,5.25]; | ||
+ | data1=[1,2.6279,8.3721,12.6279]; | ||
+ | data1=[1,2.0299,6.8955,9.5671]; | ||
+ | data1=[1,1.12777,1.68888,4.044444,6.5555]; | ||
+ | data1=[1,0.9339,1.2264,2.0377,4.7169]; | ||
+ | data1=[1,1.5,2.2857,6.3571,14.2857]; | ||
+ | data1=[1,1.1666,1.51851,3.85185,8.87037]; | ||
+ | data1=[1,1.1961,1.7058,5.0980,12.4509]; | ||
+ | data1=[1,1.0888888,0.95555,1.0222222]; | ||
+ | data1=[1,0.87234,0.936170,1.361702,3.510638]; | ||
+ | data1=[1,1.48863,2.272727,9.363636]; | ||
+ | data1=[1,1.441860,2.465116,7.2558139]; | ||
+ | data1=[1,1.52439,2.17073,9.097560]; | ||
+ | data1=[1,1.04109,1.232876,1.6712328]; | ||
+ | data1=[1,0.70967,0.854837,1.0322580,2.9516162]; | ||
+ | data1=[1,0.93617,1.021276,1.7446808,3.8297872]; | ||
+ | data1=[1,2.342857,4.342857,14.8857142]; | ||
+ | data1=[1,1.8625,3.425,12.4]; | ||
+ | data1=[1,2.4848,4.3030303,15.45454545]; | ||
+ | data1=[1,1.603773,4.603773]; | ||
+ | data1=[1,1.895844,6.541666]; | ||
+ | data1=[1,2.702127,8.936170]; | ||
+ | data1=[1,1.42857,4.5]; | ||
+ | data1=[1,1.4791,3.83333]; | ||
+ | data1=[1,3.15,11.25]; | ||
+ | data1=[1,2.56,9.12]; | ||
+ | data1=[1,2.4814,10.1851]; | ||
+ | data1=[1,2.393939,9.363636]; | ||
+ | data1=[1,2,8,17.25]; | ||
+ | data1=[1,2.16666,9,16.1666]; | ||
+ | data1=[1,2.1428,9.5714,24]; | ||
+ | |||
+ | |||
+ | t=[0,80,270,450]; | ||
+ | t=[0,70,145,340,520]; | ||
+ | t=[0,70,145,340]; | ||
+ | t=[0,80,210]; | ||
+ | t=[0,100,250,335]; | ||
+ | t=[1,2.5,14.16666,34.1666] | ||
+ | |||
+ | |||
+ | |||
+ | fun = @(k,data) sum((exp(k*t)-data).^2); | ||
+ | |||
+ | [k, RN] = fminsearch(@(k) fun(k(1),data1)/k(2) - length(t)*log(1/(sqrt(2*pi*k(2)))),[0.005 1]); | ||
+ | |||
+ | |||
+ | kc=0.01; | ||
+ | acc=0; | ||
+ | nacc=0; | ||
+ | n=10000; | ||
+ | sample=zeros(n,1); | ||
+ | prob=zeros(n,1); | ||
+ | lh=zeros(n,1); | ||
+ | accepted=zeros(n,1); | ||
+ | |||
+ | kprev = k(1); | ||
+ | s=1; | ||
+ | while (s<n+1) | ||
+ | if(mod(s,500)==0) | ||
+ | (s)/n; | ||
+ | display(['Acceptance Rate: ' num2str(acc/(nacc+acc)*100) '%']) | ||
+ | end | ||
+ | try | ||
+ | % the step is sampled from a multivariate normal distribution and | ||
+ | % scaled with kc | ||
+ | kcur = kprev + kc*mvnrnd(0,0.001); | ||
+ | sample(s,:) = kcur; | ||
+ | % calculate the a-posteriori probability of the new sample | ||
+ | prob(s) = -fun(kcur,data1)/k(2); | ||
+ | if s>1 | ||
+ | % check whether we reject the sample or not. mind that the | ||
+ | % probability is log-scaled | ||
+ | if log(rand(1)) < +prob(s)-prob(s-1) | ||
+ | % update current sample | ||
+ | kprev = kcur; | ||
+ | % count accepted samples | ||
+ | acc=acc+1; | ||
+ | % update waitbar | ||
+ | %waitbar((k-1)/n) | ||
+ | % save current acceptance rate for post-processing | ||
+ | lh(s)=acc/(nacc+acc)*100; | ||
+ | s=s+1; | ||
+ | %p = [kcur sigma]; | ||
+ | %plotETOHPROM | ||
+ | %drawnow | ||
+ | else | ||
+ | % count not accepted samples | ||
+ | nacc=nacc+1; | ||
+ | end | ||
+ | else | ||
+ | % we need to do something else for the first sample. | ||
+ | if log(rand(1)) < prob(s)+RN | ||
+ | kprev = kcur; | ||
+ | acc=acc+1; | ||
+ | %waitbar((k-1)/n) | ||
+ | lh(s)=acc/(nacc+acc)*100; | ||
+ | s=s+1; | ||
+ | else | ||
+ | nacc=nacc+1; | ||
+ | end | ||
+ | end | ||
+ | |||
+ | catch ME | ||
+ | disp(ME) | ||
+ | end | ||
+ | end | ||
+ | disp(['Doubling Time: ' num2str(log(2)/k(1)) ' STD: ' num2str(std(log(2)./sample))]) | ||
+ | |||
+ | </pre> |
Revision as of 13:52, 21 October 2012
Yeast Growth Model
Code
data1=[1,1.3625,2.875,5.25]; data1=[1,2.6279,8.3721,12.6279]; data1=[1,2.0299,6.8955,9.5671]; data1=[1,1.12777,1.68888,4.044444,6.5555]; data1=[1,0.9339,1.2264,2.0377,4.7169]; data1=[1,1.5,2.2857,6.3571,14.2857]; data1=[1,1.1666,1.51851,3.85185,8.87037]; data1=[1,1.1961,1.7058,5.0980,12.4509]; data1=[1,1.0888888,0.95555,1.0222222]; data1=[1,0.87234,0.936170,1.361702,3.510638]; data1=[1,1.48863,2.272727,9.363636]; data1=[1,1.441860,2.465116,7.2558139]; data1=[1,1.52439,2.17073,9.097560]; data1=[1,1.04109,1.232876,1.6712328]; data1=[1,0.70967,0.854837,1.0322580,2.9516162]; data1=[1,0.93617,1.021276,1.7446808,3.8297872]; data1=[1,2.342857,4.342857,14.8857142]; data1=[1,1.8625,3.425,12.4]; data1=[1,2.4848,4.3030303,15.45454545]; data1=[1,1.603773,4.603773]; data1=[1,1.895844,6.541666]; data1=[1,2.702127,8.936170]; data1=[1,1.42857,4.5]; data1=[1,1.4791,3.83333]; data1=[1,3.15,11.25]; data1=[1,2.56,9.12]; data1=[1,2.4814,10.1851]; data1=[1,2.393939,9.363636]; data1=[1,2,8,17.25]; data1=[1,2.16666,9,16.1666]; data1=[1,2.1428,9.5714,24]; t=[0,80,270,450]; t=[0,70,145,340,520]; t=[0,70,145,340]; t=[0,80,210]; t=[0,100,250,335]; t=[1,2.5,14.16666,34.1666] fun = @(k,data) sum((exp(k*t)-data).^2); [k, RN] = fminsearch(@(k) fun(k(1),data1)/k(2) - length(t)*log(1/(sqrt(2*pi*k(2)))),[0.005 1]); kc=0.01; acc=0; nacc=0; n=10000; sample=zeros(n,1); prob=zeros(n,1); lh=zeros(n,1); accepted=zeros(n,1); kprev = k(1); s=1; while (s<n+1) if(mod(s,500)==0) (s)/n; display(['Acceptance Rate: ' num2str(acc/(nacc+acc)*100) '%']) end try % the step is sampled from a multivariate normal distribution and % scaled with kc kcur = kprev + kc*mvnrnd(0,0.001); sample(s,:) = kcur; % calculate the a-posteriori probability of the new sample prob(s) = -fun(kcur,data1)/k(2); if s>1 % check whether we reject the sample or not. mind that the % probability is log-scaled if log(rand(1)) < +prob(s)-prob(s-1) % update current sample kprev = kcur; % count accepted samples acc=acc+1; % update waitbar %waitbar((k-1)/n) % save current acceptance rate for post-processing lh(s)=acc/(nacc+acc)*100; s=s+1; %p = [kcur sigma]; %plotETOHPROM %drawnow else % count not accepted samples nacc=nacc+1; end else % we need to do something else for the first sample. if log(rand(1)) < prob(s)+RN kprev = kcur; acc=acc+1; %waitbar((k-1)/n) lh(s)=acc/(nacc+acc)*100; s=s+1; else nacc=nacc+1; end end catch ME disp(ME) end end disp(['Doubling Time: ' num2str(log(2)/k(1)) ' STD: ' num2str(std(log(2)./sample))])