梯形和辛普生积分

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

/**
 * Created by q on 2017/12/21.
 */
public class Integration {
    private int n;
    private double x[];
    private double y[];
    public Integration(int n,double[] x, double[] y) {
        super();
        this.n = n;
        this.x = x;
        this.y = y;
    }
    public Integration(String path) {
        super();
        readFile(path);
    }
    double calTrapezium(){
        double sum = 0;
        sum  = y[0]+y[n-1];
        for(int i = 1;i<n-1;i++){
            sum += y[i]*2;
        }
        return sum*0.1/2;
    }
    double calSimpson(){
        double sum = 0;
        sum  = y[0]+y[n-1];
        for(int i = 1;i<n-1;i++){
            if(i%2==1) sum += y[i]*4;
            else sum += y[i]*2;
        }
        return sum*0.2/6;
    }
    void readFile(String fileName){
        File file = new File(fileName);
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(file));
            String tempString = null;
            // 一次读入一行,直到读入null为文件结束
            if((tempString = reader.readLine())!=null){
                n = Integer.parseInt(tempString);
            }
            x = new double[n];
            y = new double[n];
            if((tempString = reader.readLine())!=null){
                String[] sourceStrArray = tempString.split(" ");
                for(int i=0;i<n;i++){
                    x[i] = Double.parseDouble(sourceStrArray[i]);
                }
            }
            if((tempString = reader.readLine())!=null){
                String[] sourceStrArray = tempString.split(" ");
                for(int i=0;i<n;i++){
                    y[i] = Double.parseDouble(sourceStrArray[i]);
                }
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                }
            }
        }
    }
    public static void main(String [] args){
        System.out.println("请输入文件路径(梯形,辛普生)");
        Scanner scanner = new Scanner(System.in);
        String path = scanner.next();
        Integration integration = new Integration(path);
        System.out.println(integration.calTrapezium());
        System.out.println(integration.calSimpson());
        scanner.close();
    }
}

猜你喜欢

转载自blog.csdn.net/baidu_38370610/article/details/78922702