声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1149|回复: 5

[综合讨论] 请教一个常微分方程的求解方法

[复制链接]
发表于 2010-12-1 12:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
本帖最后由 zhijieguo 于 2010-12-1 12:10 编辑

请问:
方程中含有一个函数f(t),比如下面这个方程:x’’+3x'+5x+f(t)=0。初值:当t=0时x=0,x'=1。
f(t)是试验测得的一组数据,也就是说仅仅知道f(t)的数值解,而无其解析表达式(我试过用正弦级数拟合,效果不好)。

如果我要用ode45来求方程的数值解,应该怎么做?

注:f(t)的数据在附件中。
谢谢大家。

1.rar

126.26 KB, 下载次数: 9

f(t)的数据文件

回复
分享到:

使用道具 举报

 楼主| 发表于 2010-12-1 12:14 | 显示全部楼层
本帖最后由 zhijieguo 于 2010-12-1 12:14 编辑

我自己做了一下,遇到一些问题:
函数文件:
%定义方程组的函数M文件:
function dz=fun1(t,z)
f=xlsread('1');
%
%=======================
dz=zeros(2,1);   
%=======================
dz(2)=-3*z(2)-5*z(1)-f;
dz(1)=z(2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
return
 楼主| 发表于 2010-12-1 12:15 | 显示全部楼层
调用语句
clear %清除workspace中的数据
clc   %清除屏幕
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[t,z]=ode45('fun1',[0:1/300:23.333333],[0;1]);
plot(t,z(:,1),t,z(:,2));
 楼主| 发表于 2010-12-1 12:15 | 显示全部楼层
本帖最后由 zhijieguo 于 2010-12-1 12:16 编辑

按照我的程序,计算的时候报错:

???  In an assignment  A(I) = B, the number of elements in B and
I must be the same.(好像在说dz(2),dz(1)和f不匹配)

Error in ==> fun1 at 8
dz(2)=-3*z(2)-5*z(1)-f;
(好像在说dz(2),dz(1)和f不匹配,dz(2)是向量元素?f是向量,无法赋值?)

Error in ==> funfun\private\odearguments at 110
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
(以上两处错误,好像在说ode45这个内部函数有些要求,而我违反了。)
 楼主| 发表于 2010-12-1 12:17 | 显示全部楼层
我是matlab新手,也是初次算常微分方程。
各位大神,谁能帮忙看看这个问题怎么解决。先谢过了。
发表于 2010-12-9 08:12 | 显示全部楼层
dz(2)=-3*z(2)-5*z(1)-f;
我仅以此句为例给楼主点建议。
这种情况下你必须先定义z类型,否则它不会知道z是个什么东东。
我也下载了你的文件 但我不知道你这句到底什么意思
-f ?? f是个矩阵 怎么能用一个数值或一个向量减呢?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-21 19:01 , Processed in 0.065666 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表