当前位置: 首页 > 机械 >MATLAB程序出现问题,请帮助一下

MATLAB程序出现问题,请帮助一下

作者 lhr1309
来源: 小木虫 200 4 举报帖子
+关注

我的程序主要是对碰撞过程弹簧阻尼系统的部分改写。这是一个求解微分方程并调用的程序,我想在主程序中调用子程序求解过程的结果,进而在主程序中得到相应的所求结果。但是我编的遇到的问题是主程序中调用的 Kl 显示等于零,跟实际不符。请大家给些修改意见,我自己一直改不好,很是难受。
求解过程程序:
function  dx=ImpactFn(t,x)
dx=zeros(2,1);
m=1;           
n=1.5;         
Ce=0.9;        
R1=10;        
R2=9.9;      
c=R1-R2;
E=2.07*10^5;  
v0=500;        
z=0.29;      
E1=E/(2*(1-z^2));
Ks=(pi*E1/8)*(2*x(1)*(3*c+2*x(1))^2/(c+x(1))^3)^(1/2);
p1=7700*10^(-9);
c1=5900*10^3;   
p2=863*10^(-9);  
c2=1530*10^3;   
Aa=125*0.25;     
L=50;         
Z1=p1*c1;
Z2=p2*c2;
B=25*(pi/180);   
B0=5*(pi/180);   
ht=0.1;           
e1=acos(c/(c+x(1)));   
l=2*R1*e1;      
A0=l*L;         
for i=1:length(e1)
    if e1(i)>B
         q(i)=B/B0;
    else q(i)=floor(e1(i)/B0);
    end

           Kl(i)=0         
        for j=1:q(i)
          hl(i)=c+(x(1)+c)*cos(pi-B0*j)+ht;
          Kl0(i)=Z1*c2*Aa/((Z1/Z2-Z2/Z1)*hl*(B/B0))
          Kl(i)=Kl(i)+Kl0(i);
        end
end
save shuju1 Kl
Kn=Ks*(((A0)-Aa*q/(B/B0))/(A0+10^(-15)))+Kl;      
dx(1)=x(2);                        
dx(2)=(-1/m)*Kn*x(1)^n*(1+(8*(1-Ce))*x(2)/(5*Ce*v0));
end
主程序:
clear;clc;
y0=[0;500];         
[t,x]=ode45(@ImpactFn,[0, 2.44e-4],y0);  %求解微分方程的调用格式  
n=1.5;        
Ce=0.9;                           
R1=10;         
R2=9.9;      
c=R1-R2;
E=2.07*10^5;  
v0=500;      
z=0.29;        
E1=E/(2*(1-z^2));
Ks=(pi*E1/8)*(2*x(:,1).*(3*(R1-R2)+2*x(:,1)).^2/(R1-R2+x(:,1)).^3)^(1/2);
[~,col,~]=find(Ks,1,'first');
Ks=Ks(:,col);
p1=7700*10^(-9);
c1=5900*10^3;   
p2=863*10^(-9);  
c2=1530*10^3;   
Aa=125*0.25;     
L=50;            
Z1=p1*c1;
Z2=p2*c2;
B=25*(pi/180);   
B0=5*(pi/180);   
ht=0.1;           
e1=acos(c./(c+x(:,1)));   
l=2*R1*e1;      
A0=l*L;      

for i=1:length(e1)
        if e1(i)>B
           q(i)=B/B0;     
          else q(i)=floor(e1(i)/B0);
        end   
end
load shuju1 Kl
Kl=Kl.';            
q=q.';
Kn=Ks.*(((A0+10^(-15))-Aa*q/(B/B0))./(A0+10^(-15)))+Kl;      
Fn=Kn.*x(:,1).^n.*(1+(8.*(1-Ce)).*x(:,2)/(5*Ce*v0));
figure(1);         
plot(t,x(:,1),'red');
xlabel('时间/s','Fontname', '宋体','FontSize',13);
ylabel('变形量/mm','Fontname', '宋体','FontSize',13);
hold on            
figure(2);
plot(t,x(:,2),'red');
xlabel('时间/s','Fontname', '宋体','FontSize',13);
ylabel('接触变形速度/mm·s-1','Fontname', '宋体','FontSize',13);
hold on                          
figure(3);           
plot(t,Fn,'red');   
xlabel('时间/s','Fontname', '宋体','FontSize',13);
ylabel('接触力/N','Fontname', '宋体','FontSize',13);
hold on            
figure(4);         
plot(x(:,1),Fn,'red');
xlabel('变形量/mm','Fontname', '宋体','FontSize',13);
ylabel('接触力/N','Fontname', '宋体','FontSize',13);
hold on            
figure(5);         
plot(x(:,1),Kn,'red');
xlabel('变形量/mm','Fontname', '宋体','FontSize',13);
ylabel('接触刚度/N*mm-1','Fontname', '宋体','FontSize',13);
hold on 返回小木虫查看更多

今日热帖
  • 精华评论
  • 我是笋果

    你的x是什么数据?

  • lhr1309

    引用回帖:
    2楼: Originally posted by 我是笋果 at 2019-05-30 12:44:43
    你的x是什么数据?

    x是微分方程的变量,代表位移,我主要是改了Kn,再通过方程解x,调用解在主程序中求相应的量
    MATLAB程序出现问题,请帮助一下
    1559192949327.jpg


  • 套中人cyy

    用simulink求啊

  • 套中人cyy

    把你的全部方程贴上来

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓