编写用牛顿迭代法求方程根的函数。方程为 a x 3 + b x 2 + c x + d = 0 ax^3+bx^2+cx+d=0 ax3+bx2+cx+d=0,系数a、b、c、d由主函数输入,求x在1附近的一个实根。求出根后,由主函数输出。
牛顿迭代法的公式: x = x 0 − f ( x ) f ′ ( x 0 ) x=x_0-\frac{f(x)}{f'(x_0)} x=x0−f′(x0)f(x),设迭代到 ∣ x − x 0 ∣ ≤ 1 ∗ 1 0 − 5 |x-x_0 |≤1*10^{-5} ∣x−x0∣≤1∗10−5时结束。
2.问题分析
牛顿迭代法是取 x 0 x_0 x0之后,在这个基础上找到比 x 0 x_0 x0更接近的方程根,一步一步迭代,从而找到更接近方程根的近似根。
设 r r r是 f ( x ) = 0 f(x)=0 f(x)=0的根,选取 x 0 x0 x0作为r的初始近似值,过点 ( x 0 , f ( x 0 ) ) (x_0,f(x_0)) (x0,f(x0))做曲线 y = f ( x ) y=f(x) y=f(x)的切线L,L的方程为 y = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) y=f(x_0)+f'(x_0)(x-x_0) y=f(x0)+f′(x0)(x−x0),求出L与x轴交点的横坐标 x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1=x_0-\frac{f(x_0)}{f'(x0)} x1=x0−f′(x0)f(x0),称 x 1 x_1 x1为 r r r的一次近似值;
过点 ( x 1 , f ( x 2 ) ) (x1,f(x_2)) (x1,f(x2))做曲线 y = f ( x ) y=f(x) y=f(x)的切线,并求出该切线与x轴交点的横坐标 x 2 = x 1 − f ( x 1 ) f ′ ( x 1 ) x_2=x_1-\frac{f(x1)}{f'(x1)} x2=x1−f′(x1)f(x1),称 x 2 x_2 x2为 r r r的二次近似值;重复以上过程,得到 r r r的近似值 x n x_n xn。上述过程即为牛顿迭代法的求解过程。
3.算法设计
程序流程分析:
1)在1附近找任一实数作为 x 0 x_0 x0的初值,我们取1.5,即 x 0 x_0 x0=1.5。
2)用初值 x 0 x_0 x0代入方程中计算此时的 f ( x 0 ) f(x0) f(x0)及 f ′ ( x 0 ) f'(x0) f′(x0);程序中用变量f描述方程的值,用fd描述方程求导之后的值。
3)计算增量h=f/fd。
4)计算下一个 x x x, x x x= x 0 x_0 x0-h。
5)用新产生的 x x x替换原来的 x 0 x_0 x0,为下一次迭代做好准备。
6)若 ∣ x − x 0 ∣ > = 1 e − 5 |x-x0|>=1e-5 ∣x−x0∣>=1e−5,则转到步骤(3)继续执行,否则转到步骤(7)。
7)所求 x x x就是方程 a x 3 + b x 2 + c x + d = 0 ax^3+bx^2+cx+d=0 ax3+bx2+cx+d=0的根,将其输出。
双链表 1.题目2.基本思想3.代码实现 1.题目
实现一个双链表,链表初始为空,支持5种操作:
在最左侧插入一个数;在最右侧插入一个数;将第 k k k 个插入的数删除;在第 k k k个插入的数左侧插入一个数&#…