首页 > 解决方案 > Runge-Kutta 方法数值求解二阶非线性微分方程 - Octave

问题描述

所以我有这个解析不可解的非线性二阶微分方程:

x''=(-1/x)((x')²+gx-gh+ax')

我一直在尝试在 Octave 中应用 Runge-Kutta 方法一段时间,但没有得到好的结果。这是我一直在使用的代码:

graphics_toolkit('gnuplot')

to=0
tf=2.8
N=150
dt=[tf-to]/N

b=2.65
g=9.81
h=0.07

y(1)=0.015
z(1)=0
t(1)=to
for i=1:N-1
  y(i+1)= y(i) - dt.*z(i)
  z(i+1)= z(i) - dt.*[z(i).**2 + g.*y(i) - g.*h + b.*z(i)]./y(i)
  t(i+1)= t(i) + dt
endfor

plot(y,t)
title=('Numerical solution')
xlabel=('Time')
ylabel=('Position')

坦率地说,我无法说出问题出在哪里,也许我没有得到关于方法的某些东西,或者我的代码可能缺少一些重要的东西。

感谢您的时间和关注。

标签: octavenumerical-methodsdifferential-equationsrunge-kutta

解决方案


的实现

y' = z

在欧拉方法中是

  y(i+1)= y(i) + dt.*z(i)

注意加法而不是减法。


推荐阅读