1. 单列波
%%单列波
t=0:0.001:10;
A=input('振幅A=');
w=input('频率w=');
a=input('a=');
y=A.*sin(w.*t+a);
plot(t,y);
pause(1),sound(y);
ylabel('y'),xlabel('t')
2. %%光的单缝衍射现象
Lambda=500e-9; %
a=input('a='); % 可取0.2e-3,1e-3,2e-3三种情况z=1 %
ymax=3*Lambda*z/a; %
Ny=51; %
ys=linspace(-ymax,ymax,Ny); %
NPoints=51; %
yPoint=linspace(-a/2,a/2,NPoints); %
for j=1:Ny %
L=sqrt((ys(j)-yPoint).^2+z^2); %
Phi=2*pi.*(L-z)./Lambda; %
SumCos=sum(cos(Phi)); %
SumSin=sum(sin(Phi)); %
B(j)=(SumCos^2+SumSin^2)/NPoints^2; %
end
clf,plot(ys,B,'*',ys,B);grid; %
3. %%用毕奥-沙伐尔定律计算电流环产生的磁场
mu0=4*pi*1e-7;
I0=5.0;Rh=1;
C0=mu0/(4*pi)*I0;
NGx=21;NGy=21;
x=linspace(-Rh,Rh,NGx);
y=linspace(-3,3,20);y=x;
Nh=20;
theta0=linspace(0,2*pi,Nh+1);
theta1=theta0(1:Nh);
y1=Rh*cos(theta1);
z1=Rh*sin(theta1);
theta2=theta0(2:Nh+1);
y2=Rh*cos(theta2);
z2=Rh*sin(theta2);
xc=0;
yc=(y2+y1)/2;
zc=(z2+z1)/2;
for i=1:NGy
for j=1:NGx
rx=x(j)-xc;
ry=y(i)-yc;
rz=0-zc;
r3=sqrt(rx.^2+ry.^2+rz.^2).^3;
dlXr_x=dly.*rz-dlz.*ry;
dlXr_y=dly.*rx-dlx.*rz;
Bx(i,j)=sum(C0*dlXr_x./r3);
By(i,j)=sum(C0*dlXr_y./r3); end
end
clf;
quiver(x,y,Bx,By);
4. %%多普勒效应
x0=500;v=50;y0=20;
c=330;w=1000;
t=0:0.001:30;
r=sqrt((x0-v*t).^2+y0.^2);
t1=t-r/c;
u=sin(w*t)+sin(1.1*w*t);
u1=sin(w*t1)+sin(1.1*w*t1); sound(u);pause(5);sound(u1);
5.亥姆霍兹线圈
clear all
mu0=4*pi*1e-7;
I0=5.0;Rh=1;
C0=mu0/(4*pi)*I0;
NGx=21;NGy=21;
x=linspace(-Rh,Rh,NGx);
y=linspace(-Rh,Rh,NGy);
Nh=20;
theta0=linspace(0,2*pi,Nh+1); theta1=theta0(1:Nh);
y1=Rh*cos(theta1);
z1=Rh*sin(theta1);
theta2=theta0(2:Nh+1);
y2=Rh*cos(theta2);
z2=Rh*sin(theta2);
xc=0;
yc=(y2+y1)/2;
zc=(z2+z1)/2;
for i=1:NGy
for j=1:NGx
rx=x(j)-xc;
ry=y(i)-yc;
rz=0-zc;
r3=sqrt(rx.^2+ry.^2+rz.^2).^3;
dlXr_x=dly.*rz-dlz.*ry;
dlXr_y=dly.*rx-dlx.*rz;
Bx(i,j)=sum(C0*dlXr_x./r3);
By(i,j)=sum(C0*dlXr_y./r3);
end
end
Bax=Bx(:,11:21)+Bx(:,1:11);
Bay=By(:,11:21)+By(:,1:11);
subplot(1,2,1)
mesh(x(11:21),y,Bax);xlabel('x');ylabel('y'); subplot(1,2,2),
plot(y,Bax),grid,xlabel('y');ylabel('Bx'); 6.库仑引力
clear all;
N=input('电荷数目N:');
for ic=1:N %
fprintf('-----\n 对电荷#%g\n',ic);
rc=input('电荷位置[x y](米):');
x(ic)=rc(1); %
y(ic)=rc(2); %
q(ic)=input('输入电荷量(库仑)'); end
E0=8.85e-12; %
C0=1/(4*pi*E0); %
for ic=1:N
Fx=0.0; Fy=0:0; %
for jc=1:N %
if(ic~=jc) %
xij=x(ic)-x(jc); yij=y(ic)-y(jc);
Rij=sqrt(xij^2+yij^2); %
Fx=Fx+C0*q(ic)*xij/Rij^3;
Fy=Fy+C0*q(ic)*yij/Rij^3;
end
end
fprintf('其它电荷作用在电荷#%g上的合力为:\n',ic); %
fprintf('x-分量:%gN\n',Fx);
fprintf('y-分量:%gN\n',Fy)
end
7.李萨如图形
% lisaru.m
syms t a1 a2 w1 w2
x=cos(w1.*t+a1);
y=sin(w2.*t+a2);
a1=input('a1=');
a2=input('a2=');
w1=input('w1=');
w2=input('w2=');
tf=10;
Ns=1000;t=linspace(0,tf,Ns);
dt=tf/(Ns-1); %分Ns个点,求出时间增量dt
xplot=eval(x);yplot=eval(y); %计算Ns个点的位置x(t),y(t)
figure(gcf);
subplot(1,2,1),
for i=1:750
plot(yplot(1:i),xplot(1:i)); %画点的轨迹图
axis('equal'); grid ; %使两轴比例相同
pause(0.01)
end
8.耦合振子
m1=2;m2=2;K1=16;K2=4; %??????? x0=[1;0];xd0=[6;6];tf=10; %????
M=[m1,0;0,m2];K=[K1+K2,-K2;-K2,K1+K2] ; %??????u(:,s)?[u,L]=eig(K,M) ; %???????????
t=linspace(0,tf,101);x=zeros(2,101); %???????????? for s=1:2 %????????
alfa=sqrt(u(:,s)'*M*u(:,s)) ; %??????
u(:,s)= u(:,s)/alfa; %????????
w(j)=sqrt(L(j,j)); %????????????? xt=u(:,j)*(u(:,j)'*M*x0*cos(w(j)*t)+u(:,j)'*M*xd0/w(j)*sin(w(j)*t));
x=x+xt; %???????
end
for r=1:2 %???x1,x1?? subplot(2,1,r)
plot(t.x(r,:)),grid;
xlabel('xxx');
ylabel(['yyy',num2str(r)]);
end
9.拍频
%%
t=0:0.001:10;
a1=input('??1=');w1=input('??1=');
a2=input('??2=');w2=input('??2=');
y1=a1*sin(w1*t);
y2=a2*sin(w2*t);
y=y1+y2;
subplot(3,1,1),plot(t,y1),ylabel('y1')
subplot(3,1,2),plot(t,y2),ylabel('y2')
subplot(3,1,3),plot(t,y),ylabel('y'),xlabel('t')
pause,sound(y1);pause(5),sound(y2);pause(5),sound(y),pause
subplot(1,1,1)
10。物块下滑
m1=input('m1=');
m2=input('m2=');
theta=input('theta(度)=');
theta=theta*pi/180; g=9.81;
A=[m1*cos(theta),-m1,-sin(theta),0;...
m1*sin(theta),0,cos(theta),0;...
0,m2, -sin(theta),0;...
0,0,-cos(theta),1];
B=[0,m1*g,0,m2*g]'; X=A\B;
a1=X(1), a2=X(2), N1=X(3),N2=X(4)
11。循环
%%xunhuan
R=8.31;
gama=1.4; %(注:由于在MA TLAB中无拉丁文,所以用gama代替?)
nMoles=0.5;
P(1)=1e5;
V(1)=0.012;
WTotal=0;
QTotal=0;
iPoint=1;
NCurve=100;
PPlot=P(1);
VPlot=V(1);
%变量和图形初始化,输入气体的摩尔数nMoles,初始压力P(1),初始容积V(1),%气体常数R=8.314;给定起始总功WTotal=0;点序号iPoint=1;画等温线用
%的点数NCurve=100;P-V图第一点坐标PPlot=P(1);VPlot=V(1)
T(1)=P(1)*V(1)/(nMoles*R); %算出初始温度
%为了进入循环,先要设两个不相等的PathType和QuitType值
QuitType=5;PathType=0;
while(PathType~=QuitType) %在菜单上选择‘退出’之前不断循环,
%选择路径类型或退出
iPoint=iPoint+1; %下一点
fprintf('对过程#%g\n',iPoint-1);
PathType=menu(sprintf('过程%g:选择下一路径',iPoint-1),...
'等压','等容','等温','绝热','退出'); %图形界面菜单生成语句
switch PathType
case 1 %等压路径
V(iPoint)=input('输入新容积:');
P(iPoint)=P(iPoint-1); %压力不变
T(iPoint)=P(iPoint)*V(iPoint)/(nMoles*R); %按新容积算出温度
W=P(iPoint)*(V(iPoint)-V(iPoint-1)); %计算等压过程所做的功
Q=(gama*nMoles*R/(gama-1))*(T(iPoint)-T(iPoint-1));
VPlot=[VPlot,V(iPoint)]; %加上新的容积和压力点,用以绘图
PPlot=[PPlot,P(iPoint)];
case 2 %等容路径
P(iPoint)=input('输入新压力:');
V(iPoint)=V(iPoint-1); %容积不变
T(iPoint)=P(iPoint)*V(iPoint)/(nMoles*R); %按新压力算出温度
W=0; %等容路径上所做的功为零
Q=(nMoles*R/(gama-1))*(T(iPoint)-T(iPoint-1));
VPlot=[VPlot,V(iPoint)]; %加上绘图用的新容积和压力点
PPlot=[PPlot,P(iPoint)];
case 3 %等温路径
V(iPoint)=input('输入新容积:');
T(iPoint)=T(iPoint-1); %温度不变
P(iPoint)=nMoles*R*T(iPoint)/V(iPoint); %按新容积求新压力
W=nMoles*R*T(iPoint)*log(V(iPoint)/V(iPoint-1)); %求所做的功
Q=W;
%用元素群运算求等温路径上的P和V,加进绘图数据中
VNew=linspace(V(iPoint-1),V(iPoint),NCurve);
PNew=nMoles*R*T(iPoint)./VNew;
VPlot=[VPlot,VNew]; %将新的V,P点加入绘图数据中
PPlot=[PPlot,PNew];
case 4 %绝热路径
V(iPoint)=input('输入新容积:');
P(iPoint)=P(iPoint-1)*V(iPoint-1)^gama/V(iPoint)^gama; %按新容积求新压力T(iPoint)=T(iPoint-1)*V(iPoint-1)^(gama-1)/V(iPoint)^(gama-1); %按新容积求新温度
W=-(nMoles*R/(gama-1))*(T(iPoint)-T(iPoint-1)); %求所做的功
Q=0;
VNew=linspace(V(iPoint-1),V(iPoint),NCurve);
PNew=P(iPoint-1)*V(iPoint-1)^gama./VNew.^gama;
VPlot=[VPlot,VNew]; %将新的V,P点加入绘图数据中
PPlot=[PPlot,PNew];
otherwise
end
%画出到目前为止的PV图
if(PathType~=QuitType)
WTotal=WTotal+W; %将新做的功加进总功
if(Q>0)
QTotal=QTotal+Q;
end
figure(gcf);plot(V,P,'o',VPlot,PPlot,'-')%图形窗移前,绘图
size=axis;
axis([size(1)*0.9,size(2)*1.1,size(3)*0.9,size(4)*1.1]);
%上两句用于美观图象,使曲线不要紧靠边框
%标注语句略
end
end
WTotal
QTotal
y=WTotal/QTotal
12。振子和拍
m1=2;m2=2;K1=8;K2=4; %输入各原始参数
x0=[1;0];xd0=[6;0];tf=10; %初使条件
M=[m1,0;0,m2];K=[K1+K2,-K2;-K2,K1+K2] ; %构成参数矩阵u(:,s)’* [u,L]=eig(K,M) ; %求广义特征向量和特征值
t=linspace(0,tf,101);x=zeros(2,101); %时间分割和输出变量初始化for s=1:2 %分别处理两特征值for j=1:2
alfa=sqrt(u(:,s)'*M*u(:,s)) ; %解耦后的向量
u(:,s)= u(:,s)/alfa; %把特征向量归一化m=sqrt(L); %分别求对应于两特征值的分量
w(j)=m(j,j)
xt=u(:,j)*(u(:,j)'*M*x0*cos(w(j)*t)+u(:,j)'*M*xd0/w(j)*sin(w(j)*t));
x=x+xt; %把两个分量累加end
end
for r=1:2 %分别对x1,x1绘图subplot(2,1,r)
plot(t,x(r,:)),grid;
xlabel('xxx');
ylabel(['yyy',num2str(r)]);
end
13。阻尼振动
B=0.7;
w=5;
t=0:0.001:10;
x=dsolve('(D2x)+2.*B.*(Dx)+w.^2.*x');
plot(t,x)
7.弹簧振子的物理模型分析
本题目用MA TLAB处理简单弹簧振子和耦合弹簧振子的物理模型,并对实验数据进行了拟合。
(1) 简单弹簧振子
用劲度系数分别为k1和k2的弹簧,把质量为m的振子固定在气垫导轨,求振子的速度v,加速度a和位移x。
根据牛顿第二定律
m*(D2x)=-(k1+k2)*x
解微分方程,得运动方程
x=A*cos(w*t+α)
对上式微分得速度和加速度
v=-A*w*sin(w*t+α)
a=-A*w*w*cos(w*t+α)
其中w=sqrt((k1+k2)/m);
编程
syms x m k1 k2;
x=dsolve ('m*(D2x)+(k1+k2)*x=0','x(0)=0','Dx(0)=10','t');
v=diff(x)
a=diff(v)
(2)耦合弹簧振子
用劲度系数为k1的边弹簧和劲度系数为k2的耦合弹簧连接质量为m1和m2的两振子,求此物理模态的振动系统方程。
设x1和x2分别是两振子离开平衡位置的位移,耦合振子的振动方程是m1*(d(dx1/dt)/dt)=-k1*x1-k2*(x1-x2);
m2*(d(dx2/dt)/dt)=-k1*x2-k2*(x2-x1);
写成矩阵形式
M*(D2x)+K*x=0
①用eig函数求出矩阵K-λM的特征值L和特征向量U, U和L满足
U’*M*U=I
L=U’
②在原始方程M*x’’+K*x=0两端各左乘以U’及在中间的对角矩阵U’*U,得
U’*M* U’*U*x’’+ U’*K*U *x=0
作变量置换
z=[z1,z2]t= U’*[x1,x2] t= U’*x,
得
z’’+L*z=0
这是一个对角矩阵方程,既可把它分为两个方程
z1’’+L*z1=0
z2’’+L*z2=0
这意味着两种振动模态可以解耦.ω1*ω1=λ1*λ1,ω2*ω2=λ2*λ2,其中ω1是第1个模态的固有频率,ω2是第2个模态的固有频率.
③由上述的解耦模态中,给出初始条件x0,xd0,化为z0,zd0求出变量z1,z2再把z转换为x. 设速度和位置的初始条件分别为xd0=[xd01,xd02]t,x0=[x01,x02]t,则最后得到结果:.
x(t)=[u1]*([u1]t*M*x0*cos(ω1*t)+1/w1*[u1]t*M*xd0*sin(ω1*t))
[u2] *([u2] t*M*x0*cos(ω1*t)+1/w2*[u2]t*M*xd0*sin(ω2*t))
几种不同情况的MA TLAB编程
①同方向的振动,在t=0时刻,两振子从平衡位置向同一方向移动相同的位移,对此质量相同的两振子来说,两振子以同样的频率,同方向等振幅振动.此时两振子的距离保持常数没有能量的传递,两振子的振动频率仅与两边弹簧有关.即两振子同向振动,此时耦合弹簧不起作用.
已知条件:两振子的质量: m1=2;m2=2;
边弹簧的劲度系数:K1=8;
耦合弹簧的劲度系数:K2=4;
两振子的初始位置(在x轴上):m1的初始位置:x01=1;
m2的初始位置:x02=1
两振子的初始速度(以x轴正向取正):m1的初始速度:x0d1=6;
m2的初始速度:x0d2=6;
MA TLAB编程
clear all
m1=.2;m2=.2;K1=8;K2=8; %输入各原始参数
x0=[1;0];xd0=[6;6];tf=10; %初始条件
M=[m1,0;0,m2];K=[K1+K2,-K2;-K2,K1+K2] ; %构成参数矩阵
[u,L]=eig(K,M) ; %求广义特征向量和特征值
t=linspace(0,tf,101);x=zeros(2,101); %时间分割和输出变量初始化
for s=1:2 %分别处理两特征值for j=1:2
alfa=sqrt(u(:,s)'*M*u(:,s)) ; %解耦后的向量
u(:,s)= u(:,s)/alfa; %把特征向量归一化
m=sqrt(L); %分别求对应于两特征值的分量
w(j)=m(j,j)
xt=u(:,j)*(u(:,j)'*M*x0*cos(w(j)*t)+u(:,j)'*M*xd0/w(j)*sin(w(j)*t));
x=x+xt; %把两个分量累加
end
end
for r=1:2 %分别对x1,x1绘图
subplot(2,1,r)
plot(t,x(r,:)),grid;
xlabel('时间');
ylabel(['位移',num2str(r)]); %绘图
end
运行结果:
w =
2.0000 2.8284
w =
2.0000 2.8284
w =
2.0000 2.8284
w = 2.0000 2.8284
②振子反方向振动时,在t=0时,使质量相同的两振子位于各自的平衡位置两侧,且到平衡位置的距离相等,此后两振子以相同的频率,方向等幅振动.两振子不发生能量传递.但此时的频率比同方向振动的频率大,周期要短,因为此时耦合弹簧起作用.
已知条件:两振子的质量: m1=2;m2=2; 边弹簧的劲度系数:K1=8;耦合弹簧的劲度系数:K2=4; 两振子的初始位置(在x轴上建坐标系):m1的初始位置:x01=1;m2的初始位置:x02=1;两振子的初始速度(以x轴正向取正值):m1的初始速度:x0d1=6;m2的初始速度:x0d2=-6;
编程
clear all
m1=.2;m2=.2;K1=4;K2=4; %输入各原始参数
x0=[1;0];xd0=[6;-6];tf=40; %初使条件
M=[m1,0;0,m2];K=[K1+K2,-K2;-K2,K1+K2] ;%构成参数矩阵u(
[u,L]=eig(K,M) ; %求广义特征向量和特征值
t=linspace(0,tf,101);x=zeros(2,101); %时间分割和输出变量初始化f or s=1:2 %分别处理两特征值
for j=1:2
alfa=sqrt(u(:,s)'*M*u(:,s)) ; %解耦后的向量
u(:,s)= u(:,s)/alfa; %把特征向量归一化
m=sqrt(L); %分别求对应于两特征值的分量w(j)=m(j,j)
xt=u(:,j)*(u(:,j)'*M*x0*cos(w(j)*t)+u(:,j)'*M*xd0/w(j)*sin(w(j)*t));
x=x+xt; %把两个分量累加
end
end
for r=1:2 %分别对x1,x1绘图subplot(2,1,r)
plot(t,x(r,:)),grid;
xlabel('时间');
ylabel(['位移',num2str(r)]); %绘图
end
运行结果
w =
2.0000 2.8284
w =
2.0000 2.8284
w =
2.0000 2.8284
w =
2.0000 2.8284
③拍振动,在t=0时,两振子到平衡位置的距离不同,振子的质量相同,两振子在耦合弹簧及边弹簧的作用下会发生拍振动.两振子会存在能量传递.当一振子处于平衡位置另一振子离平衡位置距离为A,此两振子在耦合弹簧的作用下会发生拍振动.两振子会存在能量传递.第一个振子振幅变小时,另一个振子振幅增大.
已知条件:两振子的质量: m1=2;m2=2;边弹簧的颈度系数:K1=8;耦合弹簧的颈度系数:K2=4; 两振子的初始位置(在x轴上建坐标系):m1的初始位置:x01=1;m2的初始位置:x02=1;两振子的初始速度(以x轴正向取正值):m1的初始速度:x0d1=6;m2的初始速度:x0d2=0;
编程
clear all
m1=.2;m2=.2;K1=8;K2=4; %输入各原始参数
x0=[1;0];xd0=[6;0];tf=40; %初使条件
M=[m1,0;0,m2];K=[K1+K2,-K2;-K2,K1+K2] ;%构成参数矩阵
[u,L]=eig(K,M) ; %求广义特征向量和特征值
t=linspace(0,tf,101); x=zeros(2,101); %时间分割和输出变量初始化
for s=1:2 %分别处理两特征值
for j=1:2
alfa=sqrt(u(:,s)'*M*u(:,s)) ; %解耦后的向量
u(:,s)= u(:,s)/alfa; %把特征向量归一化
m=sqrt(L); %分别求对应于两特征值的分量
w(j)=m(j,j)
xt=u(:,j)*(u(:,j)'*M*x0*cos(w(j)*t)+u(:,j)'*M*xd0/w(j)*sin(w(j)*t));
x=x+xt; %把两个分量累加
end
end
for r=1:2 %分别对x1,x1绘图
subplot(2,1,r)
plot(t,x(r,:)),grid;
xlabel('时间');
ylabel(['位移',num2str(r)]); %绘图
end
④在t=0时,使两振子离平衡位置相同,振子的质量不同,两振子在耦合弹簧及边弹簧的作用下,会发生拍振动.两振子之间会存在能量传递
已知条件两振子的质量: m1=2;m2=4;
边弹簧的劲度系数:K1=8;
耦合弹簧的劲度系数:K2=4;
两振子的初始位置(在x轴上建坐标系):m1的初始位置:x01=1;
m2的初始位置:x02=1
两振子的初始速度(以x轴正向取正值):m1的初始速度:x0d1=6;
m2的初始速度:x0d2=6;
编程:
m1=.2;m2=.4;K1=8;K2=4; %输入各原始参数
x0=[1;0];xd0=[6;6];tf=40; %初使条件
M=[m1,0;0,m2];K=[K1+K2,-K2;-K2,K1+K2] ; %构成参数矩阵
[u,L]=eig(K,M) ; %求广义特征向量和特征值
t=linspace(0,tf,101);x=zeros(2,101); %时间分割和输出变量初始化
for s=1:2 %分别处理两特征值
for j=1:2
alfa=sqrt(u(:,s)'*M*u(:,s)) ; %解耦后的向量
u(:,s)= u(:,s)/alfa; %把特征向量归一化
m=sqrt(L); %分别求对应于两特征值的分量
w(j)=m(j,j)
xt=u(:,j)*(u(:,j)'*M*x0*cos(w(j)*t)+u(:,j)'*M*xd0/w(j)*sin(w(j)*t));
x=x+xt; %把两个分量累加
end
end
for r=1:2 %分别对x1,x1绘图
subplot(2,1,r)
plot(t,x(r,:)),grid;
xlabel('时间');
ylabel(['位移',num2str(r)]); %绘图
end
(3)弹簧振子有关物理量测量及实验数据分析
实验数据记录:
弹簧弹性系数s=8.64cm, m=21克,g=979.44cm/s*s
m0=21.830, m1=187.860, m2=49.790, m3=99.540, m4=99.790,振子的质量分别为克。
a=m1+m0/3,
b=m1+m2+m0/3,
c=m1+m3+m0/3,
d=m1+m2+m3+m0/3,
e=m1+m3+m4+m0/3,
不同质量的振子振动的周期分别为单位(毫秒)
at=(38446.6+38447.0+38449.2)/30,
bt=(43077.1+43078.8+43078.1)/30,
ct=(47256.0+47255.8+47256.1)/30,
dt=(51078.4+51079.3+51078.3)/30,
et=(54670.9+54668.0+54667.6)/30,
振子的质量是[a,b,c,d,e]测得的振子周期为[at,bt,ct,dt.et],振子周期的平方为[A T,BT,CT,DT,ET,FT]
又,振子的周期的平方与振子的质量成正比,以下模型利用实验数据拟合二次曲线
设直线的方程是y=a(1)*=x+a(2)’待定的系数是a(1),a(2).将实验数据分别带入x,y,得方程组,那么设方程组的系数矩阵为detax,detay。
detax*q(1)+ones(N,1)*q(2)=detail
其中,detax,detay均为列,N个一次方程,方程组中只有两个未知数,是超定方程,用最小二乘法可以直接运算q=A\B, 有
A=[detax.ones(N,1)]; B=detay;q=A\B
编程
m0=21.830; m1=187.860; m2=49.790; m3=99.540; m4=99.790;
a=m1+m0/3; b=m1+m2+m0/3; c=m1+m3+m0/3; d=m1+m2+m3+m0/3; e=m1+m3+m4+m0/3;
f=m1+m2+m3+m0/3;
at=(38446.6+38447.0+38449.2)/30;
bt=(43077.1+43078.8+43078.1)/30;%
ct=(47256.0+47255.8+47256.1)/30;
dt=(51078.4+51079.3+51078.3)/30;
et=(54670.9+54668.0+54667.6)/30;
AT=at*at; BT=bt*bt; CT=ct*ct; DT=dt*dt; ET=et*et;
detax=[AT,BT,CT,DT,ET]'*10^(-6);
detay=[a,b,c,d,e]'; %原始数据
A=[detax,ones(5,1)]; B=detay;q=A\B;r=1/q(1); %线性拟合
plot(detax,detay,'o'),hold on %绘出原始数据图
xi=0:50;yi=q(1)*xi+q(2);
A1=detax;q0=A1\B; %通过线性拟合
plot(xi,yi,xi,q0*xi,':') %绘图
q2=polyfit(detax,detay,2); yi=polyval(q2,xi) ; %二次拟合
plot(xi,yi); xlabel('时间的平方单位(秒的平方)');
ylabel('质量单位(克)');
hold off
8. 傅科摆
文件名:fkb.m
%%
a=60;
q=[4,0,0,0];
c=a*pi/180;
[t,x]=ode45('fkb',[0:0.02:220],q,[ ],c);
comet(x(:,1),x(:,3))
文件名:fkbfun.m
function tt=fkb(t,x,flag,c)
a=(2*pi*sin(c))/100;
b=9.8/67;
tt=[x(2);
2*a*x(4)-b*x(1);
x(4);
-2*a*x(2)-b*x(3)];
function varargout = g_gui9(varargin)
% g_gUI9 M-file for g_gui9.fig
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @g_gui9_OpeningFcn, ...
'gui_OutputFcn', @g_gui9_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin & isstr(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function g_gui9_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;
guidata(hObject, handles);
function varargout = g_gui9_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;
function popupmenu1_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end
function popupmenu1_Callback(hObject, eventdata, handles)
popup_sel_index = get(handles.popupmenu1, 'Value');
switch popup_sel_index
case 1 % Choice
set(handles.text19, 'String', '请选择合适的路径');
case 2 % Deng Ya
set(handles.text19, 'String', '请输入新体积');
case 3 % Deng Rong
set(handles.text19, 'String', '请输入新压强');
case 4 % Deng Wen
set(handles.text19, 'String', '请输入新体积');
case 5 % Jue Re
set(handles.text19, 'String', '请输入新体积');
end
function edit1_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end
function edit1 = edit1_Callback(hObject, eventdata, handles)
edit1 = str2double(get(hObject, 'String'));
if isnan(edit1)|edit1==0
set(hObject, 'String', '');
errordlg('Input must be a number but 0','Error');
end
data = getappdata(gcbf, 'metricdata');
data.edit1 = edit1;
setappdata(gcbf, 'metricdata', data);
function edit2_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end
function edit2 = edit2_Callback(hObject, eventdata, handles)
edit2 = str2double(get(hObject, 'String'));
if isnan(edit2)|edit2==0
set(hObject, 'String', '');
errordlg('Input must be a number but 0','Error');
end
data = getappdata(gcbf, 'metricdata');
data.edit2 = edit2;
setappdata(gcbf, 'metricdata', data);
function edit3_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end
function edit3 = edit3_Callback(hObject, eventdata, handles)
edit3 = str2double(get(hObject, 'String'));
if isnan(edit3)|edit3==0
set(hObject, 'String', '');
errordlg('Input must be a number but 0','Error');
end
data = getappdata(gcbf, 'metricdata');
data.edit3 = edit3;
setappdata(gcbf, 'metricdata', data);
function edit4_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end
function edit4 = edit4_Callback(hObject, eventdata, handles)
edit4 = str2double(get(hObject, 'String'));
if isnan(edit4)|edit4==0
set(hObject, 'String', '');
errordlg('Input must be a number but 0','Error');
end
data = getappdata(gcbf, 'metricdata');
data.edit4 = edit4;
setappdata(gcbf, 'metricdata', data);
function edit5_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function edit5 = edit5_Callback(hObject, eventdata, handles)
edit5 = str2double(get(hObject, 'String'));
if isnan(edit5)|edit5==0
set(hObject, 'String', '');
errordlg('Input must be a number but 0','Error');
end
data = getappdata(gcbf, 'metricdata');
data.edit5 = edit5;
setappdata(gcbf, 'metricdata', data);
function pushbutton1_Callback(hObject, eventdata, handles)
data = getappdata(gcbf, 'metricdata');
popup_sel_index = get(handles.popupmenu1, 'Value');
if
isnan(data.edit1)|data.edit1==0|isnan(data.edit2)|data.edit2==0|isnan(data.edit3)|data.edit3==0|isna n(data.edit4)|data.edit4==0|isnan(data.edit5)|data.edit5==0|isnan(data.edit6)|isnan(data.edit7)
else
switch popup_sel_index
case 1 % Choice
warndlg('请选择合适的路径','Warning');
case 2 % Deng Ya
if data.edit2==data.edit5
warndlg('请输入新体积','Warning');
else
edit2=min(data.edit2,data.edit5);
edit5=max(data.edit2,data.edit5);
plot([edit2 edit5],[data.edit1 data.edit1]);
grid on;
hold on;
edit3=data.edit3./data.edit2.*data.edit5;
data.edit7=data.edit7+data.edit1.*(data.edit2-data.edit5);
edit6=data.edit1.*data.edit2./data.edit3.*(edit3-data.edit3).*3.5;
data.edit6=data.edit6+edit6;
data.edit8=data.edit8+(edit6+abs(edit6))./2;
data.edit9=data.edit9-(edit6-abs(edit6))./2;
data.edit3=edit3;
data.edit2=data.edit5;
data.edit4=data.edit1;
setappdata(gcbf, 'metricdata', data);
set(handles.edit1, 'String', data.edit1);
set(handles.edit2, 'String', data.edit2);
set(handles.edit3, 'String', data.edit3);
set(handles.edit4, 'String', data.edit4);
set(handles.edit5, 'String', data.edit5);
set(handles.edit6, 'String', data.edit6);
set(handles.edit7, 'String', data.edit7);
set(handles.edit8, 'String', data.edit8);
set(handles.edit9, 'String', data.edit9);
end
case 3 % Deng Rong
if data.edit1==data.edit4
warndlg('请输入新压强','Warning');
else
edit1=min(data.edit1,data.edit4);
edit4=max(data.edit1,data.edit4);
plot([data.edit2 data.edit2],[edit1 edit4]);
grid on;
hold on;
edit3=data.edit3./data.edit1.*data.edit4;
edit6=data.edit1.*data.edit2./data.edit3.*(edit3-data.edit3).*2.5;
data.edit6=data.edit6+edit6;
data.edit8=data.edit8+(edit6+abs(edit6))./2;
data.edit9=data.edit9-(edit6-abs(edit6))./2;
data.edit3=edit3;
data.edit1=data.edit4;
data.edit5=data.edit2;
setappdata(gcbf, 'metricdata', data);
set(handles.edit1, 'String', data.edit1);
set(handles.edit2, 'String', data.edit2);
set(handles.edit3, 'String', data.edit3);
set(handles.edit4, 'String', data.edit4);
set(handles.edit5, 'String', data.edit5);
set(handles.edit6, 'String', data.edit6);
set(handles.edit7, 'String', data.edit7);
set(handles.edit8, 'String', data.edit8);
set(handles.edit9, 'String', data.edit9);
end
case 4 % Deng Wen
if data.edit2==data.edit5
warndlg('请输入新体积','Warning');
else
edit2=min(data.edit2,data.edit5);
edit5=max(data.edit2,data.edit5);
jiange=edit5./1000;
x=[edit2:jiange:edit5];
y=data.edit1.*data.edit2./x;
plot(x,y);
grid on;
hold on;
edit6=data.edit1.*data.edit2.*log(data.edit5./data.edit2);
data.edit6=data.edit6+edit6;
data.edit7=data.edit7-data.edit1.*data.edit2.*log(data.edit5./data.edit2);
data.edit8=data.edit8+(edit6+abs(edit6))./2;
data.edit9=data.edit9-(edit6-abs(edit6))./2;
data.edit4=data.edit1.*data.edit2./data.edit5;
data.edit1=data.edit4;
data.edit2=data.edit5;
setappdata(gcbf, 'metricdata', data);
set(handles.edit1, 'String', data.edit1);
set(handles.edit2, 'String', data.edit2);
set(handles.edit3, 'String', data.edit3);
set(handles.edit4, 'String', data.edit4);
set(handles.edit5, 'String', data.edit5);
set(handles.edit6, 'String', data.edit6);
set(handles.edit7, 'String', data.edit7);
set(handles.edit8, 'String', data.edit8);
set(handles.edit9, 'String', data.edit9);
end
case 5 % Jue Re
if data.edit2==data.edit5
warndlg('请输入新体积','Warning');
else
edit2=min(data.edit2,data.edit5);
edit5=max(data.edit2,data.edit5);
jiange=edit5./1000;
x=[edit2:jiange:edit5];
y=data.edit1./(x.^1.4).*(data.edit2.^1.4);
plot(x,y);
grid on;
hold on;
data.edit4=data.edit1.*data.edit2.^1.4./data.edit5.^1.4;