적분이라든지

17990 단어 C수학
나는 수학을 좋아해서 이번에는 C언어로 적분(이어서 미분)하는 프로그램을 써 보았습니다.

소스 프로그램


#include<stdio.h>
int sekibunn(int x[], int bottom, int top) //定積分の計算
{
    int ans, t[6] = {1, 1, 1, 1, 1, 1}, b[6] = {1, 1, 1, 1, 1, 1}, i;
    t[1] = top;
    b[1] = bottom;
    for (i = 0; i < 2; i++)  //2乗の計算
    {
        t[2] *= top;
        b[2] *= bottom;
    }
    for (i = 0; i < 3; i++) //3乗の計算
    {
        t[3] *= top;
        b[3] *= bottom;
    }
    for (i = 0; i < 4; i++) //4乗の計算
    {
        t[4] *= top;
        b[4] *= bottom;
    }
    for (i = 0; i < 5; i++) //5乗の計算
    {
        t[5] *= top;
        b[5] *= bottom;
    }
    ans = ((t[5] * x[4] / 5) + (t[4] * x[3] / 4) + (t[3] * x[2] / 3) + (t[2] * x[1] / 2) + (t[1] * x[0])) - ((b[5] * x[4] / 5) + (b[4] * x[3] / 4) + (b[3] * x[2] / 3) + (b[2] * x[1] / 2) + (b[1] * x[0]));
    return ans;
}

int main(void)
{
    int x[] = {0, 0, 0, 0, 0};
    int i;
    int or, top, bottom;
    printf("整数を入力してください。\n");
    for (i = 4; i >= 0; i--)
    {
        printf("x^%dの係数:", i);
        scanf("%d", &x[i]);
    }
    printf("y=(%d)x^4+(%d)x^3+(%d)x^2+(%d)x+(%d)\n", x[4], x[3], x[2], x[1], x[0]);
    printf("微分or定積分...1 / 0:");
    scanf("%d", & or);
    if (or == 0)
    {
        printf("範囲は?");
        printf("下のほう :");
        scanf("%d", &bottom);
        printf("上のほう :");
        scanf("%d", &top);
        printf("面積は%dです。", sekibunn(x, bottom, top));
    }
    else if(or == 1){
        printf("y=(%d)x^3+(%d)x^2+(%d)x+(%d)", x[4]*4, x[3]*3, x[2]*2, x[1]);
    }
    return 0;
}

결과로서는 그다지 정확한 숫자는 낼 수 없었습니다. 소수점 이하가 있어 정수 부분이 2자리 이상이 되는 숫자의 형태가 없고, 조합해 잘 표현하는 방법도 생각나지 않았습니다. 그러나 정수 부분에서는 대체로 정확하게 되도록 만들 수 있었기 때문에 좋았습니다.

실행 결과(정적분)


2\int_{0}^{2}(x^4-8x^2+16)dxを計算してみました。
実際の答えが\frac{512}{15}となります。
/*整数を入力してください。
x^4の係数:2
x^3の係数:0
x^2の係数:-16
x^1の係数:0
x^0の係数:32
y=(2)x^4+(0)x^3+(-16)x^2+(0)x+(32)
微分or定積分...1 / 0:0
範囲は?下のほう :0
上のほう :2
面積は34です。*/

512/15는 34.13333이 되기 때문에 대체로 정확하게 되었습니다.

(미분)


y=x^4+4x^3+4x^2-1を微分せよ。実際の答えはy'=4x^3+12x^2+8xです。
/*整数を入力してください。
x^4の係数:1
x^3の係数:4
x^2の係数:4
x^1の係数:0
x^0の係数:-1
y=(1)x^4+(4)x^3+(4)x^2+(0)x+(-1)
微分or定積分...1 / 0:1
微分結果
y'=(4)x^3+(12)x^2+(8)x+(0)*/

라고 이런 느낌이 되었습니다.

감상



다음에 쓸 기회가 있으면, 분수를 나타낼 수 있는 구조를 생각하고 싶습니다.


#include <stdio.h>
//方程式とx軸,xの範囲で囲まれた面積を近似で出すことができる。
int main(void)
{
    //今回の場合y=4xで範囲は0~2
    double y = 0, x, s = 0, haba = 0.001;
    int i, n = (2 / haba);
   x = haba;
    for (i = 0; i < n; i++)
    {
        y = 4 * x;
        printf("y=%f\n", y);
        s += haba * y;
        printf("面積=%f\n", s);
        x += haba;
        printf("x=%f\n\n", x);
    }
    printf("面積=%f", s);
    return 0;
}

사실은 면적=8
결과:면적=8.004000


단순한 생각이었습니다만, 구분 구적법도 재현하면 정말로 근사치가 나올까라고 생각해 시험해 보았습니다.
 x의 값, 구하는 범위의”n=(2/n)”의 2를 바꾸면 좋아하는 범위로 할 수 있으므로, 만약 좋으면 놀아 보세요. 덧붙여서 haba를 너무 작게 하면 엄청 시간이 걸립니다.

좋은 웹페이지 즐겨찾기