- 在线时间
- 31 小时
- 最后登录
- 2017-7-6
- 注册时间
- 2014-7-7
- 听众数
- 12
- 收听数
- 0
- 能力
- 0 分
- 体力
- 316 点
- 威望
- 0 点
- 阅读权限
- 30
- 积分
- 150
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 111
- 主题
- 3
- 精华
- 0
- 分享
- 0
- 好友
- 5
升级   25% TA的每日心情 | 开心 2015-9-11 00:19 |
|---|
签到天数: 54 天 [LV.5]常住居民I
- 自我介绍
- 无,新手,最近才接触建模,求指点。
 |
问题是这样的(见附图)
9 S/ r4 b6 \% [- e; {8 i7 W% e7 Q/ q( T: Z+ Q% b
然后我的程序如下- function Untitled
1 E, S0 O p- H- T- {/ o - clear all;clc;6 ~0 I5 g( v, F
- f=@(t)(2*sin(t)*(t<(4*pi)) + 0);
$ R- W, B\" K% @5 V, t - g=@(t)(0+cos(t).*(t>=((7*pi)/2)));( B5 r3 A* L7 R- W. n( {\" Q. i
- function dy = rigid(t,y)' P4 O# T4 ?5 \3 z5 R4 H
- dy = zeros(2,1);
9 X+ a& b8 Y1 P- w* N1 x0 o - dy(1) = y(2)-f(t);% b/ @3 K! A\" k# o
- dy(2) = y(1)*g(t)-y(2);
) F: a% J\" p) T e - end! k. l! B( s9 v0 G$ j4 u1 U6 m
- options = odeset('RelTol',1e-4,'AbsTol',[1e-5 1e-5]);
q Q H8 h1 B m - %[T, y] = ode45(@rigid, [0 20], [1 2],options)
& O+ ^) s+ N# W\" W - sol = ode45(@rigid, [0 20], [1 2],options);
- k' [8 J& e* O% Z; f7 u0 e$ R! v/ T - x=linspace(0,20,200000);
! C6 d- p9 K; X2 k% O$ o* p6 g - y=deval(sol,x);' B# h1 {7 c; c$ N V
- res=y(1,:)+y(2,:); g% j1 d2 L4 q4 Q) ]/ z+ @
- idx=find(abs(res-0)<1e-4) %相加,当和小于误差运行范围的时候可以认为它就为0
' O, m9 L( i* z% m% S) X - xx=x(idx) %算出在x中的下标
+ V1 I1 s7 r: ?$ {$ X7 C- H - F=@(t)(f(t)+g(t));
% X# v3 y- ~/ ^8 K2 J: t - r=[]; %得出的解反代入方程求值,得到的值保存在r中。如果解正确,r中的值应该非常接近0; i& P, l$ I3 q. q
- for i=1:size(xx,2)
# Z' G6 v# s5 v- \\" @$ {\" N - r = [r F(xx(i))]; %将解的值依次带入。当前问题在于r中的值都和0差的很远\" e: F2 G\" a4 l. m
- end
/ t2 V! _$ X. e\" \! c& x3 |7 d7 | - r2 b' z9 I+ z. R4 W% t) ^! E
- end
复制代码 问题就是最后算出来的解再带入方程进行检验得出的结果和0差的好远,都到了1.73几。 a3 K2 _& [( k" B. \
我也不知道哪里用错了,但猜测可能是由于微分方程里出现了f(t),g(t)的缘故
1 E3 h8 Z4 S9 ]3 W8 h6 R7 B0 k5 W2 k! h( V& x, ~# K
求教大家我的程序是哪里出现了问题,该如何改呢?2 j; M' }7 |3 C2 j
谢谢
3 i6 v3 K4 P. e2 x" d& j7 J: m$ j5 H3 Z4 s+ |
3 x' K6 b# H, T* a( `8 L |
zan
|