전통문화대전망 - 전통 미덕 - 뉴턴의 반복법이란 무엇인가요?
뉴턴의 반복법이란 무엇인가요?
세대 배경
뉴턴-랩슨 방법(Newton-Raphson method)이라고도 알려진 뉴턴 방법은 17세기에 뉴턴이 제안한 실수 알고리즘으로 영역과 방정식을 대략적으로 푸는 방법입니다. 복소수의 영역. 대부분의 방정식에는 근을 찾는 공식이 없으므로 정확한 근을 찾는 것이 매우 어렵거나 심지어 불가능하기 때문에 방정식의 대략적인 근을 찾는 것이 특히 중요합니다. 이 방법은 방정식 f(x) = 0의 근을 찾기 위해 함수 f(x)의 Taylor 계열의 처음 몇 항을 사용합니다. 뉴턴의 반복법은 방정식의 근을 구하는 중요한 방법 중 하나이며, 가장 큰 장점은 방정식 f(x) = 0 근처에서 제곱수렴을 가지며, 이 방법은 배수를 구하는 데에도 사용할 수 있습니다. 방정식의 근과 복소수 근은 선형 수렴이지만 일부 방법을 통해 초선형 수렴이 될 수 있습니다. 또한 이 방법은 컴퓨터 프로그래밍에서도 널리 사용됩니다.
이 단락에서 뉴턴의 반복 공식을 편집하세요
r이 f(x) = 0의 근이라고 가정하고, r의 초기 근사값으로 x0을 선택하고, 점( x0, f(x0)) 곡선의 접선 L y = f(x), L의 방정식은 y = f(x0)+f'(x0)(x-x0), 교차점의 가로좌표를 찾습니다. L과 x축 x1 = x0-f(x0)/f'(x0)의 x1을 r의 1차 근사라고 합니다. 점 (x1, f(x1))을 통해 곡선 y = f(x)에 접선을 만들고 접선 교차점의 가로좌표 x2 = x1-f(x1)/f'(x1)을 찾습니다. x축을 사용하고 r의 x2 이차 근사를 호출합니다. 위 과정을 반복하여 r의 대략적인 값의 시퀀스를 얻습니다. 여기서 x(n+1)=x(n)-f(x(n))/f'(x(n))라고 합니다. r의 n+1 근사, 위 공식을 뉴턴의 반복 공식이라고 합니다. 비선형 방정식 f(x)=0을 푸는 뉴턴의 방법은 비선형 방정식을 선형화하는 대략적인 방법입니다. f(x)를 x0 지점 근처의 테일러 급수 f(x)로 확장합니다. = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/ 2 !+... 선형 부분을 비선형 방정식 f(x) = 0, 즉 테일러 전개의 처음 두 항의 근사 방정식으로 취한 다음 f(x0)+f'(x0)(x−x0 )=0 f'(x0)≠0을 가정하면 해는 x1=x0-f(x0)/f'(x0)입니다. 이러한 방식으로 뉴턴 방법의 반복 시퀀스가 얻어집니다. x(n+1)=x (n)-f(x(n))/f'(x(n)). 뉴턴의 반복법 모식도
군인들은 공격할 때 교대로 엄호 공격을 사용하는 경우가 많다. 숫자 축의 점이 A와 B의 위치를 나타내고 앞쪽의 숫자가 그보다 크다고 규정한 경우이다. 뒤에 숫자가 있으면 A>B, B>A가 번갈아 나타납니다. 그런데 지금 군대에 겁쟁이가 있는데, 그가 돌격할 때마다 그를 따르도록 요청받는다. 다른 사람들이 새로운 위치를 차지하기 위해 앞으로 나아갑니다. 즉, A가 항상 B보다 앞에 있고, A가 전진하고, B가 뒤를 따르고, A가 B에게 자신의 위치를 양보하고(즉, B=A 연산을 수행), A가 전진하여 새로운 위치를 차지하고, B가 뒤를 따른다. ... 모든 직위가 채워질 때까지 진출이 종료됩니다. 이와 같이 두 개의 숫자가 차례로 특정 위치에 점차적으로 접근하는 방법을 반복 방법이라고 합니다. 반복법이라고도 불리는 반복법은 변수의 이전 값을 계속해서 사용하여 새로운 값을 재귀적으로 도출하는 과정으로, 다음과 같은 문제를 해결하는 직접법(또는 일회성 풀이법)이 있습니다. 문제는 한 번에. 반복 알고리즘은 컴퓨터 문제를 해결하는 기본적인 방법입니다. 이는 컴퓨터의 빠른 컴퓨팅 속도를 활용하고 반복 작업에 적합하여 컴퓨터가 일련의 명령(또는 특정 단계)을 반복적으로 실행할 수 있도록 합니다. 이 명령 세트(또는 이러한 단계)가 실행될 때마다 원래 값은 변수가 변경되었습니다. 새 값으로 푸시합니다. 반복 알고리즘을 사용하여 문제를 해결하려면 다음 세 가지 측면을 수행해야 합니다. 1. 반복 변수를 결정합니다. 반복 알고리즘으로 풀 수 있는 문제에는 기존 값에서 계속해서 새로운 값을 직간접적으로 도출하는 변수가 하나 이상 존재합니다. 이 변수가 바로 반복 변수입니다. 2. 반복 관계를 설정합니다. 소위 반복 관계는 이전 값에서 변수의 다음 값을 파생하는 방법에 대한 공식(또는 관계)을 나타냅니다. 반복 관계의 설정은 일반적으로 재귀 또는 역추론을 사용하여 수행할 수 있는 반복 문제를 해결하는 열쇠입니다. 3. 반복 프로세스를 제어합니다. 반복 프로세스는 언제 끝나나요? 이는 반복 프로그램을 작성할 때 고려해야 할 문제입니다. 반복적인 과정은 끝없이 반복될 수 없습니다. 반복 프로세스의 제어는 일반적으로 두 가지 상황으로 나눌 수 있습니다. 하나는 필요한 반복 횟수가 특정 값이고 계산할 수 있는 경우이고, 다른 하나는 필요한 반복 횟수를 결정할 수 없다는 것입니다. 전자의 경우 반복 프로세스를 제어하기 위해 고정된 수의 루프를 구성할 수 있으며, 후자의 경우 반복 프로세스를 종료하기 위한 조건을 추가로 분석해야 합니다. 가장 고전적인 반복 알고리즘은 두 정수 a와 b의 최대 공약수를 계산하는 데 사용되는 유클리드 알고리즘입니다. 계산 원리는 다음 정리에 기초합니다. 정리: gcd(a, b) = gcd(b, a mod b) 증명: a는 a = kb + r로 표현될 수 있으며, 그러면 r = a mod b.
d가 a와 b의 공약수라고 가정하면 a%d==0, b%d==0, r = a - kb이므로 r%d==0이므로 d는 (b, a mod The b)의 공약수에 대해서도 마찬가지입니다. d가 (b, a mod b)의 공약수이면 b%d==0, r%d==0이지만 a = kb +r이므로 d가 됩니다. (a, b의 공약수)이기도 합니다. 그러므로 (a, b)와 (b, a mod b)의 공약수는 동일하며, 이들의 최대공약수도 동일해야 함을 증명합니다. 유클리드 알고리즘은 이 원리에 기초합니다. 유클리드 알고리즘은 유클리드 나눗셈이라고도 합니다. 이는 나머지가 0이 될 때까지 반복적으로 실행되는 단계입니다. 이는 실제로 루프 구조입니다. 알고리즘은 C 언어로 다음과 같이 설명됩니다. int Gcd_2(int a, int b)//유클리드 알고리즘은 a와 b의 최대 공약수를 찾습니다. {if (a<=0 || b<=0) //오류 방지 return 0; int temp; while (b > 0) //b는 항상 더 작은 숫자를 나타내며, 그렇지 않은 경우에는 a와 b의 값을 교환합니다. {temp = a % b //That 겁쟁이, 항상 따라가는 b b = temp%b; //새 위치를 차지하기 위해 앞으로 돌진} Return a;} 위의 프로그램에서 a와 b는 반복 변수이자 반복 관계임을 알 수 있습니다. temp = a % b; 반복 관계에 따라 이전 값에서 새 값을 추론한 다음 반복 프로세스가 끝날 때까지(나머지는 0) a = b; b = temp; 여기서 a는 항상 b의 자리를 이어받는 겁쟁이이고, b는 앞으로 나아가기 위해 노력하는 선구자입니다. 또 다른 대표적인 예는 피보나치 수열이다. 피보나치 수는 0, 1, 1, 2, 3, 5, 8, 13, 21, ..., 즉 fib(1)=0입니다. fib(2)=1; (n -1)+fib(n-2) (n>2인 경우). n>2일 때, fib(n)은 항상 fib(n-1)과 fib(n-2)로부터 구할 수 있고, 이전 값에서 새로운 값을 추론하는 것이 전형적인 반복 관계이므로 생각해 볼 수 있습니다. 반복 알고리즘 .
int Fib(int n) //피보나치 수열 {if (n < 1)//오류 방지 return 0; if (n == 1 || n == 2)//특수 값, 반복할 필요 없음 return 1;int f1 = 1, f2 = 1, fn;//반복 변수 int i; for(i=3; i<=n; ++i)//i 값을 사용하여 반복 횟수를 제한합니다.{fn = f1 + f2; //반복 관계 f1 = f2; //f1과 f2가 앞으로 반복됩니다. 여기서 f2는 f2 = fn } return fn;
double func(double x) //함수 { return x*x*x*x-3*x*x*x+1.5*x*x-4.0;} double func1(double x) // 파생 함수 { return 4*x*x*x-9*x*x+3*x; } int Newton(double *x,double 정밀도, int maxcyc) //반복 횟수 {double x1,x0 =* x; for(k=0;k 이 C++ 코드 편집 //이 함수는 3개 변수의 선형 방정식을 찾는 데 사용됩니다. ax^3+bx^2+ cx+d=0의 해법 //예: x ^3-27=0, 1 0 0 -27을 입력하여 해결책을 얻을 수 있습니다. #include 이 MATLAB 코드 편집 1. 함수 정의 >function y=f(x) y=f(x); %함수 f(x)의 표현 function y=z(x) y= z(x); %함수 z(x)의 표현 2. 기본 프로그램 x=X; %반복 초기값 i=0; % 반복 횟수 y=x-y(x)/z(x) ; % 뉴턴 반복 형식 if abs(y-x)>ε; else break end i=i+1; '\n%s%.4f\t%s%d' =', x, 'i=', i) %출력 결과 이 Python 코드 편집 Python 코드는 f(x) = (x의 근을 푸는 방법을 보여줍니다. -3)**3, f(x) = 0(예시). [1]def f(x): return (x-3)**3 '''define f(x) = (x-3)**3''' def fd(x) : return 3*((x-3)**2) '''define f'(x) = 3*((x-3)**2) def newtonMethod(n,assum): time = n x = assum 다음 = 0 A = f(x) B = fd(x) print('A = ' + str(A) + ',B = ' + str(B) + ',time = ' + str(time)) if f (x) == 0.0: 반환 시간,x else: Next = x - A/B print('다음 x = '+ str(Next)) if A == f(Next): print(' f(x )를 만나다 = 0, x = ' + str(Next)) '''반복 탈출 조건을 설정하고 f(x) = 0을 만족하는 x 값을 출력합니다.''' else: return newtonMethod(n+1,Next) newtonMethod(0 ,4.0) '''0부터 시작하는 계산 설정, x0 = 4.0'''