声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2000|回复: 3

[计算数学] matlab解微分方程组求助

[复制链接]
发表于 2012-7-8 13:24 | 显示全部楼层 |阅读模式

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

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

x
动力学方程如下:
function dx=tanhuang1(t,x,k0)
dx=zeros(4,1);
dx(1)=x(2);
dx(2)=-k0*x(1)*(1-1/(sqrt(x(1)^2+x(3)^2)));
dx(3)=x(4);
dx(4)=9.8-k0*x(3)*(1-1/(sqrt(x(1)^2+x(3)^2)));
%%%%%%%%%%%%%%%%%%%%%%%%%%%
主程序如下:
clear all
k0=input('请输入参数k0:');
[t,x]=ode45('tanhuang1',[0 100],[1 0 0 0],k0)
plot(x(:,1),x(:,2))
%%%%%%%%%%%%%%%%%%%%
无法运行
可是将参数k0取消后,直接令为常数,就可以进行运算,我想知道这个错在哪里?请高手指出,删除K0后的
function dx=tanhuang1(t,x)
dx=zeros(4,1);
dx(1)=x(2);
dx(2)=-1*x(1)*(1-1/(sqrt(x(1)^2+x(3)^2)));
dx(3)=x(4);
dx(4)=9.8-1*x(3)*(1-1/(sqrt(x(1)^2+x(3)^2)));
%%%%%%%%%%%%%%%%%%%%%%%%%%%
主程序如下:
clear all
k0=input('请输入参数k0:');
[t,x]=ode45('tanhuang1',[0 100],[1 0 0 0])
plot(x(:,1),x(:,2))
%%%%%%%%%%%%%%%%%%%%
直接将K0=1,等于任何常数即可运行啊。
回复
分享到:

使用道具 举报

发表于 2012-7-9 16:45 | 显示全部楼层
发表点个人浮浅的看法,可能并不是问题的根本原因。
ode45(),或者说非线性微分方程组的数值解命令,共有四个参数:函数名、自变量范围、初值、允许误差属性。也就是说第四个参数应该为“允许误差属性”,而并不是微分方程的一个变量。
楼主的目的是要解一个带参数的非线性微分方程,一般的线性方程都可以自由地传递变量,非线性微分方程的函数定义也只有两个变量,一个是自变量,一个是函数,并没有另外的变量。而到目前为止,还没有发现带三个变量的定义式。
怎么解决这个问题?考虑在函数中把k0定义成全局变量,在主程序中赋值,但是不成功。看看大家还有别的办法吗。
发表于 2012-7-19 16:21 | 显示全部楼层
调用ode45存在问题,简单调整一下就可以了

clear all
k0=input('请输入参数k0:');
options=odeset('RelTol',1e-7);
[t,x]=ode45(@tanhuang1,[0 100],[1 0 0 0],options,k0)
plot(x(:,1),x(:,2))
发表于 2012-7-19 16:22 | 显示全部楼层

ode45可以用于分析变参数的微分方程,你的回复有点误导哦
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-17 06:10 , Processed in 0.058641 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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