微分と積分は逆の関係になります。
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); } }