用Matlab求解一个六阶非线性微分方程

24次浏览(过去30天)
大家好,
我正试图解一个高阶非线性微分方程
作为边界条件,我有以下几个条件:
我试着用一种射击法算法来解这个方程 ,我把它转换成一阶微分方程的形式如下:
:
根据边界条件,有: 我们要猜剩下的几个:
我在我的帖子中附上了我写的算法,它受到传记研究的启发:主要代码称为“shoot4nl”。m”,我试着猜测一些初始值,以便运行算法。我还选择了一个值 非常“高”,以匹配条件……
通过这样做,我得到以下错误:
警告:矩阵为奇异的工作精度。
在newtonRaphson2中(第23行)
射击4(第14行)
错误使用newtonRaphson2
多次迭代
错误在shoot4n1(第14行)中
u = newtonRaphson2(@residual,u);
我认为这意味着在这个过程中会出现一个除以0的情况,但我仍然不知道如何解决这个问题……
有没有人能帮我一下,或者把他的数学专业知识带来给我一些提示?
提前谢谢你,
致以最亲切的问候。
2的评论
Wissem-Eddine KHATLA
Wissem-Eddine KHATLA 2022年4月7日
@Bruno陈德良 谢谢你的回复。 @Torsten 通过使用各种内置函数为我的第一次尝试提供了更正,但似乎我得到了一个错误,说明“fsolve”函数不正确……

登录评论。

答案(2)

Torsten
Torsten 2022年4月6日
编辑:Torsten 2022年4月6日
我认为,如果有经过良好测试的MATLAB替代品,这个论坛中没有人会潜入自制软件。
所以这几行代码可以让你开始使用专业软件:
b0 = [1 1 1 1];
BC = fsolve(@fun,bc0);
F0 = [1 -5;0;bc(1);bc(2);bc(3);bc(4)]
[-10,10];
[eta,F] = 0 (@fun_ode,etaspan, 0);
情节(η,F (: 1))
函数Res =乐趣(bc)
F0 = [1e-5;0;bc(1);bc(2);bc(3);
Etaspan = [- 10,0,10];
[eta,F] = 0 (@fun_ode,etaspan, 0);
res(1) = F(2,2);
res(2) = F(2,4);
res(3) = F(3,1);
res(4) = F(3,2);
结束
函数dfdelta = fun_ode(eta,F)
dFdeta = [F (2), (3); F (4), F (5), F (6); (1/9 * (5 * F(1) 4 *η* F (2)) 3 * F (1) ^ 2 * (2) * F (6)) / F (1) ^ 3];
结束
30的评论
Wissem-Eddine KHATLA
Wissem-Eddine KHATLA 2022年4月10日
编辑:Wissem-Eddine KHATLA 2022年4月10日
@Torsten 我尝试了bvp4c求解器使用拍摄方法的结果:它似乎不能很好地使用以下代码:
%求解方法采用bvp4c求解器
%边界条件:F (0) = F (0) = F”的(0)= 0 (eta0) = F (eta0) = F”(eta0) = 0
Eta0 = 20;
Eta = linspace(0,eta0,100);
Yinit = [3.3517;0;0.5079;0;0.1194;0];OCTAVE ode45集成的%解决方案
Solinit = bvpinit(eta, init);
Sol = bvp4c(@fun_ode, @bcfun, solinit);
Eta = sol.x;
F = sol.y(1,:);
数字
情节(埃塔(F);
函数dF = fun_ode(eta,F)
dF = [F (2);
F (3);
F (4);
F (5);
F (6);
(1/9 *(5 *(1) 4 *η* F (2)) 3 * F (1) ^ 2 * (2) * F (6)) / F (1) ^ 3);
结束
函数Res = bcfun(ya,yb)
res =[丫(2);丫(4);丫(6);yb (1);yb (2);yb (3)];
结束
另一位用户建议我这个问题并不棘手:我很困惑,因为文献中有一个类似的方程,所以我认为我仍然有可能解决它。
谢谢你!

登录评论。


布鲁诺陈德良
布鲁诺陈德良 2022年4月9日
使用bvp4c
Eta0 = 10;
Eta = linspace(0,eta0,100);
[0;0;0;0];
Solinit = bvpinit(eta, init);
Sol = bvp4c(@fun_ode, @bcfun, solinit);
Eta = sol.x;
F = sol.y(1,:);
情节(埃塔(F);
函数dF = fun_ode(eta,F)
dF = [F (2);
F (3);
F (4);
F (5);
F (6);
(1/9 *(5 *(1) 4 *η* F (2)) 3 * F (1) ^ 2 * (2) * F (6)) / F (1) ^ 3);
结束
函数Res = bcfun(ya,yb)
res =[丫(2);% F (0)
丫(4);% F”(0)
丫(6);% F”“(0)
yb (1:3)];% F(eta0), F'(eta0), F'(eta0),
结束
79条评论
Wissem-Eddine KHATLA
Wissem-Eddine KHATLA 2022年4月20日
@Torsten F''(-eta0)不等于1.35。例如,下面是我的情节:
与文章中的一个相比:

登录评论。

社区寻宝

在MATLAB Central中寻找宝藏,并了解社区如何帮助您!

开始狩猎!