積分でのsinとcosの関係をみてみる

微分積分は逆の関係になります。
sinを微分するとcosになってたので、cosを積分するとsinになります。cosの微分は-sinだったので、-sinの積分がcos、つまりsinの積分は-cosになります。
このことがわかるプログラムを考えてみる。


dx間隔にデータを取るとして、f(x)*dxを足していくと積分になります。

import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;

public class SinIntegral {
    //目的の関数
    private static double f(double x){
        return Math.sin(x) * 30;
    }
    //微分の理論値
    private static double df(double x){
        return Math.cos(x) * 30;
    }
    
    public static void main(String[] args){
        Image img = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = (Graphics2D) img.getGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, 400, 300);
        g.setColor(Color.BLACK);
        g.drawString("目的関数 df(x) = 30 cos x", 15, 15);
        g.drawString("積分     f(x)=∫df(x)dx = 30 sin x", 15, 115);
        g.drawString("和分     Σdf * dx", 15, 215);
        g.drawLine(10, 50, 310, 50);
        g.drawLine(10, 150, 310, 150);
        g.drawLine(10, 250, 310, 250);
        g.drawLine(10, 20, 10, 280);
        double dx = .02;
        double t = 0;
        for(int i = 0; i < 300; ++i){
            double x = i * dx;
            //目的関数
            g.fillRect(i + 10, (int)(50 -  df(x)), 2, 2);
            //微分の理論値
            g.fillRect(i + 10, (int)(150 - f(x)),  2, 2);
            //和分
            g.fillRect(i + 10, (int)(250 - t),     2, 2);
            t += df(x) * dx;
        }
        g.dispose();
        
        JFrame f = new JFrame("積分");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(400, 350);
        f.add(new JLabel(new ImageIcon(img)));
        f.setVisible(true);
    }
}