루트 문제 방정식 차 시리즈 6. 뉴턴 반복적 인 방법을 찾기

루트 뉴턴 방정식 반복법

문제 설명
뉴턴의 반복 방법에 의한 기입 기능 루트 방정식 방정식 AX ^ 3 + BX ^ 2 + CX + D = 0
의 계수 입력의 주 기능 d 개의 A, B, C, 실제 뿌리 근방 x를 찾기 루트가 결정된 후, 주 기능 출력
뉴턴 반복 방법의 방정식은 :
X = X0 - F (X0) / F '(X0)를 반복적으로 제공된다 | X-X0 | <= 10 ^ 5 단부
분석
뉴턴 반복적 방법은 다음 X0 이상의 방정식이 기저 찾기 루트, X0을 촬영 가까이 근접 식 루트 근사 루트 발견하는 단계를 반복
R은 F이다하자 (X) = 루트 0, R로서 선택 X0 초기 근사 점 (X0, F (X0))을 통해 곡선 Y = F (x)의 접선 (L)을 만들

L 방정식을 Y = F (X0) + F '(X0) (X-X0)

L의 X 축은 가로축 교차 X1 = X0 수득 - F (X0) / F '(X0)
R의 첫번째 근사치 인 X1라는 점 이상 (X1을 F (X1)의) 곡선 Y = F를 만들기 위해 (X) 접선과 접선을 찾아 X 축 X2 = X1-F (X1) 횡축 / F '(X2) 차 근사라는 R, 상기 처리 공정 상기 R의 근사치를 제공하도록 반복 뉴튼 반복 XN은 방법 해결 처리
알고리즘 설계
프로그램 흐름 분석 :
| --1 1 실제 수의 근방에서 찾고 = 초기 값 X0 1.5 즉 1.5 X0 촬영된다.
| --2 식에서의 초기 값 (X0)에 의해 그 때 산출 된 바. 값 (X0) 방정식에 의해 설명 FD 유도체 후 변수 F 값의 식에 의해 설명 된 F '(X0) 프로그램
|. --3 계산 델타 = F의 H /가 fd
|. --4 계산 다음 X, X0 = X - H
. | --5 새로 다음 반복을 준비 생성 X 원래 X0을 교체
. | --6 경우 | X-X0이 |> = 르 -5 그렇지 않으면 계속해서 3 단계로 이동 7 단계로 이동.
|. 7 제가 X를 요청하면, 식 도끼 ^ 3 + BX ^ 2 +이다 CX + D = 0, 루트, 출력

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    float solution(float a, float b, float c, float d);     //函数功能是用牛顿迭代法求方程的根
    float a,b,c,d,x;        //x用来记录求得的方程根, abcd代表所求方程的系数
    printf("请求输入方程的系数:");
    scanf("%f %f %f %f", &a, &b, &c, &d);
    x = solution(a, b, c, d);
    printf("所求方程的根为x = %f", x);
    return 0;
}

float solution(float a, float b, float c, float d)
{
    float x0, x = 1.5, f, fd, h;   //f用来描述方程的值, fd用来描述方程求导之后的值
    do
    {
        x0 = x;     //用来求得的x的值代替x0原来的值
        f = a*x0*x0*x0 + b*x0*x0 + c*x0 + d;
        fd = 3*a*x0*x0 + b*x0 + c;
        h = f/fd;
        x = x0 - h;
    } while (fabs(x-x0) >= 1e-5);
    return x;
}

/* !< input */
2 -4 3 -6
/* !< output */

추천

출처www.cnblogs.com/xuzhaoping/p/11484499.html