18/03/2021, 09:41

Bài tập Java - Viết chương trình java tính hàm SLOPE trong excel

Bài tập Java - Liệt kê số Fibonacci nhỏ hơn n và là số nguyên tố Nội dung bài viết : Mô tả và công thức tính hàm SLOPE trong Microsoft Excel. Cách dùng hàm SLOPE trong Microsoft Excel. Viết chương trình java tính hàm SLOPE trong excel. Nội dung ...

Bài tập Java - Liệt kê số Fibonacci nhỏ hơn n và là số nguyên tố

Nội dung bài viết:

  • Mô tả và công thức tính hàm SLOPE trong Microsoft Excel.
  • Cách dùng hàm SLOPE trong Microsoft Excel.
  • Viết chương trình java tính hàm SLOPE trong excel.

Nội dung chính

  • 1. Mô tả và công thức tính hàm SLOPE trong Microsoft Excel
    • Mô tả
    • Cú pháp
    • Công thức tính
  • 2. Cách dùng hàm SLOPE trong Microsoft Excel
  • 3. Viết chương trình java tính hàm SLOPE trong excel

1. Mô tả và công thức tính hàm SLOPE trong Microsoft Excel

Mô tả

Hàm SLOPE trả về độ dốc của đường hồi quy tuyến tính thông qua các điểm dữ liệu (x, y) trong known_y's và known_x's. Độ dốc là khoảng cách dọc chia cho khoảng cách ngang giữa bất kỳ hai điểm nào trên đường đó, là tỉ lệ thay đổi dọc theo đường hồi quy.

Cú pháp


SLOPE(known_y's, known_x's)

Trong đó:

  • known_y's: Bắt buộc. Mảng hoặc Range có kiểu dữ liệu dạng số hoặc date.
  • known_x's: Bắt buộc. Mảng hoặc Range có kiểu dữ liệu dạng số hoặc date.

Công thức tính

Công thức tính hàm SLOPE trong excel

Trong đó:

  • x: là các phần tử của known_x's.
  • averageX: là giá trị trung bình của known_x's.
  • y: là các phần tử của known_y's.
  • averageY: là giá trị trung bình của known_y's.

2. Cách dùng hàm SLOPE trong Microsoft Excel

Ví dụ:

Ví dụ sử dụng hàm SLOPE trong excel

Trong ví dụ trên:

Công thức Mô tả Kết quả
B6 = SLOPE(A2:A4, B2:B4) Độ dốc của đường hồi quy tuyến tính qua các điểm dữ liệu tại A2:A4 và B2:B4. -0.714285714
E6 = SLOPE(D2:D4, E2:E4) Độ dốc của đường hồi quy tuyến tính qua các điểm dữ liệu tại D2:D4 và E2:E4. -0.714285714

Bạn để ý thấy rằng Range(A2:A4) và Range(D2:D4) tương đương với nhau. Vì B6 và E6 trả về giá trị giống nhau.

Khi giá trị của known_x's hoặc known_y's là kiểu date thì nó sẽ được quy đổi sang kiểu số trước khi tính slope. Với quy ước giá trị date nhỏ nhất bằng 1.0 tính theo đơn vị ngày.

3. Viết chương trình java tính hàm SLOPE trong excel

Đề bài: Viết chương trình java tính hàm SLOPE trong excel. Với known_x's là một mảng các số và known_y's là một mảng các giá trị có kiểu date.

Tạo hàm lớp common chứa các phương thức tính slope và phương thức chuyển đổi dạng list date thành dạng list các số:


package vn.viettuts;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Common {
    public static final long MILLI_SECOND_PER_DAY = 60 * 60 * 24 * 1000;
    public static final String DATE_FOMART = "MM/dd/yyyy";
    
    /**
     * tinh slope theo cong thuc slope=∑(x-averageX)(y-averageY)/∑(x-averageX)^2
     * trong do: averageX la gia tri trung binh cua listX
     *           averageY la gia tri trung binh cua listY
     *
     * @param listY: danh sach so thuc
     * @param listX: danh sach so thuc
     * @return slope cua listX va listY
     * @throws ParseException
     */
    public static float slope(List<Float> listY, List<Float> listX) 
            throws ParseException {
        float averageX;
        float averageY;
        float totalX = 0;
        float totalY = 0;
        float totalAX_AY = 0;
        float totalAX_AX = 0;
        int i;

        // tinh tong cot x va y
        for (i = 0; i < listX.size(); i++) {
            totalX = totalX + listX.get(i);
            totalY = totalY + listY.get(i);
        }
        // tinh gia tri trung binh cua listX va listY
        averageX = totalX / listX.size();
        averageY = totalY / listX.size();

        for (i = 0; i < listX.size(); i++) {
            // tinh tong (x-averageX)*(y-averageY)
            totalAX_AY = totalAX_AY 
                    + ((listX.get(i) - averageX) * (listY.get(i) - averageY));
            // tinh tong (x-averageX)^2
            totalAX_AX = totalAX_AX 
                    + ((listX.get(i) - averageX) * (listX.get(i) - averageX));
        }
        // return slope cua day so x va day so y
        return totalAX_AY / totalAX_AX;
    }

    /**
     * chuyen doi danh sach date dang chuoi thanh danh sach so thuc
     * voi quy uoc min date (day) = 1.0
     * 
     * @param listStrDates: danh sach date dang chuoi
     * @return List<Float>: danh sach so thuc
     * @throws ParseException
     */
    public static List<Float> parseDateToFloats(List<String> listStrDates) 
            throws ParseException {
        List<Date> listDates = new ArrayList<>();
        List<Float> listY = new ArrayList<>();
        
        // phan tich string thanh date
        listDates = parseStringToDates(listStrDates);
        Date minDate = listDates.get(0);

        // tim min date
        for (Date date : listDates) {
            if (minDate.getTime() > date.getTime()) {
                minDate = date;
            }
        }

        // chuyen doi date thanh so thuc voi quy uoc min date (day) = 1.0
        for (Date date : listDates) {
            listY.add((float) (
                    (date.getTime() - minDate.getTime()) / MILLI_SECOND_PER_DAY) 
                    + 1.0F);
        }
        
        return listY;
    }
    
    /**
     * phan tich list string thanh list date
     * 
     * @param listStrDates: list date dang string
     * @return List<Date>
     * @throws ParseException
     */
    public static List<Date> parseStringToDates(List<String> listStrDates) 
            throws ParseException {
        List<Date> listDates = new ArrayList<>();
        SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FOMART);

        for (String strDate : listStrDates) {
            listDates.add(dateFormat.parse(strDate.trim()));
        }

        return listDates;
    }
}

Tạo lớp Test.java


package vn.viettuts;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        float slope;
        List<String> listStrDates = new ArrayList<>();
        List<Float> listY = new ArrayList<>();
        List<Float> listX = new ArrayList<>();

        try {
            // add gia tri cho listStrDates
            listStrDates.add("12/19/2017");
            listStrDates.add("12/18/2017");
            listStrDates.add("1/2/2018");
            // chuyen doi listStrDates sang dang so listY
            listY = Common.parseDateToFloats(listStrDates);
            // define listX
            listX.add(4F);
            listX.add(1F);
            listX.add(2F);
            // tinh slope cua listY va listX
            slope = Common.slope(listY, listX);
            System.out.println(slope);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

Kết quả:

-0.7142857
Bài tập Java - Liệt kê số Fibonacci nhỏ hơn n và là số nguyên tố
0