Skip to content

19.8.4 交互程序系统和计算机代数系统的应用

19.8.4.1 Matlab

商用程序系统 Matlab (矩阵实验室) 是一个数学求解公式问题的交互环境, 同时也是科学技术计算的高级原本语言. 优先设置线性代数的问题和算法. Matlab 很方便地将实现数值程序及数据和结果的先进的图形表示统一起来. 根据 IEEE 标准 (表 19.4) 计算大多以双精度浮点数运行. 能与 Matlab 兼容的进一步的选择是可免费下载的 Scilab 和 Octave 系统.

1. 函数概述

下面是 Matlab 中程序和函数的简要概述.

Allgemeine mathematische Funktionen

1. Trigonometrie 5. Koordinatentransformationen 2. Exponentialfunktion, Logarith- 6. Rundung und gebrochener Teil men 3. Spezielle Funktionen 7. Diskrete Mathematik 4. Komplexe Arithmetik 8. Mathematische Konstanten

1. Manipulation von Feldern und

Matrizen

2. Spezielle Matrizen

3. Matrix-Analysis (Normen, Kondi-

tion)

4. Lineare Gleichungssysteme


5. Eigenwerte und Singulärwerte

6. Matrix-Faktorisierungen

7. Matrixfunktionen

8. Verfahren für dünn besetzte Ma-trizen


Numerische Verfahren

1. Berechnung statistischer Daten 7. Ermittlung der konvexen Hülle 2. Korrelation und Regression 8. Numerische Integration 3. Diskrete Fouriertransformation 9. Gewöhnliche Differentialgleichun- 4. Polynome und Splines gen 5. Ein- und mehrdimensionale Inter- 10. Partielle Differentialgleichungen polation 11. Nichtlineare Gleichungen 6. Triangulationen und Zerlegungen 12. Minimierung von Funktionen

此外, Matlab 有许多用来求解不同类型的特殊数学问题的程序包, 即所谓工具箱. 作为某些例子, 这里提到曲线拟合、滤波器、商业数学、时间序列分析、信号和模式处理、神经网络、优化、偏微分方程、样条、统计和小波.

在下面的段落中, 以简单的例子来说明 Matlab 的应用. 在后面 Mathematica 和 Maple 的数值应用中, 将同样讨论这些问题.

2. 数值线性代数

在开启 Matlab 命令提示符 “>>” 后, 命令窗口显示等待接受命令. 若命令不以分号 “; ” 结束,则在命令窗口出现结果. 求解线性方程组 Ax=b 的基本命令 (参见第 1242 页 19.2.1) 是反斜杠算符 “\”.

给定矩阵 A=(103211123) 和向量 b=(2,3,2)T . 输入

A=[103;211;123],b=[2;3;2],x=Ab,norm(Axb)

输出为

A=10321.0000211b=3x=2.0000 ans =8.881812321.0000 ans =8.8818e016

残量的欧几里得范数表明, 得到的解 (并未显示所有的数字) 以允许的计算机浮点数表示的精度满足方程组.

若矩阵 A 是非奇异的方阵,则线性方程组有唯一解. 由反斜杠算符 “\” 用通常的列主元高斯消元法,得三角分解 PA=LA (参见第 1242 页 19.2.1.1). - 矩阵 A 的三角分解也可由输入

>>[L,R,P]=lu(A)

实现. 得到输出

L=(1.0000000.50001.000000.50000.33331.0000),R=(2.00001.00001.000001.50002.5000003.3333),P=(010001100)

(这里为了避免混乱用括号表示矩阵).

反斜杠算符首先测试系数矩阵 A 的性质,若 A 是一个三角矩阵排列,则求解相应的梯队形式. 若是对称矩阵 A ,则应用楚列斯基方法 (参见第 1245 页 19.2.1.2).

若系数矩阵 A 的条件数太大,则求解时可能产生数值问题. 因此在 Matlab 运行期间, 估计条件数的倒数值, 若此数过小, 给出警告提示.

n=13 阶的希尔伯特矩阵可作为例子,其中 hik=1/(i+k1) .

x=hilb(13) ones(13,1);

Warning: Matrix is close to singular or badly scaled.

Results may be inaccurate. RCOND =2.409320e017 .

在超定线性方程组的情况下, 相应的线性拟合问题由正交化过程处理, 即由正交变换得到 QR 分解

A=QR

(参见第 1246 页 19.2.1.3).

A=[103;211;123;111];b=[2;3;2;1];x=Ab,

norm(Axb)

0.4673

x=1.4393 ans =2.0508

-0.4953

>>[Q,R]=qr(A)Q=(0.37800.45830.64660.47850.75590.27500.23210.54690.37800.82500.41450.06840.37800.18330.59690.6836),R=(2.64581.88982.645801.55840.6417003.5480003.5480)

反斜杠算符也对欠定和缺秩的线性方程组给出了有意义的结果. 如何处理大型稀疏矩阵的方法的详细介绍可见相应的 Matlab 文件和说明 [19.15],[19.30].

3. 方程的数值求解

在 Matlab 中用行向量 (an,an1,,a1,a0) 表示多项式

p(x)=anxn+an1xn1++a1x+a0

的系数. 有多个函数可用来处理多项式.

作为例子,确定多项式 p(x)=x6+3x25 在 1 处的值、导数 (即导数多项式的系数向量) 及根.

>>p=[1000305];

>> polyval(p,1)ans =1

polyder(p)ans =600060

roots(p) ans =0.8673+1.1529i,0.86731.1529i,1.0743 ,

0.8673+1.1529i,0.86731.1529i,1.0743

根作为相应伴随矩阵的特征值被确定. 命令 fzero 用来求非线性标量方程的近似解.

计算方程 ex34x2=0 的三个解.

>>fzero((a)exp(x)4x2,1) ans =0.4741

fzero(@(x)exp(x)4x2,0) ans =0.5413

fzero(@(x)exp(x)4x2,1) ans =1.2085

在命令 fzero 下输入方程作为未命名的函数. 显然它依赖于第二个变量的给定初值, 其解是近似的. 迭代过程用二分法和试位法的组合完成 (参见第 1236 页 19.1.1.3).

4. 插值

基于给定数据的函数拟合可以通过插值 (参见第 1276 页 19.6.1) 或最佳函数逼近 (参见第 1280 页 19.6.2.2) 得到. 在 Matlab 中, 命令 plot 是以图形表示数据集合的最简单的方式. 在自打开图表窗口的菜单中包含编辑图形 (线型、符号、标题和说明) 的工具, 用于输出和打印基本拟合.

基本拟合是工具箱的子程序, 提供了多种插值方法和不同阶的最佳逼近多项式. 由函数 “interp1” 和 “polyfit” 来实现.

根据输入

plot ([1.70045,1.2523,0.638803,0.423479,0.249091,0.160321,

0.0883432,0.0570776,0.0302744,0.0212794]);

数据值被置于数据位置 1,2,,10 且用图形表示. 图 19.19(a) 展示了相应的三次插值样条和四阶最佳逼近多项式的数据集.

01937d01-b6f6-7881-8294-3a9c82211946_83_187_463_1262_492_0.jpg

函数 interp2 提供在二维矩形网格上给定数据作插值的适当方法 (参见第 1295 页 19.7.2.1). 对于非规则分布的数据作插值调用 griddata.

命令序列

>>[X,Y]= meshgrid (2:1:2);F=4sqrt(16X2Y2) ;

[Xe,Ye]= meshgrid (2:0.1:2);S=interp2(X,Y,F,Xe,Ye,spline) ;

>>surf(Xe,Ye,S)

hold on; stem3(X, Y, F,'fill')

实现了函数 f(x,y)=16x2y2 在给定网格上的二元三次样条插值. 插值样条在较细的矩形网格上求值. 图 19.19(b) 描绘了插值函数而且也显示了数据点.

5. 数值积分

在 Matlab 中程序 quad 和 quadl 可用于数值积分. 这两个程序基于自适应选取步长递归应用插值求积. Quad 基于辛普森公式, quadl 应用高阶洛巴托公式 (参见第 1253 页 19.3.2). 在被积函数充分光滑的情况及较高的精度要求下, quadl 比 quad 更有效.

作为第一个例子,考虑近似计算定积分 I=01sinxxdx (正弦积分参见第 681 页 8.2.5,1.).

format long; [I, fwerte]=quad(@(x)(sin(x)./x),0,1)

Warning: Divide by zero. >In@(x)(sin(x)./x)In quad at 62

I=0.94608307007653 fwerte =14

format long; [I, fwerte]=quadl((@(x)(sin(x)./x),0,1) Warning: Divide by zero. >In@(x)(sin(x)./x)In quadl at 64 I=0.94608307036718 fwerte =19

两个程序显然都认知被积函数在区间左端的不连续性, 但得到积分的近似值并无困难. 基于同一例子在 1257 页 19.3.4.2 中的结果, 函数求值的数目看来很大, 但可自适应递归确定.

format long; [I,fwerte]=quad(Q(x)(sin(x)./x),0,1,1e14)

I=0.94608307036718 fwerte =258

format long; [I, fwerte]=quadl(( @(x)(sin(x)./x),0,1,1e14 )

I=0.94608307036718 fwerte =19

(这里没有重复警告信息). 作为进一步的论证给出确定的精度为 1014 (容忍误差为 106 ),在这一情况下显然可见 quad1 的优越性.

确定定积分 I=10001000ex2dx . >> format long; [I, fwerte]=quad(@(x)(exp(-x.^2)),-1000,1000,1e-10) I=1.77245385094233 fwerte =585

format long; [I, fwerte]=quadl((@(x)(exp(-x.^2)),-1000,1000,1e-10) I=1.77245385090571 fwerte =768

被积函数在积分区间的非常宽广的部分形状平坦,而在 x=0 处有相当陡峭的峰值, 使得 quad 在这一情况下较好.

6. 微分方程的数值解

Matlab 提供了许多数值求解一阶常微分方程初值问题的程序. 标准的程序为 ode45, 其中应用带自适应步长选取的 4 阶和 5 阶龙格-库塔法 (参见第 1260 页 19.4.1.2). 为达到高精度, 使用预估-校正型线性多步法的程序 ode113 更有效 (参见第 1262 页 19.4.1.4). 此外, 还有些程序对刚性微分方程组特别有效 (参见第 1264 页 19.4.1.5,4.).

用龙格-库塔法 (参见第 1260 页 19.4.1.2) 求解区间 [0,1] 上的问题 y=14(x2+ y2),y(0)=0 ,输入:

[x,y]=ode45((x,y)((x.2+y.2)./4),[01],0);plot(x,y)

得到的解如图 19.20(a) 所示.

在区间 0t50 上求解特殊的洛伦茨方程组 (参见第 1153 页 17.2.4.3)

x1=10(x2x1),x2=28x1x2x1x3,x3=x1x283x3

其初值条件为 x(0)=(0,1,0)T . 使用如下命令:

>>[t,x]=ode45(@(t,x)([10(x(2)x(1));

28x(1)x(2)x(1)x(3);x(1)x(2)8x(3)/3]),[050],[0;1;0]);

>>plot(x(:,1),x(:,3))

最后的命令给出了在 x1,x3 平面的相图 (图 19.20(b)).

01937d01-b6f6-7881-8294-3a9c82211946_85_191_299_1254_517_0.jpg

19.8.4.2 Mathematica

1. 求解数学问题的工具

计算机代数系统 Mathematica 是能用来求解大量数值数学问题的非常有效的工具. Mathematica 的数学程序完全不同于符号计算. 根据某些预先给定的原则, 类似于图像表示的情况, Mathematica 确定所考虑函数的数值表, 并利用这些数值确定要求的解. 因为点数必须是有限的, 这可能是一个 “坏” 性态函数的问题. 尽管 Mathematica 在问题区域内试图选取更多的节点, 我们必须假定在所考虑区域上的某种连续性. 这可能在最终的结果中产生误差. 建议尽可能使用所考虑问题的许多信息, 且若有可能, 在符号形式下进行计算, 即使这仅对子问题有可能.

在表 19.5 中, 我们介绍了用于数值计算的算子.

NIntegrate

计算定积分

NSum

计算和 i=1nf(i)

NProduct

计算积

NSolve

数值计算求解代数方程

NDSolve

数值计算求解微分方程

在启动 Mathematica 的 "Prompt" 之后显示 In[l]:= ; 这表示系统准备接受输入. Mathematica 用 out [l] 表示相应的输出. 一般在行中 In[n]:= 表示输入, out[n]:= 表示 Mathemetica 返回的答案. 表达式中的箭头 表示 x 用值 a 代替.

2. 曲线拟合与插值

(1) 曲线拟合 Mathematica 可用最小二乘法选取函数拟合数据集 (参见第 609 页 6.2.5), 且平均逼近离散问题 (参见第 1280 页 19.6.2.2). 一般的指令为

(19.291)Fit[{y1,y2,}, funkt ,x]

这里数值 yi 组成数据表, funkt 为用于数据拟合的可选函数表, x 表示独立变量的相应区域. 若 funkt 选定,例如为 Table [xi,{i,0,n}] ,则是用 n 次多项式进行拟合.

  • 设给定如下数据表:
In[1]:=l={1.70045,1.2523,0.638803,0.423479,0.249091,0.160321,0.0883432,0.0570776,0.0302744,0.0212794}

输入

In[2]:=f1=Fit[l,{1,x,x2,x3,x4},x]

l 的元素对应 x 赋值 1,2,,10 . 其结果为如下四次逼近多项式

 Out [2]=2.489180.853487x+0.0998996x20.00371393x30.0000219224x4

用命令

In[3]:=Plot[ListPlot[l,{x,10}],f1,{x,1,10}, AxesOrigin {0,0}]

可得数据表示及图 19.21(a) 给出的近似曲线.

01937d01-b6f6-7881-8294-3a9c82211946_86_221_1372_1193_413_0.jpg

这完全满足给定的数据. e10.5x 的级数展开取了前四项.

(2) 插值 Mathematica 提供特殊的算法确定插值函数. 它们表示为类似于纯函数构成的所谓插值函数类. 表 19.6 给出了其使用指南. 取代单独的函数值 yi ,可在给定点给出一列函数值与指定的导数值.

In[3]:=Plot[Interpolation[l][x],{x,1,10}] 得图 19.21(b). 显然 Mathemat-ica 给出了精确对应于数据表的结果.

表 19.6 插值命令

Interpolation [{y1,y2,}]

i 为整数, xiyi 值,给出近似函数

Interpolation [{{x1,y1},{x2,y2},}]

对点列 (xi,yi) 给出近似函数

3. 多项式方程的数值解

如同在第 1348 页 20.3.2.1 中所示, Mathematica 能数值确定多项式的根. 命令是

NSolve[p(x)==0,x,n]

其中 n 为计算需达到的精度. 若忽略 n ,则计算达到机器精度. 若输入 m 次多项式, 则能得到全部 m 个根.

In[1]:=NSolve[x6+3x25==0]Out[1]={x>1.07432},{x>0.8672621.15292I},{x0.867262+1.15292I},{x0.8672621.15292I},{x0.867262+1.15292I},{x1.07432}

4. 数值积分

Mathematica 为数值积分提供了程序 NIntegrate. 不同于符号方法, 它用被积函数的数值表工作. 考虑以两个非正常积分为例 (参见第 673 页 8.2.3).

A:In[1]:= NIntegrate $\left\lbrack {\operatorname{Exp}\left\lbrack {-{x}^{ \land }2}\right\rbrack ,{ x, - \operatorname{Infinity},\operatorname{Infinity}} }\right\rbrack \operatorname{Out}\left\lbrack 1\right\rbrack =$1.77245.

B:In[2]:= NIntegrate [1/x2,{x,1,1}]

Power::infy: Infinite expression 10 encountered.

NIntegrate::inum: Integrand ComplexInfinity is not numerical at {x}={0} .

在例 B 中, Mathematica 认知在 x=0 处不连续并给出警告. Mathematica 使用问题区域内大量点的数值表, 并认知极点. 然而, 答案可能仍然是错的.

Mathematica 使用某些预定的选项进行数值积分, 而在某些特殊情况下是不充分的. 可以用参数 MinRecursion 和 MaxRecursion 确定 Mathematica 在问题区域工作的最小和最大递归步数. 默认选项为 0 和 6 . 若此值增加, 则即使 Mathematica 运行变慢, 但结果更好.

In[3]:= NIntegrate [Exp[x2],{x,1000,1000}] ,因为积分区域太大, Math-ematica 找不到 x=0 的峰值,答案是

NIntegrate::ploss:

数值积分因失去精度停止. 无法达到要求的精度或准确度的目标; 怀疑有如下情况: 高振荡的被积函数或积分的真值为 0 .

Out[3]=1.349461026

若要求为

In[4]:=NIntegrate[Exp[x2],{x,1000,1000},MinRecursion3, MaxRecursion10]

则结果是

Out[4]=1.77245

类似地, 可用命令

(19.292)NIntegrate[fun,{x,xa,x1,x2,,xe}]

得到接近于积分真实值的结果. 给出积分上下限间的奇点 xi ,可使 Mathematica 求值更准确.

5. 微分方程的数值解

Mathematica 介绍了用 InterpolatingFunction 数值求解常微分方程和方程组的结果, 可得到解在给定区间任意点的数值及解函数的简略图形表示. 最常用的命令见表 19.7.

表 19.7 微分方程数值解命令

NDSolve[dgl,y,{x,xa,xe}]

xaxe 之间的区域计算微分方程数值解

InterpolatingFunction[ liste ][x]

给出点 x 处的解

Plot [Evaluate[y[x]/. lois]],{x,xa,xe}]

解的图形表示

求解描述重物在有摩擦的介质中运动的微分方程. 二维运动方程为

x¨=γx˙2+y˙2x˙,y¨=gγx˙2+y˙2y˙.

设摩擦正比于速度. g=10,γ=0.1 ,初值为 x(0)=0,y(0)=10,x˙(0)=100,y˙(0)= 200,则下面的命令可用来求解运动方程:

In[1]:=dg=NDSolve[{x[t]==0.1Sqrt[x[t]2+y[t]2]x[t],y[t]==100.1Sqrt[x[t]2+y[t]2]y[t],x[0]==y[0]==0,x[0]==100,y[0]==200},{x,y},{t,15}]

Mathematica 通过插值函数给出答案:

Out [1]={{xInterpolatingFunction[{0.,15.},<>],yInterpolatingFunction[{0.,15.},<>]}}

则解

In[2]:= ParametricPlot [{x[t],y[t]}/.dg,{t,0,2},PlotRangeAll]

表示为参数曲线 (图 19.22(a)).

01937d01-b6f6-7881-8294-3a9c82211946_89_226_489_1185_484_0.jpg

NDSolve 接受影响结果精度的多种选择.

计算的精度可由命令 AccuracyGoal 给出. 类似运行命令 PrecisionGoal. 计算过程中 Mathematica 根据所谓的 WorkingPrecision 运行, 在要求更高精度的计算中应增加五个单位.

Mathematica 在所考虑区域内的工作步数规定为 500 . Mathematica 一般在问题区域的邻域增加节点数, 在奇点邻域可能耗尽步数极限. 在这种情况下, 可用 MaxSteps 增加步数, 也可对 MaxSteps 用命令 Infinity.

  • 傅科摆 (Foucault) 方程为
x¨(t)+ω2x(t)=2Ωy˙(t),y¨(t)+ω2y(t)=2Ωx˙(t),

其中 ω=1,Ω=0.025 ,初值条件为 x(0)=0,y(0)=10,x˙(0)=y˙(0)=0 ,其解为

In[3]:=dg3=NDSolve[{x[t]==x[t]+0.05y[t],y[t]==y[t]0.05x[t],x[0]==0,y[0]==10,x[0]==y[0]==0},{x,y},{t,0,40}]Out[3]={{xInterpolatingFunction[{0.,40.},<>],

y InterpolatingFunction [{0.,40.},<>]}}

加上

In[4]:=ParametricPlot[{x[t],y[t]}/dg3,{t,0,40},AspectRatio1]

得图 19.22(b).

19.8.4.3 Maple

计算机代数系统 Maple 能用内置逼近法求解许多数值数学问题. 计算要求的节点数,可由规定整体变量 Digits 的任意值 n 确定. 但应记住选取比规定值大的 n 会导致计算速度降低.

1. 表达式和函数的数值计算

在启动 Maple 后, 显示符号 “Prompt”, 这表示准备输入. 输入和输出通常连在一行中表示,由箭头算子 “ ” 分开.

(1) 算子 evalf 能作为实数求值的包含内置和用户定义函数的表达式的数值, 可用命令

(19.293)evalf(expr,n)

计算. expr 为其值待定的表达式,参数 n 可选,估计达到 n 位精度. 默认的精度由全局变量 Digits 确定.

求函数 y=f(x)=x+lnx 的数值表. 首先由箭头算子定义函数:

>f:=zsqrt(z)+ln(z);f:=zx+lnx

则用命令 evalf(f(x)) 可得到要求的函数值; 其中 x 应以数值代替.

在 1 和 4 之间步长为 0.2 的函数值表可用命令

>forxfrom 1 by 0.2 to 4 do print(f[x]=evalf(f(x),12))od

得到. 这里要求用 12 位字节计算.

Maple 以形如 f[3.2]=2095200519181 的元素的一栏表格形式给出结果.

(2) 算子 evalhf(expr) 除了算子 evalf 外还有算子 evalhf . 其用法类似于 evalf. 其变量也是实值表达式. 使用计算机上可行的硬件浮点双精度计算, 求符号表达式的数值. 回到 Maple 浮点值. 在大多数情况下使用 evalhf 加速计算, 但同时使用 evalf 和 Digits 会损失定义的精度. 例如, 在 1303 页 19.8.2 的问题中, 可能产生相当大的误差.

2. 方程的数值解

大多数情况下使用 Maple 可以数值求解方程或方程组. 其命令是 fsolve. 其句法为

(19.294)fsolve(eqn, var, option)

该命令确定实数解. 若 eqn 是多项式形式, 则结果都是实根. 若 eqn 不是多项式形式, 则很可能 fsolve 仅返回一个解. 可用的选项在表 19.8 中给出.

complex

确定一个复根 (或多项式的所有根)

maxsols =n

确定至少 n 个根 (仅对多项式方程)

fulldigits

保证不减少计算中用到的位数

intervall

在给定区间内求根

A: 确定多项式方程 x6+3x35=0 的所有解. 由

>eq:=x6+3x25=0

>fsolve(eq,x);1.074323739,1.074323739

Maple 仅得到两个实根. 选择 complex, 也得到复根:

> fsolve(eq, x, complex);

1.074323739,0.86726202441.152922012I,0.8672620244+1.152922012I ,

0.86726202441.152922012I,0.8672620244+1.152922012I,1.074323739

B: 确定超越方程 ex34x2=0 的两个解. 定义方程

>eq:=exp(x3)4x2=0

正根的结果为

>fsolve(eq,x);0.4740623572

>fsolve(eq,x,x=2..0);0.5412548544

Maple 也确定第二个 (负) 根.

3. 数值积分

通常只可能用数值方法计算定积分的值. 当被积函数太复杂, 或原函数不能表示成基本函数时, 正是这种情况. 在 Maple 中确定定积分的命令为 evalf:

(19.295)evalf(int(f(x),x=a..b),n)

Maple 通过使用逼近公式计算定积分.

计算定积分 22ex3dx . 因为原函数未知,对于积分命令,得到如下答案:

>int(exp(x3),x=2..2);22ex3dx

>evalf(int(exp(x3),x=2..2),15)

则答案为: 277.745841695583.

Maple 使用内置逼近法计算有 15 位数字的数值积分.

在某些情况下, 尤其若积分区间太大, 该方法失效. 此时可试用图书馆的另一个逼近程序

readlib(’evalf/int’):

该程序使用自适应牛顿法.

输入

>evalf(int(exp(x2),x=1000..1000))

得到误差信息. 由

>readlib(evalf/int):> {}^{\prime }\text{evalf/int}{}^{\prime }\left( {\exp \left( {-{x}^{ \land }2}\right) , x = - {1000}.{.1000},{10},\text{_NCrule}}\right) \text{;} 1.772453851

得到正确的结果. 第三个参量规定精度, 最后一个规定逼近法的内部记号.

4. 微分方程的数值解

常微分方程可用 Maple 运算 dsolve 求解. 然而在大多数情况下, 不可能确定封闭形式的解. 在这些情况下必须给定相应的初值条件, 可以数值求解.

为了做到这一点, 使用如下形式的命令 dsolve:

(19.296)dsolve(deqn, var, numeric),

其中选项 numeric 作为第三参量. 这里参量 deqn 包含实际的微分方程和初值条件. 运算结果是一个程序,若记为 f ,则使用命令 f(t) ,得到独立变量在 t 处的解函数值.

Maple 应用龙格-库塔法得到该结果 (参见第 1260 页 19.4.1.2). 相对误差和绝对误差的默认精度为 10Digits+3 . 用户可通过整体符号_RELERR 和_ABSERR 修改这些默认容许误差. 若在计算中有某些问题, 则 Maple 给出不同的错误信息.

在解 19.4.1.2 龙格-库塔法一节中给出的问题时, Maple 给出:

>r:=dsolve({diff(y(x),x)=(1/4)(x2+y(x)2),y(0)=0},y(x), numeric );r:= proc dsolve/numeric/result2 (x,1592392,[1]) end 

其中

>r(0.5);{x(.5)=0.5000000000,y(x)(.5)=0.01041860472}

我们能确定解,例如在 x=0.5 处的值.

version 1.24.0