matlab ode45三体问题,关于ode45中erf函数(输入必须为实数完全数的报错问题)
最近在做有关ODE45的微分方程求解,在微分方程中,运用到了erf函数,虽然之前也出现过类似的问题,已经解决,但是这次丝毫找不到问题的原因所在,毫无头绪。
主程序如下:
[code]
%——————xp vp zp 分别为20个点位————————————————————————
xp=[-1.91545000000000;-1.68455000000000;-1.51545000000000;-1.28455000000000;-1.11545000000000;-0.884550000000000;-0.715450000000000;-0.484550000000000;-0.315450000000000;-0.0845500000000000;0.0845500000000000;0.315450000000000;0.484550000000000;0.715450000000000;0.884550000000000;1.11545000000000;1.28455000000000;1.51545000000000;1.68455000000000;1.91545000000000];
vp=[-2.87317500000000;-2.52682500000000;-2.27317500000000;-1.92682500000000;-1.67317500000000;-1.32682500000000;-1.07317500000000;-0.726825000000000;-0.473175000000000;-0.126825000000000;0.126825000000000;0.473175000000000;0.726825000000000;1.07317500000000;1.32682500000000;1.67317500000000;1.92682500000000;2.27317500000000;2.52682500000000;2.87317500000000];
zp=[-1.43658750000000;-1.26341250000000;-1.13658750000000;-0.963412500000000;-0.836587500000000;-0.663412500000000;-0.536587500000000;-0.363412500000000;-0.236587500000000;-0.0634125000000000;0.0634125000000000;0.236587500000000;0.363412500000000;0.536587500000000;0.663412500000000;0.836587500000000;0.963412500000000;1.13658750000000;1.26341250000000;1.43658750000000];
h0 = waitbar(0,'Formulating the Transient PDF...');
%下面进行循环,每个点位都为初始值来进行ode45的求解
for kk1=1:20
waitbar(kk1/20,h0)
for kk2=1:20
for kk3=1:20
[tt,Y] = ode45(@new_gaussisan_00way_1,[0 ,4],[xp(kk1)^2;xp(kk1)*vp(kk2);xp(kk1)*zp(kk3);vp(kk2)^2;vp(kk2)*zp(kk3);zp(kk3)^2;xp(kk1);vp(kk2);zp(kk3)]);
end
end
end
[/code]
函数程序如下:
[code]
function dX=new_gaussisan_00way_1(t,x)
dX=zeros(9,1);
A=1;gama=0.1;beta=0.1;arf=0.1;w=1;ksai=0.05;
PI = 3.1415926;
I0 = 0.1;
z0=0;
%——上方是几个参数——————————————
%下面是几个和解有关的参数————在这些参数中,又用了了erf函数————————————————————
I101A=sqrt(2/PI)*(1/sqrt(x(4)))*(x(4)*(x(7)*x(9)+x(3))+x(2)*x(5))*exp(-x(8)^2/(2*x(4)))+(x(7)*x(5)+x(8)*x(3)+x(9)*x(2)+x(7)*x(8)*x(9))*erf(x(8)/(sqrt(2*x(4))));
I101B=sqrt(2/PI)*(1/sqrt(x(6)))*(x(6)*(x(7)*x(8)+x(2))+x(3)*x(5))*exp(-x(9)^2/(2*x(6)))+(x(7)*x(5)+x(8)*x(3)+x(9)*x(2)+x(7)*x(8)*x(9));%*erf(x(9)/(sqrt(2*x(6))));
I011A=sqrt(2/PI)*sqrt(x(4))*(x(8)*x(9)+2*x(5))*exp(-x(8)^2/(2*x(4)))+(x(9)*(x(8)^2*x(4))+2*x(8)*x(5));%*erf(x(8)/(sqrt(2*x(4))));
I011B=sqrt(2/PI)*(1/sqrt(x(6)))*(x(6)*(x(8)^2+x(4))+x(5)^2)*exp(-x(9)^2/(2*x(6)))+(x(9)*(x(8)^2*x(4))+2*x(8)*x(5));%*erf(x(9)/(sqrt(2*x(6))));
I002A=sqrt(2/PI)*(1/sqrt(x(4)))*(x(4)*(x(9)^2+x(6))+x(5)^2)*exp(-x(8)^2/(2*x(4)))+(x(8)*(x(9)^2+x(6))+2*x(5)*x(9));%*erf(x(8)/sqrt(2*x(4)));
I002B=sqrt(2/PI)*(sqrt(x(6))*(x(8)*x(9)+2*x(5)))*exp(-x(9)^2/(2*x(6)))+(x(8)*(x(9)^2+x(6))+2*x(5)*x(9));%*erf(x(9)/sqrt(2*x(6)))
I001A=sqrt(2/PI)*sqrt(x(4))*x(9)*exp(-x(8)^2/(2*x(4)))+(x(8)*x(9)+x(5));%*erf(x(8)/sqrt(2*x(4)));
I001B=sqrt(2/PI)*sqrt(x(6))*x(8)*exp(-x(9)^2/(2*x(6)))+(x(8)*x(9)+x(5));%*erf(x(9)/sqrt(2*x(6)));
%————————————————————————————————————————
dX(1)=2*x(2);
dX(2)=x(4)-2*ksai*w*x(2)-arf*w^2*x(1)-(1-arf)*w^2*x(3)+w^2*(1-arf)*z0*x(7);
dX(3)=x(5)+A*x(2)-gama*I101A-beta*I101B;
dX(4)=-4*ksai*w*x(4)-2*arf*w^2*x(2)-2*(1-arf)*w^2*x(5)+2*w^2*(1-arf)*z0*x(9)+I0*1;
dX(5)=-2*ksai*w*x(5)-arf*w^2*x(3)-(1-arf)*w^2*x(6)+w^2*(1-arf)*z0*x(9)+A*x(4)-gama*I011A-beta*I011B;
dX(6)=2*A*x(5)-2*gama*I002A-2*beta*I002B;
dX(7)=x(8);
dX(8)=-2*ksai*w*x(8)-w^2*arf*x(7)-w^2*(1-arf)*x(9)+w^2*(1-arf)*z0*I0*1;
dX(9)=A*x(8)-gama*I001A-beta*I001B;
end
[/code]
最后再运算的时候 会产生的错误如下:
[code]
错误使用 erf
输入必须为实数完全数。
出错 new_gaussisan_00way_1 (line 10)
I101A=sqrt(2/PI)*(1/sqrt(x(4)))*(x(4)*(x(7)*x(9)+x(3))+x(2)*x(5))*exp(-x(8)^2/(2*x(4)))+(x(7)*x(5)+x(8)*x(3)+x(9)*x(2)+x(7)*x(8)*x(9))*erf(x(8)/(sqrt(2*x(4))));
出错 ode45 (line 261)
f(:,2) = feval(odeFcn,t+hA(1),y+f*hB(:,1),odeArgs{:});
出错 e_rfyansuan (line 16)
[tdata,xdata]=ode45('new_gaussisan_00way_1',[0,10],[xp(kk1)^2;xp(kk1)*vp(kk2);xp(kk1)*zp(kk3);vp(kk2)^2;vp(kk2)*zp(kk3);zp(kk3)^2;xp(kk1);vp(kk2);zp(kk3)]);
[/code]
进行过一些尝试:
测试1:
如果把初始值改成0.01;0.03 这种之类的常数,就不会出现报错,
测试2:
如果初始值都采用xvp的第一个数值
[tdata,xdata]=ode45('new_gaussisan_00way_1',[0,10],[1.915^2;1.915*2.873;1.915*1.436;2.873^2;2.873*1.436;1.436^2;-1.915;-2.873;-1.436]);
也依然会使用程序的时候报错
以I101A为例,对于初始值来说erf的位置
erf(x(8)/(sqrt(2*x(4)))) 就是erf(-2.873/sqrt(2*2.873^2))=erf(-1/sqrt(2)),这应该没错啊
但是依然不行。。。。
但是按道理来说,导入的初始值看起来也并没有什么问题,就是不知道哪里出错。
使得erf函数执行不下去。
希望大家能帮帮我 谢谢了
matlab ode45三体问题,关于ode45中erf函数(输入必须为实数完全数的报错问题)相关推荐
- Dev-C++中关于函数 was not declared in this scope报错的解决方法
1.先报错在哪一行看一下这行的上下行有没有错有时候这个提示可能是告诉你错误可能是出现在这个附近 2.看传入这个函数的实参是否定义了,有没有写错字符的情况.这个参数是否超过了它的"生存范围&q ...
- matlab 脚本是什么意思,MATLAB提示不能在脚本中定义函数,是什么意思?
点击查看MATLAB提示不能在脚本中定义函数,是什么意思?具体信息 答:你试图在命令窗口定义函数,这种做法是错误的. 你需要建立一个.m文件,文件名是Chebyshev.m,然后在里面输入源程序. 答 ...
- oracle拼接字符串报错,Oracle 中wmsys.wm_concat拼接字符串,结果过长报错解决
备忘:这个函数最大是4000,根据拼接列的长度,通过限制拼接条数来防止拼接字符串过长错误 --这个情况是从子表中读取出具,这里直接把它当做查询字段处理,在子表中有所有数据 select info.id ...
- 新手零基础:飞桨代码中关于图片路径读取和资源解压报错
#飞桨代码中关于图片路径读取和资源解压报错 1.路径读取 在进行路径图片读取时,不同版本的python的os模块在路径拼接时会报错,一般情况下os.path.join(path,name),是可以将路 ...
- IDEA导入Maven项目,pom.xml文件中 有inspects a maven model for resolution problems报错 !!!!!!!!!!有用
IDEA导入Maven项目,pom.xml文件中 有inspects a maven model for resolution problems报错 2018年08月06日 22:13:09 东方不能 ...
- php json追加500错误,在composer.json中添加了一个git地址;composer update 报错
在composer.json中添加了一个git地址:composer update 报错,不知道是什么原因导致的,如图: 问题补充: 在BAE包里面添加composer.json 后 重新compos ...
- MySQL在windows系统中修改datadir路径后无法启动问题,报错1067
windows server2008下如何更改MySQL数据库的目录的帖子已经很多了,这里简单介绍一个步骤,如果不成功请先查看其它帖子. 更改默认的mysql数据库目录将 C:\Documents a ...
- androidstudio安装的app打开闪退,AndroidManifest中也声明了类,但是却没有报错信息。(小坑)
安卓app打开闪退,AndroidManifest中也声明了类,但是却没有报错信息. 最终重写代码,人工debug.发现是当我点击按钮进行计算,需要获取editText的值.而我将editText的值 ...
- flowiz库中遇到 ValueError: buffer is smaller than requested size报错
flowiz库中遇到 ValueError: buffer is smaller than requested size报错 我是这句代码报的错, tmp = np.frombuffer(flo.re ...
最新文章
- java实现指数分布_Nim 语言编程实现指数分布的随机数
- AODV---点点滴滴
- 现代密码学4.1--消息完整性
- 大量执行OSS PutObject时卡住的问题排查
- C语言目录操作 (Linux/Unix)
- Binary Tree Level Order Traversal II --leetcode C++
- [USACO09OCT]热浪Heat Wave
- VSS Teamwork 环境架设[文章汇编集]
- 利用HBuilderX制作手机APP应用程序之知识问答
- 动手制作Dos、WinPE、Slax Linux|winpe+dos+Mini Linux U盘启动盘
- 如何在CAD图纸中添加文字
- Null(空值)和 Undefined(未定义)
- 3DMAX和MAYA的区别
- matlab定义sliced类型,Sliced Variables
- 小米弹性调度平台Ocean
- PHP抓取网页内容获得网页源代码
- Mac下如何输入全角空格
- 中南大学移动宽带连接路由器解决方案
- html5作品展示的动效,HTML5 动效的常见制作方法
- linux中文输入法 2017,ubuntu 16.04 下安装并切换搜狗中文输入法