yanyongju 发表于 2006-11-21 19:07

Runge-Kutta实现多自由度系统响应的MATLAB程序

function z = vbr_rk(rkf,u,t,x0)
%vbr_rk   vbr_rk(rkf,u,t,x0)
%       Runge-Kutta fourth order solution to a first order DE
%       t is a row vector from the initial time to the final time
%       step h.
%       x0 is the initial value of the function.
%       The force matrix u is ordered such that the nth column of u is the force vector u evaluated at time n*dt.
%       rkf is a variable containing the name of the function file.
%       The equations in the function file must be written in first order state space form.
%       See example vbr_rk_ex.m.
%       Example
%       t=0:.5:20;                           % Creates time vector
%       u=;   % Creates force matrix
%       x0=;                           % Creates initial state vector.
%       x=vtb1_3('vbr_rk_ex',u,t,x0);         % Runs analysis.
%       plot(t,x(1,:));                        % Plots displacement versus time.
%       plot(t,x(2,:));                        % Plots velocity versus time.

n=length(t);
z=zeros(length(x0),length(t));
z(:,1)=x0;
h=t(2)-t(1);

for l1=1:(n-1);
   z1=z(:,l1);
   u1=u(:,l1);
   u2=u(:,l1+1);

   k1=h*feval(rkf,z1,u1,t(l1));
   k2=h*feval(rkf,z1+.5*k1,u1,t(l1)+.5*h);
   k3=h*feval(rkf,z1+.5*k2,u1,t(l1)+.5*h);
   k4=h*feval(rkf,z1+k3,u1,t(l1)+h);
   z(:,l1+1)=z(:,l1)+1/6*(k1+2*k2+2*k3+k4);
end
其中rkf为动力微分方程,形如
function =vbr_rk_ex(z,u,t)
%    function for    2
%                  dx      dx
%                m --+ c -- +k x = f(t)
%                  2   dt
%                  dt                     dx
%    where m=1,k=1,c=.1, and z(1)=x, z(2)=--
%                                       dt
zd=[z(2);
    -.1*z(2)-z(1)+u(2)];

wei124 发表于 2006-11-21 19:22

这个程序我没有看懂,是不是太特殊了。怎么没有地震波的输入

yanyongju 发表于 2006-11-21 19:28

u表示激励输入
对于多自由度,关键在于rkf的形式

yanyongju 发表于 2006-11-25 18:52

不客气!大家互相学习!

handb 发表于 2007-3-30 15:54

这个程序怎么总出错?提示如下
??? Error: File: E:\MATLAB6p5p1\work\vbr_rk.m Line: 23 Column: 16
Missing variable or function.
怎么才能让程序计算呢?请解答,谢谢!

多情清秋 发表于 2007-3-31 07:01

原帖由 handb 于 2007-3-30 15:54 发表
这个程序怎么总出错?提示如下
??? Error: File: E:\MATLAB6p5p1\work\vbr_rk.m Line: 23 Column: 16
Missing variable or function.
怎么才能让程序计算呢?请解答,谢谢!

应该是参数没给对,仔细研究一下程序的注释

handb 发表于 2007-3-31 09:48

先谢谢多情清秋,但我用的是程序中的exemple啊???

handb 发表于 2007-3-31 09:57

也就是这一段
%       Example
       t=0:.5:20;                           % Creates time vector
      u=;   % Creates force matrix
       x0=;                           % Creates initial state vector.
       x=vtb1_3('vbr_rk_ex',u,t,x0);         % Runs analysis.
%上一个语句无法调用子程序,我改为z=vbr_rk('vbr_rk_ex',u,t,x0); 否则提示找不到子程序         
       plot(t,z(1,:));                        % Plots displacement versus time.
      plot(t,z(2,:));                        % Plots velocity versus time.
结果出现我描述的错误,烦请高人指点,谢谢

WSYcxl 发表于 2007-4-2 20:36

回复 #2 wei124 的帖子

Runge-Kutta法是自启动的。
记得硕士论文答辩时,一个老师也这样问过:你这没有初始条件,难道系统就自己振动起来了?
当时一下子把我问蒙了,确实嘛,离开了激励,也没有初始条件,自己就振动起来了,没道理。呵呵。

yejet 发表于 2007-4-3 21:03

正确的代码t=0:.5:20;                           % Creates time vector
u=;   % Creates force matrix
x0=;                           % Creates initial state vector.
x=vbr_rk('vbr_rk_ex',u,t,x0);         % Runs analysis.
plot(t,z(1,:));                        % Plots displacement versus time.
plot(t,z(2,:));                        % Plots velocity versus time.建议楼主简单学习一下matlab,如果你要用matlab程序的话

[ 本帖最后由 无水1324 于 2007-7-23 13:29 编辑 ]

utuu 发表于 2011-6-22 00:15

问下 ,如果是二自由度的动力学方程,那rkf该怎么构造呢?

博大广阔 发表于 2011-10-30 13:42

我在找这个程序呢

S11021023 发表于 2011-11-4 21:53

谢谢楼主!!!!!!!!!!

yghit08 发表于 2011-11-14 16:47

自己编也不困难吧,还能自己设定很多参数,自己还明白怎么设定参数

0810064 发表于 2011-11-28 16:46

每天来这里的目的就是为了学习,期待着有一天也能为这个论坛做一点贡献。
页: [1] 2
查看完整版本: Runge-Kutta实现多自由度系统响应的MATLAB程序