[未答复] 用ode45报错:在时间 t 处,步长大小必须降至所允许的最小值以下,才能达到积分容差要求

[复制链接]
三明 发表于 2021-11-25 01:15:00
本帖最后由 三明 于 2021-11-25 01:17 编辑
  1. clear all;clc;
  2. global rhox rhoy rhoz L D
  3. v=[1,0,0,0,0,0];
  4. D=diag(v);
  5. L = [1,0,-1,0,0,0;
  6.     -1,1,0,0,0,0;
  7.     0,-1,2,0,0,-1;
  8.     -1,0,0,1,0,0;
  9.     0,0,0,-1,1,0;
  10.     0,0,0,0,-1,1];

  11. x1(:,1) = [-0.6126 -0.1024 -0.3871]';
  12. x2(:,1) = [-0.1844 -0.5441 -0.3192]';
  13. x3(:,1) = [ 0.6552  0.4631 0.7302]';
  14. x4(:,1) = [ 0.9520  0.936 0.5821]';
  15. x5(:,1) = [-0.1313 -0.5469 -0.2821]';
  16. x6(:,1) = [ 0.8313  0.7849 0.9214]';
  17. x0(:,1) = [      1 -0.6536 0.3419]';

  18. X=[1;-0.6126;-0.1844;0.6552;0.952;-0.1313;0.8313;1;1;1;1;1;1;
  19.    -0.6536;-0.1024;-0.5441;0.4631;0.936;-0.5469;0.7849;1;1;1;1;1;1;
  20.    0.3419;-0.3871;-0.3192;0.7302;0.5821;-0.2821;0.9214;1;1;1;1;1;1];
  21. tBegin = 0;
  22. tFinal = 100;
  23. tFault = 5;
  24. [t,out]=ode45('odefun',[tBegin,tFinal],X);
复制代码
  1. function out = odefun(t,X)
  2. global  rhox rhoy rhoz L D
  3. %%
  4. %k=1
  5. if t >= 5
  6.     rhox =[0.2+0.8*exp(5-t);1;1;1;1;0.1+0.9*exp(5-t)];
  7.     rhoy =[0.1+0.9*exp(5-t);1;1;1;1;0.3+0.7*exp(5-t)];
  8.     rhoz =[0.2+0.8*exp(5-t);1;1;1;1;0.2+0.8*exp(5-t)];
  9. else
  10.     rhox =[1;1;1;1;1;1];
  11.     rhoy =[1;1;1;1;1;1];
  12.     rhoz =[1;1;1;1;1;1];
  13. end
  14. xlx = X(1,:);%k=1时的leader状态
  15. xfx = X(2:7,:);%%k=1时的follower1-follower6状态
  16. thetax = X(8:13,:);
  17. ksix = L*xfx+D*(xfx-xlx*ones(6,1));
  18. ufx = diag(rhox*(diag(-5*diag(thetax*(ones(6,1)+ksix.^6)')*ksix'))');
  19. dxlx = 0.5*(sin(xlx)+xlx) + t;
  20. dxfx = 0.5*(sin(xfx)+xfx) + ufx +t;
  21. dthetax = ksix.^2;

  22. %%
  23. %k=2
  24. xly = X(14,:);
  25. xfy = X(15:20,:);
  26. thetay = X(21:26,:);
  27. ksiy = L*xfy+D*(xfy-xly*ones(6,1));
  28. ufy = diag(rhoy*(diag(-5*diag(thetay*(ones(6,1)+ksiy.^6)')*ksiy'))');
  29. dxly = 0.5*(sin(xly)+xly) + t;
  30. dxfy = 0.5*(sin(xfy)+xfy) + t + ufy;
  31. dthetay = ksiy.^2;

  32. %%
  33. %k=3
  34. xlz = X(27,:);
  35. xfz = X(28:33,:);
  36. thetaz = X(34:39,:);
  37. ksiz = L*xfz+D*(xfz-xlz*ones(6,1));
  38. ufz = diag(rhoz*(diag(-5*diag(thetaz*(ones(6,1)+ksiz.^6)')*ksiz'))');
  39. dxlz = 0.5*(sin(xlz)+xlz) + t;
  40. dxfz = 0.5*(sin(xfz)+xfz) + ufz +t;
  41. dthetaz = ksiz.^2;

  42. %%
  43. out=[dxlx;dxly;dxlz; dxfx; dxfy; dxfz; dthetax; dthetay; dthetaz];
  44. end
复制代码


利用ode45解一组微分方程,其中rho是时变的,所以在function里面加入了if语句。
在t=5.81016877830341e-05处,出现:
“警告: 在 t=5.810169e-05 处失败。在时间 t 处,步长大小必须降至所允许的最小值(1.084202e-19)以下,才能达到积分容差要求。”
请问各位大神,我该怎么修改呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表