본문 바로가기

수학

재미있는 코딩으로 이해하는 미분

간단한 epsilon delta논법

a=b이다의 정의

https://dvdprime.com/g2/bbs/board.php?bo_table=comm&wr_id=23039129에 있는 사진

이때 a=b라고 한다.
여기서 입실론은 수학적으로 무한소지만 컴퓨터에서는 자기가 임의로 설정 할 수 있다.
그러면 (f(x+epsilon) - f(x))/epsilon 에서 epsilon 이하의 값은 부동소수이므로 제거 할 수있다.

미분의 정의

미분이란 두가지 의미가 있는데 1. 접선의 기울기 2. 순간변화량
y변화량 /x변화량에서 x변화량이 어떤 값으로 수렴할때의 값에 대한 것이다.
코딩을 통해 이해해보자

코딩

function[i]는 i차 항의 계수이다.

double differentiate(double function[], double x, int length)
{
    long double extreme_value = 0;
    long double function_value = 0;
    for (int i = 0; i < length; i++)
    {
        if (i == 1)
            extreme_value += function[i] * (x + epsilon);
        else
            extreme_value += function[i] * pow((x + epsilon), i);
        function_value += function[i] * pow((x), i);
    }
    long double result = (extreme_value - function_value) / epsilon;
    float result2 = float(result);
    if (abs(result2 - result) < epsilon)
        result = result2;
    return result;
}

pow(a,b)는 a^b이다.
처음은 정의를 이용한 미분
마지막은 부동소수 제거

전체코드는 다음과 같다

#include <iostream>
#include <cmath>

static int count = 0;
double epsilon = 0.001;
static double* receive_function(int length)
{
    static double* function = new double[length];
    if (count == 0)
    {
        
        for (int i = 0; i < length; i++)
        {
            std::cout << "\nwrite your" << i << "th ceofficient: ";
            std::cin >> function[i];
        }
        count++;
    }
    return function;
}
double differentiate(double function[], double x, int length)
{
    long double extreme_value = 0;
    long double function_value = 0;
    for (int i = 0; i < length; i++)
    {
        if (i == 1)
            extreme_value += function[i] * (x + epsilon);
        else
            extreme_value += function[i] * pow((x + epsilon), i);
        function_value += function[i] * pow((x), i);
    }
    long double result = (extreme_value - function_value) / epsilon;
    float result2 = float(result);
    if (abs(result2 - result) < epsilon)
        result = result2;
    return result;
}
int main()
{
    
    
    int length;
    std::cout << "write your maximam degree: ";
    std::cin >> length;
    double* function = new double[length];
    for (int i = 0; i < length; i++)
        function[i] = receive_function(length)[i];
    double x;
    std::cout << "write x to differentiate: ";
    std::cin >>x;
    std::cout<<differentiate(function, x, length);
}