牛顿迭代法和割线迭代法
2008-10-31 20:08阅读:
---牛顿迭代法和割线迭代法
内容:
用牛顿迭代法和割线迭代法求下述方程的 解x*
cos(x)-x=0
要求:
牛顿法初值 x0=0.5
割线法初值 x0=0.5,x1=0.6
停止准则
|xk-xk-1|<10-7
输出
x0,x1,…,xk=
X*,和迭代次数k
试验代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace test_a
{
public partial class Form1 : Form
{
public
Form1()
{
br>
InitializeComponent();
}
private
void button1_Click(object sender, EventArgs e)
{
Double a;
try
{
a =
Convert.ToDouble(textBox1.Text);
}
catch
{
label3.Text
= '格式不正确!';
}
secant_interations(a);
NewTon_interations(a);
simple_interations(a);
label3.Text
= '';
}
void
secant_interations(Double precise)//割线
{
Double x_old0, x_old1, x_new;
Double f_old0, f_old1;
int k;
x_old0 = 0.5; x_old1 = 0.6;
f_old0 = Math.Cos(x_old0) - x_old0;
textBox_secant.Text = '初始值:';
textBox_secant.Text += 'X0=' + x_old0 +
';X1=' + x_old1 +'';
for (k = 2; ; k++)
{
f_old1 =
Math.Cos(x_old1) - x_old1;
x_new =
x_old1 - f_old1 * (x_old1 - x_old0) / (f_old1 - f_old0);
textBox_secant.Text += 'X' + k + '=' + x_new + '';
if
(Math.Abs(x_new - x_old1) <= precise) break;
f_old0 =
f_old1;
x_old0 =
x_old1;
x_old1 =
x_new;
}
}
void
NewTon_interations(Double precise)//牛顿
{
Double x_old, x_new;
Double f_old, f_old_derivation;
int k;
x_old = 0.5;
textBox_NewTon.Text = '初始值:';
textBox_NewTon.Text += 'X0=' + x_old +
'';
for (k = 1; ; k++)
{
f_old =
Math.Cos(x_old) - x_old;
f_old_derivation = -Math.Sin(x_old)-1;
x_new =
x_old - f_old / f_old_derivation;
textBox_NewTon.Text += 'X' + k + '=' + x_new + '';
if
(Math.Abs(x_new - x_old) <= precise) break;
x_old =
x_new;
}
}
void
simple_interations(Double precise)//简单
{
Double x_old, x_new;
Double f_old;
int k;
x_old = 0.5;
textBox_simple.Text = '初始值:';
textBox_simple.Text += 'X0=' + x_old +
'';
for (k = 1; ; k++)
{
f_old =
Math.Cos(x_old);
x_new =
f_old;
textBox_simple.Text += 'X' + k + '=' + x_new + '';
if
(Math.Abs(x_new - x_old) <= precise) break;
x_old =
x_new;
}
}
}
}
试验结果:
