Matlab 版 (精华区)

发信人: seesea (马虎学究), 信区: Matlab
标  题: [合集]关于ODE的问题
发信站: 哈工大紫丁香 (2004年01月18日10:15:16 星期天), 站内信件


────────────────────────────────────────
 isaacpang (小飞马)                   于 Mon Jan  5 10:49:46 2004 说道:

我想求解一个动力学问题
dy/dt=f(y,t)+u(t)
这里u(t)是工作空间中的一个变量,该怎么样做
谢谢

────────────────────────────────────────
 Skyblue (原来的我)                   于 2004年01月05日10:56:34 星期一 说道:

help odefile
【 在 isaacpang (小飞马) 的大作中提到: 】
: 我想求解一个动力学问题
: dy/dt=f(y,t)+u(t)
: 这里u(t)是工作空间中的一个变量,该怎么样做
: 谢谢

────────────────────────────────────────
 isaacpang (小飞马)                   于 Mon Jan  5 11:05:40 2004 说道:

早已看过很多遍了
但是还是不知道该怎样解决

【 在 Skyblue 的大作中提到: 】
: help odefile
: 【 在 isaacpang (小飞马) 的大作中提到: 】
: : 我想求解一个动力学问题
: : dy/dt=f(y,t)+u(t)
: : 这里u(t)是工作空间中的一个变量,该怎么样做
: : 谢谢

────────────────────────────────────────
 zjliu (秋天的萝卜)                   于 2004年01月05日11:12:08 星期一 说道:

把问题写清楚了,最好给出详细的函数形式
【 在 isaacpang (小飞马) 的大作中提到: 】
: 我想求解一个动力学问题
: dy/dt=f(y,t)+u(t)
: 这里u(t)是工作空间中的一个变量,该怎么样做
: 谢谢

────────────────────────────────────────
 greathope (GreatHope)                于 2004年01月05日12:39:00 星期一 说道:

和dy/dt = f(y,t)的解法没有区别,直接把u(t)写在方程后面就可以。
【 在 isaacpang (小飞马) 的大作中提到: 】
: 我想求解一个动力学问题
: dy/dt=f(y,t)+u(t)
: 这里u(t)是工作空间中的一个变量,该怎么样做
: 谢谢

────────────────────────────────────────
 btt (BTT)                            于 Mon Jan  5 12:57:05 2004 说道:

你那个u(t)是工作空间中的一个n*2的矩阵吧,第一列是时间t,第二列是对应的u值?
如果是的话,把u给load进那个被积函数里,再用interp1插出给定t点的u值,就好了。
【 在 greathope 的大作中提到: 】
: 我想求解一个动力学问题
: dy/dt=f(y,t)+u(t)
: 这里u(t)是工作空间中的一个变量,该怎么样做
: 谢谢

────────────────────────────────────────
 isaacpang (小飞马)                   于 Tue Jan  6 10:57:53 2004 说道:

我是想通过ODE函数作一个动力学系统的仿真。

A=[zeros(2),eye(2);-4000,2000,-0.45,0.2;2000,-2000,0.2,0.25];
B=[0;0;1;0];C=[0,0,1,0];
我想用白噪声激励求解其响应
当然如果是简单的系统的话,可以直接通过Simulink来做
但很复杂的,象自由度特别高的,用Simulink就太难了
所以我想用ODE来算
该怎么样做呢
谢谢

────────────────────────────────────────
 seesea (马虎学究)                    于 2004年01月06日17:28:06 星期二 说道:

这个解决方法好用的,
不知道sim函数是不是这样处理的?
如果没有别的限制,可以结合SIMULINK,
用sim函数命令行仿真,比较灵活。
我遇到的情况是希望能编译成独立可执行文件,
sim函数不支持的,只好打odefun的主意。
【 在 btt (BTT) 的大作中提到: 】
: 你那个u(t)是工作空间中的一个n*2的矩阵吧,第一列是时间t,第二列是对应的u值?
: 如果是的话,把u给load进那个被积函数里,再用interp1插出给定t点的u值,就好了。
: 【 在 greathope 的大作中提到: 】
: : 我想求解一个动力学问题
: : dy/dt=f(y,t)+u(t)
: : 这里u(t)是工作空间中的一个变量,该怎么样做
: : 谢谢

────────────────────────────────────────
 seesea (马虎学究)                    于 2004年01月06日17:31:06 星期二 说道:

用Simulink应该更方便吧。
有状态空间模块,可以建s-函数,
有什么复杂的解决不了的呢:-)
【 在 isaacpang (小飞马) 的大作中提到: 】
: 我是想通过ODE函数作一个动力学系统的仿真。
: 如
: A=[zeros(2),eye(2);-4000,2000,-0.45,0.2;2000,-2000,0.2,0.25];
: B=[0;0;1;0];C=[0,0,1,0];
: 我想用白噪声激励求解其响应
: 当然如果是简单的系统的话,可以直接通过Simulink来做
: 但很复杂的,象自由度特别高的,用Simulink就太难了
: 所以我想用ODE来算
: 该怎么样做呢
: 谢谢

────────────────────────────────────────
 greathope (GreatHope)                于 2004年01月06日20:09:13 星期二 说道:

看看这个:
1505 How Do I Solve a Time Dependent Differential Equation?
Revison: 1.1 Last Date Modified: 31-August-2000
This is an example of an ordinary differential equation that has a time 
dependent term
using ode23/ode45. The time dependent term can be defined by either a data 
set with
known sample times or as a simple function. If the time dependent term is 
defined by a
data set, the data set and its sample times are passed into the function 
called by
ode23/ode45 as global variables. If the time dependent term is defined by a 
function,
then that function is called in the derivative function as needed.
The differential equation used in this example is the Damped Wave Equation 
with a
sinusoidal driving term.
y''(t) - beta * y'(t) + omega^2 * y(t) =
A * sin(w0 * t - theta)
MATLAB requires the differential equation be expressed as a first order 
differential
equation using the following form:
y'(t) = A * y(t)
where y is a column vector of states and A is a matrix. The MATLAB definition 
of this
differential equation is:
xdot(2) = beta * x(2) - omega^2 * x(1) + ...
A * sin(w) * t - theta)
xdot(1) = x(2)
where
xdot = dx/dt
x(1) = y
x(2) = dy/dt.
In this example beta, omega, A, w0, and theta need to be defined. They are 
declared
global and defined before ode23/ode45 is called. These variables are passed 
to the
derivative function by declaring them global in the derivative function also. 
In this
example the time dependent term is a sine wave so it can be called from 
within the
function.
Example 1: Time dependent term is a function
Create the following derivative function:
% FUN1.M: Time dependent ODE example.
function xdot = fun1(t,x)
global beta omega A w0 theta
% The time dependent term is A * sin(w0 * t - theta)
xdot(2)= -beta*x(2) + omega^2 * x(1) + ...
A * sin(w0 * t - theta);
xdot(1) = x(2);
xdot=xdot(:); % To make xdot a column
% End of FUN1.M
To call this function in MATLAB use:
global beta omega A w0 theta
beta = .1;
omega = 2;
A = .1;
w0 = 1.3;
theta = pi/4;
X0 = [0 1]';
t0 = 0;
tf = 20;
[t,y]=ode23('fun1',[t0,tf],X0);
plot(t,y)
Example 2: The time dependent term is defined by a data set. This requires
more global variables and the interp1 command.
Create the following derivative function:
% FUN2.M Time dependent ODE example with data set.
function xdot = fun2(t,x)
global beta omega
global P T % Additional global variables
pt=interp1(T,P,t);
xdot(2) = beta*x(2)-omega^2*x(1)+pt;
xdot(1) = x(2);
xdot=xdot(:); % To make xdot a column
% End of FUN2.M
To call this function in MATLAB use:
global beta omega T P
beta = .1;
omega = 2;
A = .1;
w0 = 1.3;
theta = pi/4;
X0 = [0 1]';
t0 = 0;
tf = 20;
T=t0-eps:.1:tf+theta+eps;
P=A.*sin(w0.*T-theta);
[t,y]=ode23('fun2',[t0,tf],X0);
plot(t,y) 【 

 isaacpang ( 小飞马) 的大作中提到: 】: 我想求解一个动力学问题: dy/dt=f(y,t)+u(t)
: 这里u(t)是工作空间中的一个变量,该怎么样做
: 谢谢

────────────────────────────────────────
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.707毫秒