Matlab用導數作定性分析
5.1知識要點:函數作圖 —用導數定性描述函數
【 clf,x=linspace(-8,8,30);f=(x-3).^2./(4*(x-1)); plot(x,f) 】
【 fplot('(x-3)^2/(4*(x-1))',[-8,8])) 】
【 clf,x=sym('x'); f=(x-3)^2/(4*(x-1)); ezplot(f,[-8,8]) ,
title('(x-3)^2/(4*(x-1))','fontsize',11) ,
xlabel('x','fontsize',11) 】
◆按函數繪圖步驟繪制完整的函數圖,直接用Matlab符號演算完成必須的計算。
【 df_dx=diff('(x-3)^2/(4*(x-1))') 】
【 sym('x');factor(df_dx) 】
【 f=inline('(x-3)^2/(4*(x-1))');X1=[-1,f(-1)],X2=[3,f(3)] 】
求符號二階導數d2y/dx2:
【 df2_dx2=diff(‘(x-3)^2/(4*(x-1))’,2) 】
二階導數的因式分解:
【 sym('x'); factor(df2_dx2) 】
【 syms x
f_left=limit('(x-3)^2/(4*(x-1))',x,1,'left')
f_right=limit('(x-3)^2/(4*(x-1))',x,1,'right') 】
【 syms x
f_minus_inf=limit('(x-3)^2/(4*(x-1))',x,-inf,'right')
f_plus_inf=limit('(x-3)^2/(4*(x-1))',x,inf,'left') 】
③有無斜漸近線?
【 syms x, a=limit('((x-3)^2/(4*(x-1)))/x',x,inf) 】
【 b=limit('(x-3)^2/(4*(x-1))-(1/4)*x',x,inf,'left') 】
5.2實驗與觀察:微分方程的定性解圖示
5.2.1人口增長的預測
1.Malthus模型
2.Logistic模型
【 N=dsolve('DN=r*(1-N/Nm)*N','N(t0)=N0') 】
3.微分方程解的定性分析
觀察1:
◆(1)求N = N (t)的駐點和拐點。
【 syms t
dN2_dt2=diff('r*(1-N(t)/Nm)*N(t)',t) , dN2_dt2=factor(dN2_dt2) 】
4.用導數作穩定性分析
下面是繪制圖5.8的參考程序。
【 clf, N=linspace(0,300,50);
dN=0.3134*(1-N/250).*N;
plot(N,dN),hold on,
plot([0 300],[0,0]),
plot([0,250/2,250],[0,0,0],'o'),
xlabel('N','fontsize',11),ylabel('dN','fontsize',11),
text(N(32),dN(32),'\leftarrow\it{d N / d t}>0,相點遞增右移','fontsize',11),
text(125,dN(45),'\it{dN/dt}<0,相點遞減左移 \rightarrow','fontsize',11);
h=text(251/2,1.5,'\it{N_m/2}');set(h,'fontsize',11) 】
5.觀察程序及其說明
zxy5_1.m (繪制函數圖象,圖5.3)
【 clf, x=sym('x'); f=(x-3)^2/(4*(x-1)); g=x/4-5/4;
hold on,
h=line([-8 8],[0,0]); set(h,'color’,'red’);
h=line([0 0],[-8,8]); set(h,'color’,'red’);
line([1 1],[-8 8]);plot([-1 1 3],[-2,0,0],'o’),
ezplot(g,[-8 8]); ezplot(f,[-8,8]), %符號函數繪圖
text(-1-0.5,-2-0.5,'(-1,-2)’);text(1,0-0.5,'(1,0)'); text(3,0.5,'(3,0)');
x=1.4;text(x,subs(f),'\leftarrow{(x-3)}^{2}/{4(x-1)}');
x=0.6;text(x,subs(f),'\leftarrow{(x-3)}^{2}/{4(x-1)}');
x=2.5;text(x,subs(g),'\leftarrow斜漸近線{y=x/4-5}');
text(1,-2,'\leftarrow垂直漸近線x=1');title('(x-3)^2/4(x-1)') 】
zxy5_2.m (人口預測,圖5.5)
【 global p1;clf,
t1=[1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 ];
x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.0 72.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5];
p1(1)=3.9; p1(2)=250;p1(3)=1790;p1(4)=0.03134;
[t,N]=ode23('Logistic_fun',[1790 2100],3.9);
plot(t,N,t1,x,'o',t,250*ones(1,length(t))),axis([1790 2100 0 300]),
xlabel('t','fontsize',11), ylabel('N','fontsize',11) 】
Logistic_fun.m
【 function dN = Logistic_fun(t,N)
global p1
N0=p1(1);Nm=p1(2);t0=p1(3);r=p1(4);
dN =r*(1-N/Nm)*N; 】
zxy5_3.m (方程的解軌線和相軌線,圖5.6)
【 clear,clf
global p1;
p1(1)=3.9; p1(2)=250;p1(3)=0;p1(4)=0.03134;Nm=p1(2);
tpas=linspace(0,300,1000);
plot([0 0],[0,500],':',[0 300],[Nm,Nm],':',[0 300],[Nm/2,Nm/2],':'),
axis([-50 300 0 500]),xlabel('t'),ylabel('N'),hold on
text(-30,Nm,'\it{N_m}\rightarrow'); text(-35,Nm/2,'\it{N_m/2}\rightarrow');
button=1;
while button==1
k=[];
[t0,N0,button]=ginput(1);
[t,N]=ode23('Logistic_fun',tpas,N0);
k=find(N<=Nm/2+1&N>=Nm/2-1);
ts=tpas(k);Ns=N(k); text(-35,N0,'\it{N_0}\rightarrow');
plot(t0,N0,'o',ts,Ns,'square',t,N,':'),hold on
comet(t,N),pause,comet(0*ones(length(t),1),N)
end 】
這一程序是不難讀懂的。
5.3 應用、思考和練習
5.3.1.函數作圖
◆(2) 下面的繪圖較復雜一些,是一個很好的練習。
圖5.9 x(t),y(t)的曲線
zxy5_4.m
【 clf,n=2000;a=-4;b=6;c=-8;d=8;
t=linspace(a,b,n);
x=(t.^2)./(t-1);y=t./(t.^2-1);
kx=find(abs(x)>=d);x(kx)=NaN;
ky=find(abs(y)>=d);x(ky)=NaN;
plot(t,[x;y],'.','markersize',3),
hold on,plot([a b],[0,0],'r',[0 0],[c,d],':'),axis([a b c d]),
xlabel('t'),ylabel('x and y') ,
text(-3.8,7,'put any key to show x=x(t)');pause,comet(t,x),
text(-3.8,6,'put any key to show y=y(t)');pause,comet(t,y) 】
5.3.2.平衡點的分類
5.3.3定性分析的應用
1.捕魚業持續的收獲
畫定性分析圖的程序zxy5_4.m
【 clf,clear,N=50; r=4.4;E=[0.5 2.2 6.5];x=linspace(0,N,30);
f1=r*x.*(1-x/N);plot(x,r.*x,':','linewidth',2),axis([0 50 0 80]),hold on
text(x(10),r*x(10),['\leftarrow y=rx, r= ',num2str(r)])
for i=1:3
f2(i,:)=E(i)*x;
text(x(5),f2(i,5),['\leftarrow y=',num2str(E(i)),'x'])
end
plot(x,f1,x,f2),hold on,
text(x(22),f1(22),['\leftarrow dx/dt=rx(1-x/N)']),xlabel('x'),ylabel('dx/dt') 】
2. 蚜蟲生長和躍變
評論
查看更多