MATLAB의 Newton-Raphson 방법

Ammar Ali 2024년2월15일
MATLAB의 Newton-Raphson 방법

이 자습서에서는 MATLAB에서 Newton-Raphson 방법을 사용하여 함수의 근을 찾는 방법에 대해 설명합니다.

MATLAB의 Newton-Raphson 방법

Newton-Raphson 방법을 사용하여 함수의 근을 찾습니다. 이 방법은 수식을 사용하여 접선이 있는 연속 함수를 근사화하여 주어진 함수의 근에 대한 근사값을 찾습니다.

Newton-Raphson 방법으로 근을 찾는 데 사용되는 공식은 다음과 같습니다.

뉴턴 방법

수식은 이전 값, 함수 및 파생물을 사용하여 주어진 함수의 다음 루트를 찾습니다. 함수의 도함수를 찾기 위해 MATLAB의 diff() 함수를 사용할 수 있습니다.

위 공식을 사용하여 루트를 얻으려면 루프를 사용해야 합니다. 예를 들어 4개의 근을 찾아야 하는 경우 루프를 4번 반복합니다.

주어진 함수를 변수에 저장하고 diff() 함수를 사용하여 파생된 함수를 가져와서 변수에 저장합니다. 또한 이전 루트 값에 쉽게 액세스하려면 모든 루트 값을 배열 안에 저장해야 합니다.

그런 다음 루트를 찾기 위해 루프를 사용해야 하며 루트 배열을 사용하여 값을 업데이트합니다. subs() 함수를 사용하여 루프의 값을 업데이트하고 루트 배열에 루트 값을 저장할 수 있습니다.

예를 들어, 함수를 정의하고 임의의 함수를 사용하고 MATLAB에서 위 공식을 사용하여 처음 5개의 근을 찾아봅시다. 아래 코드를 참조하십시오.

clc
clear
fun = @(x) sin(x);
roots = mynewton(fun, 2, 5)

function output = mynewton(fun,a,n)
syms x;
z = fun(x);
derZ = diff(z);
out = zeros(1,n+1);
out(1) = a;

for idx = 1 : n
    numeratorZ = subs(z,x,out(idx));
    denominatorZ = subs(derZ,x,out(idx));
    out(idx+1) = out(idx) - double(numeratorZ)/double(denominatorZ);
end
output = out;
end

출력:

roots =

    2.0000    4.1850    2.4679    3.2662    3.1409    3.1416

위의 코드에서 오류가 표시되면 mynewton.m과 같이 함수 이름과 동일한 이름으로 별도의 .m 파일에 mynewton() 함수를 저장한 다음 다른 .m 파일을 만들고 호출할 코드의 맨 위 4줄을 작성하고 함수를 작성하거나 MATLAB의 명령 창에서 호출합니다. 테스트 파일과 mynewton.m은 같은 디렉토리에 있어야 합니다.

위의 코드에서 우리는 루트를 찾고자 하는 주어진 함수, 루트에 대한 초기 추측 및 찾고자 하는 루트 수를 전달해야 하는 mynewton() 함수를 정의했습니다.

공식을 사용하여 값을 평가한 후 값을 입력할 수 있도록 zeros() 함수를 사용하여 루트 배열을 0으로 초기화했습니다.

Newton-Raphson 방법의 위 공식에서 분자와 분모의 값을 업데이트하기 위해 subs() 함수를 사용했습니다. subs() 함수의 첫 번째 인수는 루트를 찾고자 하는 주어진 함수입니다.

두 번째 인수는 변경하려는 이전 값이고 세 번째 인수는 주어진 함수 내부의 이전 값 대신 넣고 싶은 새 값입니다.

subs() 함수 이후 출력은 cos(number)와 같은 함수 형식이므로 double() 함수를 사용하여 값을 숫자 값으로 변환한 다음 Newton-Raphson 공식을 적용했습니다. 이러한 값을 사용하여 루트 값을 찾습니다.

출력은 근과 초기 추측이 출력 배열 내에 저장되었음을 보여줍니다. 위의 코드는 Newton-Raphson 방법의 기본 표현이지만 허용 오차 또는 알고리즘이 수렴하는지 확인하는 방법과 같은 다른 항목을 추가할 수 있습니다.

작가: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook