MATLAB

2016-03-21 40 views
1

'da ode45 kullanılırken bir işlevdeki parametreler nasıl değiştirilir Bir işlev (bir SIR modeli için) ve sonra bu işlevi çözen ve bu modele uymaya çalıştığım verilerle karşılaştıran bir komut dosyası var. Böylece fit'i optimize etmek için fonksiyondaki bir parametreyi değiştirmek için bir for döngüsü çalıştırmaya çalışıyorum. Ben onları eliyle değiştirmek zorunda kalmadan döngüsü için benim (r) ve (a) parametreleri değiştirmek için merak ediyorum:MATLAB

function ydot=epidemic(t,y) 
r=0.000001; 
a=1/3; 
ydot=zeros(3,1); 
ydot(1)=-r*y(1)*y(2); 
ydot(2)=r*y(1)*y(2)-a*y(2); 
ydot(3)=a*y(2); 
end 

ve

[t,y]=ode45('epidemic',[0:222], [70500,1,0]) 

Teşekkür

+1

Olası kopyası [MATLAB: Bir parametreyi bir işleve nasıl iletebilirim?] (Http://stackoverflow.com/questions/2256229/matlab-how-do-i-pass-a-parameter-to-a -işlev) veya [bu] (http://stackoverflow.com/questions/7680224/matlab-ode45-how-to-change-a-parameter-inside-it-while-calling-it). Ayrıca bakınız [ilgili belgeler] (http://www.mathworks.com/help/matlab/ref/ode45.html#bu3uhuk) ve [bu] (http://www.mathworks.com/help/matlab/math /parameterizing-functions.html). – horchler

cevap

2

You aşağıdaki kullanabilirsiniz: Eğer fonksiyonu

function ydot=epidemic(t,y,r,a) 
    ydot=zeros(3,1); 
    ydot(1)=-r*y(1)*y(2); 
    ydot(2)=r*y(1)*y(2)-a*y(2); 
    ydot(3)=a*y(2); 
end 

için r ve bir parametre ekleyin ve sonra gibi ode45 fonksiyonu geçmesi bu

r = 0.000001 ; 
a = 1/3 ; 
[t,y]=ode45(@(t,y)epidemic(t,y,r,a),[0:222], [70500,1,0]) 

Temel olarak, @ (t, y), epidemik (t, Y, R, a) bağımsız değişken (t, y) ve burada r ve hemen yukarıda tanımlandığı değerleri kullanan yeni bir fonksiyon tanımlandığı gibidir.

Tüm bunları bir for döngüsüne yerleştirebilirsiniz.