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ả
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
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ụ:
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