草庐IT

runge-kutta

全部标签

c++ - Runge-Kutta 算法 C++

下面是我用于求解一阶ODE的四阶Runge-Kutta算法。我正在根据找到的维基百科示例检查它here解决:\frac{dx}{dt}=tan(x)+1不幸的是,它有点出局了。我已经玩了很长时间,但我找不到错误。答案应该是t=1.1和x=1.33786352224364362。下面的代码给出了t=1.1和x=1.42223。/*Thiscodeisa1DclassicalRunge-Kuttamethod.ComparetotheWikipediapage.*/#include#include#includedoublex,t,K,K1,K2,K3,K4;constdoublesixt

c++ - odeint的runge_kutta4与Matlab的ode45的比较

我想在odeintC++library中使用runge_kutta4方法.我已经在Matlab中解决了这个问题。我在Matlab中使用以下代码求解x''=-x-g*x',初始值x1=1,x2=0,如下main.mclearallclct=0:0.1:10;x0=[1;0];[t,x]=ode45('ODESolver',t,x0);plot(t,x(:,1));title('Position');xlabel('time(sec)');ylabel('x(t)');ODESolver.mfunctiondx=ODESolver(t,x)dx=zeros(2,1);g=0.15;dx(1

MATLAB中ode45()和Runge-Kutta算法(4阶)的比较

文章目录引言ode45()Runge-Kutta算法RK算法程序仿真仿真代码不同终端时间下的算法对比不同步长下的算法对比结论引言写这篇博客目的是自己在求解微分方程的时候,考虑到ode45()可能求解速度比较慢,想用一种快速一点的微分方程求解算法,又想到ode45()用的就是Runge-Kutta(RK)算法,所以想是不是自己可以自己编写一个RK算法用来代替ode45()。因为MATLAB的ode45()算法中可能存在较多的判断条件,这也许是让ode45()速度较慢的一个原因,而自己编写的RK算法省略了很多不必要的判断,也许会快一些。ode45()ode45()算法是MATLAB中专门用于求解常

数值分析上机题Matlab--东南大学出版社(牛顿迭代/逐次超松弛迭代/3次样条插值/复合梯形SimpsonRomberg/四阶经典Runge-Kutta/幂法求特征向量)

第二章上机题Newton迭代法 function[x,err]=Newton(f,x0,epsilon)%用例:[x,err]=Newton('x^3/3-x',0.7,0.005)%Input-f字符串公式'x^3/3-x'%-x0迭代初值%-epsilon是迭代精度要求%Output–x是最后迭代的近似结果%-err是最后得到的误差symsxf=str2sym(f);f(x)=f;df(x)=diff(f(x));phi(x)=x-f(x)/df(x);restrain=1;count=0;e=1;whileabs(e)>epsilonx1=phi(x0);e=x1-x0;x0=x1;co

龙格-库塔法(Runge-Kutta methods)

非线性的常微分方程通常是难以求出解析解的,只能通过多次迭代求近似的数值解。龙格-库塔法(Runge-Kuttamethods)是用于非线性常微分方程的解的重要的一类隐式或显式迭代法。简写做RK法。对于任意的Y=f(X),假设某点(Xi,Yi)的斜率为ki,如果有无限小的dX,则有Yi+1=Yi+ki*dx。dx就是迭代步长,然而在现实中它不可能是无限小的,我们一般写作h。将它与上式中的dx替换就是一阶RK法。显然他是不够精确的。一般我们采用4阶RK法,其形式如下:k1是时间段开始时的斜率;k2是时间段中点的斜率,通过欧拉法采用斜率k1来决定y在点tn+h/2的值;k3也是中点的斜率,但是这次采

插值方法以及Runge现象

在数值分析中,插值方法是基础且重要的。本文将介绍Lagrange插值公式与Newton插值公式。此外,针对Runge现象,本文给出了稍稍详细的讨论。一、Lagrange插值公式假设函数\(y=f(x)\)在取定的\(n+1\)个互异的基点\(x_0,x_1,\cdots,x_n\)处的值已知分别为\(y_0=f(x_0),y_1=f(x_1),\cdots,y_n=f(x_n)\),现在要寻找多项式\(p(x)\)使得$$p(x_k)=f(x_k),\quadk=0,1,\cdots,n$$记\[l_i(x)=\prod_{j=0,j\neqi}^n\frac{x-x_j}{x_i-x_j},

插值方法以及Runge现象

在数值分析中,插值方法是基础且重要的。本文将介绍Lagrange插值公式与Newton插值公式。此外,针对Runge现象,本文给出了稍稍详细的讨论。一、Lagrange插值公式假设函数\(y=f(x)\)在取定的\(n+1\)个互异的基点\(x_0,x_1,\cdots,x_n\)处的值已知分别为\(y_0=f(x_0),y_1=f(x_1),\cdots,y_n=f(x_n)\),现在要寻找多项式\(p(x)\)使得$$p(x_k)=f(x_k),\quadk=0,1,\cdots,n$$记\[l_i(x)=\prod_{j=0,j\neqi}^n\frac{x-x_j}{x_i-x_j},