阿多米安分解法解非线性方程



George Adomian (1922--1996)

阿多米安分解法(Adomian decomposition method,简称:ADM法)是非线性方程的一个级数解的方法。本文依据文献:Convergence of Adomian's method applied to nonlinear equations做一个简要介绍。

方法

非线性方程$f(x)=0$写成如下形似:

\begin{equation} x=F(x)+c \label{eq} \end{equation}

方程的解是如下级数形式:

\begin{equation} x=\sum_{i=0}^{\infty}x_i \label{series} \end{equation}

将$F(x)$在$x=x_0$附近做泰勒展开:

\begin{equation} \begin{split} F(x)=&F(x_0)+F'(x_0)(x-x_0)+F''(x_0)\frac{(x-x_0)^2}{2!} \\ &+F'''(x_0)\frac{(x-x_0)^3}{3!}+\cdots \\ =&F(x_0)+F'(x_0)(x_1+x_2+\cdots)+F''(x_0)\frac{(x_1+x_2+\cdots)^2}{2!}\\ &+F'''(x_0)\frac{(x_1+x_2+\cdots)^3}{3!}+\cdots \\ =& A_0+A_1+A_2+A_3+\cdots \end{split} \label{FTaylor} \end{equation}

阿多米安多项式(Adomian’s polynomials)前4项为:

\begin{equation} A_0=F(x_0) \label{A0} \end{equation}

\begin{equation} A_1=x_1F'(x_0) \label{A1} \end{equation}

\begin{equation} A_2=x_2F'(x_0)+\frac{1}{2!}x_1^2F''(x_0) \label{A2} \end{equation}

\begin{equation} A_3 = x_3F'(x_0)+x_1x_2F''(x_0)+\frac{1}{3!}x_3^3F'''(x_0) \label{A3} \end{equation}

\begin{equation} A_4 = x_4F'(x_0)+\left(\frac{1}{2!}x_2^2+x_1x_3\right )F''(x_0)+\frac{1}{2!}x_1^2x_2F'''(x_0)+\frac{1}{4!}x_1^4F^{(iv)}(x_0) \label{A4} \end{equation}

\begin{equation} \begin{split} A_5 =& x_5F'(x_0)+(x_1x_4+x_2x_3)F''(x_0)+\frac{1}{2!}(x_3x_1^2+x_1x_2^2)F'''(x_0) \\ & + \frac{1}{3!}x_1^3x_2F^{(iv)}(x_0) + \frac{1}{5!}x_1^5F^{(v)}(x_0) \end{split} \label{A5} \end{equation}

\begin{equation*} \vdots \end{equation*}

阿多米安多项式的一般形式为:

\begin{equation} A_n(x_0,x_1,x_2,\cdots)=\frac{1}{n!}\left. \left [ \frac{\mathrm d^n}{\mathrm d\lambda^n}F\left (\sum_{i=0}^{\infty}\lambda^ix_i \right ) \right ]\right |_{\lambda = 0} \label{An} \end{equation}

$x$级数\eqref{series}式中各项为:

\begin{equation} \begin{split} x_0 =& c \\ x_1 =& A_1 \\ x_2 =& A_2 \\ x_3 =& A_3 \\ \vdots \end{split} \label{xi} \end{equation}

举例

如果方程\eqref{eq}式中的$F(x)=x^3$,那么,有

\begin{equation*} \begin{split} x_0=&c \\ x_1=&A_0=x_0^3 \\ x_2=&A_1=3x_0^2x_1 \\ x_3=&A_2=3x_0^2x_2+3x_0x_1^2 \\ x_4=&A_3=3x_0^2x_3+6x_0x_1x_2+x_0^3 \\ x_5=&A_4=3x_0^2x_4+3x_1^2x_2+3x_2^2x_0+6x_0x_1x_3 \\ x_6=&A_5=3x_0^2x_5+3x_1x_2^2+3x_1^2x_3+6x_0x_1x_4+6x_0x_2x_3 \end{split} \vdots \end{equation*}

下面解方程:

\begin{equation} x^3+4x^2+8x+8=0 \label{eqex} \end{equation}

化成如下形式:

\begin{equation} x=-\frac{1}{4}x^3-\frac{1}{2}x^2-1 \label{TReqex} \end{equation}

级数解截断至第6项,得$x=-1.9749$,与方程精确解$x=-2$接近。

Matlab程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
%Adomian2.m
clc;syms x0 x1 x2 x3 x4
f0=x0^(2);
b=-1/2,a=-1/8
A(1)=(f0);
A(2)=x1*diff(f0,1,'x0');
A(3)=x2*diff(f0,1,'x0')+(x1.^2/2)*diff(f0,2,'x0');
A(4)=x3*diff(f0,1,'x0')+x1*x2*diff(f0,2,'x0')+(x1.^3/6)*diff(f0,3,'x0');
A(5)=x4*diff(f0,1,'x0')+((1/2)*x2.^2+x1*x3)*diff(f0,2,'x0')...
+(1/2)*x1.^2*x2*diff(f0,3,'x0')+(1/120)*x1.^4*diff(f0,4,'x0');
A1=A
f0=x0^(3);
A(1)=(f0);
A(2)=x1*diff(f0,1,'x0');
A(3)=x2*diff(f0,1,'x0')+(x1.^2/2)*diff(f0,2,'x0');
A(4)=x3*diff(f0,1,'x0')+x1*x2*diff(f0,2,'x0')+(x1.^3/6)*diff(f0,3,'x0');
A(5)=x4*diff(f0,1,'x0')+((1/2)*x2.^2+x1*x3)*diff(f0,2,'x0')...
+(1/2)*x1.^2*x2*diff(f0,3,'x0')+(1/120)*x1.^4*diff(f0,4,'x0');
A2=A
X(1)=b*A1(1)+a*A2(1);X(1)=vpa(subs(X(1),x0,-1));
X(2)=b*A1(2)+a*A2(2);X(2)=subs(X(2),[x0,x1],[-1,X(1)]);
X(3)=b*A1(3)+a*A2(3);X(3)=subs(X(3),[x0,x1,x2],[-1,X(1),X(2)]);
X(4)=b*A1(4)+a*A2(4);X(4)=subs(X(4),[x0,x1,x2,x3],[-1,X(1),X(2),X(3)]);
X(5)=b*A1(5)+a*A2(5);
X(5)=vpa(subs(X(5),[x0,x1,x2,x3,x4],[-1,X(1),X(2),X(3),X(4)]))
zero=vpa((sum(X))-1,5)

此程序来自图书



标签: 阿多米安分解法

添加新评论

captcha
请输入验证码