竹语随风 发表于 2013-9-9 16:12
老师,我就想引用这个函数不好意思,最后一个取值范围应该是3*pi/2-alfa到后面的值
老师,您好,我将我的程序重新改了一下。可是还是出错,你帮忙再看看。
调用程序
function dx=crackandliner(t,x,c,w)
e=0.1;
k=0.3;
beta=0;
phi0=0;
alfa=pi/6;
phi=atan(x(1)/x(3));
theta=w*t+phi0+beta-phi;
if -pi/2+alfa<=theta & theta<=pi/2-alfa
f=1;
elseif pi/2-alfa<theta & theta<=pi/2+alfa
f=1/2+1/2*cos(pi*(theta-pi/2+alfa)./(2*alfa));
elseif pi/2+alfa<theta & theta<=3*pi/2-alfa
f=0;
elseif 3*pi/2-alfa<=theta & theta<=3*pi/2+alfa
f=1/2+1/2*cos(pi*(theta-3*pi/2-alfa)./(2*alfa));
end
n=sin(w*t);
m=cos(w*t);
dx=zeros(4,1);
dx(1)=x(2);
dx(2)=e*w^2.*cos(w*t+phi0)-c*x(2)-x(1)+f*k*m^2*x(1)...
+f*k*n*m*x(3);
dx(3)=x(4);
dx(4)=e*w^2.*sin(w*t+phi0)-c*x(4)-x(3)+f*k*n^2*x(3)...
+f*k*n*m*x(1);
主程序
j=1;
c=0.2;
x0=[0.01;0.01;0.01;0.01];
tend=linspace(0,2000,5000);
for w=0.1:0.01:3
options=odeset;options.RelTol=1e-4;
[t,x]=ode45(@crackandliner,tend,x0,options,c,w,f);
p= sqrt((x(end-400:end,1).^2)+(x(end-400:end,3).^2));
Pmax(j,1)=max(p);
j=j+1;
end
w=0.1:0.01:3;
h=plot(w,Pmax);
title('p-w图');
xlabel('回转速度w');
ylabel('振幅p');
|