📄 p22:牛顿法算例.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>应用二分法求解非线性方程的计算过程显示页面</title>
</head>
<body bgcolor="#3366CC">
<font color="#ffcc00" face="楷体_GB2312" size="6">
<div align="center">
<h1>应用牛顿法求解非线性方程的计算过程详解</h1>
</div>
<div align="left">
<br>
问题:<br>
记 F(x)=x*x*x-x-1, 求方程 F(x)=0<br>
在区间 [a,b]=[1,2] 内的近似解,<br>
给出F(x)的导数 G(x)=3.0*x*x-1,<br>
要求要求用牛顿法求解,<br>
且解的绝对误差不超过 1e-8。<br>
<br>
为了帮助大家阅读计算过程,我们定义数组<br>
X[N],Y[N],Z[N],R[N] 保存中间结果。其中:<br>
<br>
X[K]:第K次迭代得到的近似解;<br>
Y[K]=F(X[K]):第K次迭代的函数值;<br>
Z[K]=G(X[K]): 第K次迭代的导数值;<br>
R[K]=|X[K+1]-X[K]|: 第K次代代的逼近值;<br>
<br>
主要计算格式为:X[K+1]=X[K]-Y[K]/R[K]<br>
<br>
计算过程列表如下:</font>
</div>
<table bgColor="#3399ff" border="4" style="COLOR: #ffff00; FONT-SIZE: 24pt" width="120%">
<tbody>
<tr>
<td align="middle" width="12%">K</td>
<td align="middle" width="22%">X[K]</td>
<td align="middle" width="22%">Y[K]</td>
<td align="middle" width="22%">Z[K]</td>
<td align="middle" width="22%">R[K]</td>
</tr>
<tr>
<td align="middle" width="12%">0</td>
<td align="right" width="22%">+2</td>
<td align="right" width="22%">+0.5000E1</td>
<td align="right" width="22%">+0.1100E2</td>
<td align="right" width="22%">+0.1000E1</td>
</tr>
<tr>
<td align="middle" width="12%">1</td>
<td align="right" width="22%">+1.545455</td>
<td align="right" width="22%">+0.1146E1</td>
<td align="right" width="22%">+0.6165E1</td>
<td align="right" width="22%">-0.4545E0</td>
</tr>
<tr>
<td align="middle" width="12%">2</td>
<td align="right" width="22%">+1.359615</td>
<td align="right" width="22%">+0.1537E0</td>
<td align="right" width="22%">+0.4546E1</td>
<td align="right" width="22%">-0.1858E0</td>
</tr>
<tr>
<td align="middle" width="12%">3</td>
<td align="right" width="22%">+1.325801</td>
<td align="right" width="22%">+0.4625E-2</td>
<td align="right" width="22%">+0.4273E1</td>
<td align="right" width="22%">-0.3381E-1</td>
</tr>
<tr>
<td align="middle" width="12%">4</td>
<td align="right" width="22%">+1.324719</td>
<td align="right" width="22%">+0.4658E-5</td>
<td align="right" width="22%">+0.4265E1</td>
<td align="right" width="22%">-0.1082E-2</td>
</tr>
<tr>
<td align="middle" width="12%">5</td>
<td align="right" width="22%">+1.324718</td>
<td align="right" width="22%">+0.4740E-11</td>
<td align="right" width="22%">+0.4265E1</td>
<td align="right" width="22%">-0.1092E-5</td>
</tr>
<tr>
<td align="middle" width="12%">6</td>
<td align="right" width="22%">+1.324718</td>
<td align="right" width="22%">+0.2220E-15</td>
<td align="right" width="22%">+0.4265E1</td>
<td align="right" width="22%">-0.1112E-11</td>
</tr>
</tbody>
</table>
<div>
<strong><font color="#ffcc00" face="楷体_GB2312" size="6"><br>
附:实现算法的C语言程序段如下:
<pre>
#define F(x) x*x*x-x-1
#define G(x) 3.0*x*x-1
static float a = 1;
static float b = 2;
static float EPS = 1e-8;
static float X[51],Y[51],Z[51],R[51];
static int N=51;
P22_NTF(float a,float b)
{ int K;
if(F(a)>0)X[0]=a;
else X[0]=b;
Y[0]=F(X[0]);
Z[0]=G(X[0]);
R[0]=(b-a);
for(K=0;K<N;K++)
{ X[K+1]=X[K]-Y[K])/Z[K];
Y[K+1]=F(X[K+1]);
Z[K+1]=G(X[K+1]);
R[K+1]=fabs(X[K+1]-X[K]);
if(R[K+1]<EPS) break;
}
return ;
}</pre>
</font></strong>
</div>
</body>
</html>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -