728x90

1. 정의

 1) Midpoint Rule (중점 규칙):

주어진 구간을 여러 개의 작은 구간으로 나누고,

각 작은 구간의 중점에서 함수 값을 계산하여 이를 이용하여 적분 값을 근사화하는 수치적 적분 방법

 

  공식

Midpoint Rule (중점 규칙): 공식

2) Trapezoidal Rule (사다리꼴 규칙):

구간을 여러 개의 작은 사다리꼴로 나누고,

사다리꼴의 면적을 합하여 적분 값을 근사화하는 수치적 적분 방법

 

 공식

Trapezoidal Rule (사다리꼴 규칙): 공식

3) Simpson's Rule (심슨의 규칙):

주어진 구간을 여러 개의 작은 구간으로 나누고,

각 작은 구간에 대해 2차 다항식을 사용하여 적분 값을 근사화하는 수치적 적분 방법

 

 공식

Simpson's Rule (심슨의 규칙): 공식


2. 차이점

 1) 기본 형태:

  • Midpoint Rule: 각 작은 구간에서 중점의 함수 값으로 근사화.
  • Trapezoidal Rule: 각 작은 구간에서 사다리꼴의 면적으로 근사화.
  • Simpson's Rule: 각 작은 구간에서 2차 다항식으로 근사화.

2) 오차 정확도:

  • Midpoint Rule과 Trapezoidal Rule은 주로 선형 함수에 사용되며 근사치의 정확도가 떨어질 수 있음.
  • Simpson's Rule은 2차 다항식의 근사를 사용하므로 일반적으로 더 높은 정확도를 제공함.

3) 적용 가능성:

  • Midpoint Rule과 Trapezoidal Rule은 일반적인 수치적 적분에 자주 사용.
  • Simpson's Rule은 더 정확한 근사가 필요한 경우에 사용되며, 특히 함수가 2차 다항식에 가까운 경우에 효과적.

 

3. 그래프 

그림을 통해 보다 이해를 쉽게 할 수 있습니다.

 

그래프

 

위의 그래프의 matlab 코드는 아래와 같습니다.

 

clc
close all
clear 
% 함수 정의
fun = @(x) sin(x); % 여기에 적절한 함수를 입력하세요.

% 구간 및 분할 수 정의
a = 0; % 시작점
b = pi; % 끝점
n = 10; % 분할 수

% x 값 및 함수 값 계산
x_values = linspace(a, b, 1000);
y_values = fun(x_values);

% Midpoint Rule 그래프 그리기
figure;
subplot(3, 1, 1);
plot(x_values, y_values, 'k', 'LineWidth', 2);
hold on;

midpoint_x = zeros(1, n);
midpoint_y = zeros(1, n);

for i = 1:n
    x_mid = (a + (i - 0.5) * (b - a) / n);
    y_mid = fun(x_mid);
    
    midpoint_x(i) = x_mid;
    midpoint_y(i) = y_mid;
    
    rectangle('Position', [x_mid - (b - a) / (2 * n), 0, (b - a) / n, y_mid], 'EdgeColor', 'b', 'FaceColor', 'none'); 
	rectangle('Position', [x_mid - (b - a) / (2 * n), 0, (b - a) / n, y_mid], 'EdgeColor', 'b', 'FaceColor', 'none');
end

title('Midpoint Rule');
hold off;

% Trapezoidal Rule 그래프 그리기
subplot(3, 1, 2);
plot(x_values, y_values, 'k', 'LineWidth', 2);
hold on;

trapezoidal_x = zeros(1, n+1);
trapezoidal_y = zeros(1, n+1);

for i = 1:n+1
    x_trap = a + (i - 1) * (b - a) / n;
    y_trap = fun(x_trap);
    
    trapezoidal_x(i) = x_trap;
    trapezoidal_y(i) = y_trap;
    
    if i > 1
        plot([trapezoidal_x(i-1), trapezoidal_x(i)], [trapezoidal_y(i-1), trapezoidal_y(i)], 'b', 'LineWidth', 2);
        plot([x_trap, x_trap], [0, y_trap], 'b', 'LineWidth', 2);
    
    end
end

title('Trapezoidal Rule');
hold off;

% Simpson's Rule 그래프 그리기
subplot(3, 1, 3);
plot(x_values, y_values, 'k', 'LineWidth', 2);
hold on;

simpson_x = zeros(1, 2*n+1);
simpson_y = zeros(1, 2*n+1);

for i = 1:2:2*n+1
    x_simp = a + (i - 1) * (b - a) / (2 * n);
    y_simp = fun(x_simp);
    
    simpson_x(i) = x_simp;
    simpson_y(i) = y_simp;
    
    if i < 2*n+1
        x_simp_mid = a + i * (b - a) / (2 * n);
        y_simp_mid = fun(x_simp_mid);
        
        simpson_x(i+1) = x_simp_mid;
        simpson_y(i+1) = y_simp_mid;
        
        simpson_x(i+2) = x_simp_mid;
        simpson_y(i+2) = 0;
        
        plot([x_simp, x_simp_mid, x_simp_mid], [y_simp, y_simp_mid, 0], 'b', 'LineWidth', 2);
    end
end

title("Simpson's Rule");
hold off;
728x90
반응형
728x90

<<  주어진 함수의 근사값을 찾는 수치 해석적인 방법  >>

 

 

공식


1. 조건

1) 은 다음 반복에서의 근사 해

2) x_은 현재 반복에서의 근사 해,

3) 은 함수의 값

4)) 은 함수의 미분 값입니다.

 

 

※ 즉, 위 공식은 f(x) = 0 을 찾는 공식입니다.

 

2. 주의할 점

 

1) 미분 가능성 및 연속성:  함수가 미분 가능하고 연속적이어야 합니다.

                                           또한, 미분이 0이 되는 지점에서는 수렴이 느려지거나 수렴하지 않을 수 있습니다.

 

2) 초기 추정값의 선택: 초기 추정값에 따라 수렴 여부가 달라질 수 있습니다.

                                      부적절한 초기 추정값은 수렴을 방해하거나, 다른 해로 수렴하게 할 수 있습니다.

 

3) 계산 오류와 수렴 문제: 수학적으로 수렴이 보장되지 않는 경우가 있습니다.

                                          특히, 특정 조건에서는 발산할 수 있거나, 수렴이 매우 느릴 수 있습니다.

 

4) 함수의 복잡성: 함수가 복잡하거나 다수의 근을 가지고 있을 경우, 수렴하지 않을 수 있습니다. 

 

5) 수렴 주변의 근방에서만 유효: 초기 추정값 주변에서만 수렴이 보장됩니다.

                                                      멀리 떨어진 해에서는 다른 방법을 사용해야 할 수 있습니다.

 

6) 미분 계산의 안정성: 미분이 0이 되는 지점이나 불연속성이 있는 지점에서 문제가 발생할 수 있습니다.

 

3. 예제

 

예제

 

위 함수 일 때,

미분 공식은 : f'(x) = 2x  입니다.

이때, 초기 추정값을 x_0 = 3  으로 설정합니다.

 

1step

x_1 = 3 - ((3^2-4)) / (2*3) = 2.1667

x_2 = (2.1667 공식에 대입) = 2

x_3 = (2 공식에 대입 ) =2

 

따라서, x_2 , x_3 의 값이 2가 됨에 따라,  f(x) =0 이되는 x의 값이 2가 됨을 알 수 있습니다.

 

4. 그래프

 

그래프

 

다음과 같이 추정 값 '3' 으로 부터 근사값을 계속하여 f(x) = 0 을 알아가는 그래프를  확인 할 수 있습니다.

위 그래프에 대한 matlab 코드는 아래의 글을 통해 확인 가능합니다.

 

clc
close all
clear 
% 주어진 함수 정의
f = @(x) x.^2 - 4;

% 함수의 미분 정의
df = @(x) 2 * x;

% 초기 추정값 설정
x0 = 3;

% 반복 횟수 설정
numIterations = 10;

% x 범위 설정
xRange = linspace(-3, 4, 100);

% 함수 및 뉴턴-랩슨 반복 결과를 그래프로 나타냄
figure;

% 주어진 함수의 그래프
subplot(2, 1, 1);
plot(xRange, f(xRange), 'b-', 'LineWidth', 2);
hold on;
grid on;

% 초기 추정값을 빨간색 원으로 표시
plot(x0, f(x0), 'ro', 'MarkerSize', 10);

% 뉴턴-랩슨 반복 수행
for i = 1:numIterations
    x1 = x0 - f(x0) / df(x0);
    
    % 그래프 상에서 반복된 추정값을 선으로 연결
    plot([x0, x1], [f(x0), 0], 'r--');
    
    % 다음 반복을 위해 추정값 갱신
    x0 = x1;
end

% 최종 결과값을 녹색 별표로 표시
plot(x1, f(x1), 'g*', 'MarkerSize', 10);

% 그래프 스타일 및 레이블 설정
xlabel('x');
ylabel('f(x)');
title('Newton-Raphson Method Example');
% legend('f(x)', 'Initial Guess', 'Iteration Steps', 'Final Result');

% 주어진 함수의 그래프 및 뉴턴-랩슨 결과의 확대된 그래프
subplot(2, 1, 2);
plot(xRange, f(xRange), 'b-', 'LineWidth', 2);
hold on;
grid on;

% 초기 추정값을 빨간색 원으로 표시
plot(x0, f(x0), 'ro', 'MarkerSize', 10);

% 뉴턴-랩슨 반복 수행 (확대된 그래프)
for i = 1:numIterations
    x1 = x0 - f(x0) / df(x0);
    
    % 그래프 상에서 반복된 추정값을 선으로 연결
    plot([x0, x1], [f(x0), 0], 'r--');
    
    % 다음 반복을 위해 추정값 갱신
    x0 = x1;
end

% 최종 결과값을 녹색 별표로 표시 (확대된 그래프)
plot(x1, f(x1), 'g*', 'MarkerSize', 10);

% 그래프 스타일 및 레이블 설정
xlabel('x');
ylabel('f(x)');
title('Newton-Raphson Method Example (Zoomed In)');
% legend('f(x)', 'Initial Guess', 'Iteration Steps', 'Final Result');

% 그래프 보여주기
hold off;
728x90
반응형
728x90

<<  아래의 조건에 성립되면 아래 공식이 성립되는 정리 >>

 

공식

 


1.조건

 1) 에서 정의

 2) f(x) = g(x)=0 또는 f(x) = g(x)  = ±∞

 3) 가 0이 아닌 근방에서 정의 ( g(x) not equal 0)

 

2.설명

  • 형태 0/0:

   예를 들어 아래의 식이라고 가정하자.

예제1

여기서, f, , 그리고 입니다.

이 문제에 L'Hôpital의 규칙을 적용하면 ( f(x) 미분 / g(x) 미분 )

증명1

위와 같이 적용 할 수 있습니다.

 

※ 수식으로 보면 이해가 어려울 수 있어 그래프로 추가 설명 드립니다.

 

그래프

위와 같이 f(x) = sin(x) 이므로 미분하여 f'(x)를 만들면,

f'(x) = cos(x) 가 됩니다.

(이유는 sin(x)의 경우 순간변화율(기울기) sin(2/ π) 에서 0이 되는 그래프는 cos(x)이기 때문에 라고 생각하시면 쉽습니다.)

 

그래프를 보시면 극한 0에 수렴하는 y의 값이 f'(x)  = 1 , g'(x) = 1 이라는 것을 확인 할 수 있습니다.

 

matlab으로 작성한 코드는 아래와 같으니 ,만약 확인하시고 싶으시면 사용하셔도 됩니다.

 

 

clc
close all
clear 
% 함수 및 도함수 정의
syms x;
f = sin(x);
g = x;

% 도함수 계산
f_prime = diff(f, x);
g_prime = diff(g, x);

% 함수 및 도함수 함수 핸들 생성
f_func = matlabFunction(f);
g_func = matlabFunction(g);
f_prime_func = @(x) subs(f_prime, x);
g_prime_func = @(x) subs(g_prime, x);

% 그래프 그리기
x_values = linspace(-5, 5, 1000);
f_values = f_func(x_values);
g_values = g_func(x_values);
f_prime_values = f_prime_func(x_values);
g_prime_values = g_prime_func(x_values);

% 그래프 스타일 설정
figure;

% f(x) 그래프
subplot(3, 2, 1);
plot(x_values, f_values, 'b', 'LineWidth', 2);
title('Graph of f(x)');
xlabel('x');
ylabel('f(x)');
grid on;

% g(x) 그래프
subplot(3, 2, 2);
plot(x_values, g_values, 'r', 'LineWidth', 2);
title('Graph of g(x)');
xlabel('x');
ylabel('g(x)');
grid on;

% f'(x) 그래프
subplot(3, 2, 3);
plot(x_values, f_prime_values, 'm', 'LineWidth', 2);
title('Graph of f''(x)');
xlabel('x');
ylabel('f''(x)');
grid on;

% g'(x) 그래프
subplot(3, 2, 4);
plot(x_values, g_prime_values, 'c', 'LineWidth', 2);
title('Graph of g''(x)');
xlabel('x');
ylabel('g''(x)');
grid on;
  • 형태 ∞/∞:

예를 들어 아래의 식이라고 가정하자

예제2

여기서, , 이고,  입니다. L'Hôpital의 규칙을 적용하면,

 

증명2

 

 

위와 같이 증명이 됩니다.

 

단, 로피탈의 정리는 형태가 반드시 0/0 이거나 ∞/∞ 이어야 되므로, 주의하면서 사용해야됩니다.!!!

728x90
반응형

+ Recent posts