บทความนี้อธิบายถึงวิธีการใช้งาน Java เพื่อแก้ปัญหาพหุนาม N-Degree เดียว แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
โครงการจำเป็นต้องทำการคาดการณ์เทรนด์โดยใช้อัลกอริทึมเช่นการติดตั้งเชิงเส้น, การปรับเส้นโค้ง 2 ลำดับและการติดตั้งแบบเอ็กซ์โปเนนเชียล อัลกอริทึมการติดตั้งเชิงเส้นต่างๆถูกเขียนลงในเมทริกซ์ในรูปแบบนี้:
โดยที่ X คือค่าการสุ่มตัวอย่างพิกัดแนวนอน y คือค่าการสุ่มตัวอย่างพิกัดแนวตั้งฉันคือหมายเลขลำดับของจุดสุ่มตัวอย่าง A คือสัมประสิทธิ์คือ N คือจำนวนจุดสุ่มตัวอย่างและ N คือคำสั่ง
ฉันไม่รู้ว่ามีแพ็คเกจการทำงานของ Java Matrix ที่ใช้งานง่ายหรือไม่ ฉันไม่เก่งในการรวบรวมข้อมูลประเภทนี้ดังนั้นฉันจึงต้องเลือกพีชคณิตเชิงเส้นที่ฉันวางไว้เป็นเวลาหลายปีและเขียนโปรแกรม Java ด้วยตัวเองเพื่อใช้อัลกอริทึมของเมทริกซ์เพิ่มเพื่อแก้สมการลำดับที่สูงขึ้น เพียงแค่วางรหัส:
แพ็คเกจ Commonalgorithm; Plass Polynomialsoluter {ส่วนตัวสองเท่า [] [] เมทริกซ์; ผลส่วนตัว [] ผลลัพธ์; คำสั่ง INT ส่วนตัว; Public Polynomialsoluter () {} // ตรวจสอบความยาวอินพุตและสร้างเมทริกซ์บูลีนส่วนตัวเริ่มต้น (สองเท่า [] [] matrixa, double [] arrayb) {order = arrayb.length; if (matrixa.length! = order) return false; เมทริกซ์ = ใหม่สองครั้ง [คำสั่งซื้อ] [คำสั่ง + 1]; สำหรับ (int i = 0; i <order; i ++) {ถ้า (matrixa [i] .length! = order) return false; สำหรับ (int j = 0; j <order; j ++) {matrix [i] [j] = matrixa [i] [j]; } matrix [i] [order] = arrayb [i]; } result = ใหม่ double [order]; กลับมาจริง; } สาธารณะสองเท่า [] getResult (double [] [] matrixa, double [] arrayb) {ถ้า (! init (matrixa, arrayb)) return null; // Gaussian Elimination-for (int i = 0; i <order; i ++) {// ถ้าระยะแนวทแยงของแถวปัจจุบันคือ 0 มันจะถูกแลกเปลี่ยนกับแถวที่มีคอลัมน์เดียวกันของแถวต่อไปนี้ที่ไม่ใช่ 0 ถ้า (! // การกำจัดสำหรับ (int j = i+1; j <order; j ++) {ถ้า (เมทริกซ์ [j] [i] == 0) ดำเนินการต่อ; ปัจจัยสองเท่า = เมทริกซ์ [j] [i] / เมทริกซ์ [i] [i]; สำหรับ (int l = i; l <order+1; l ++) เมทริกซ์ [j] [l] = เมทริกซ์ [j] [l] - เมทริกซ์ [i] [l] * ปัจจัย; }} // Gaussian Elimination-Reverse-Remote-Remote การคำนวณซ้ำซ้อนสำหรับ (int i = order-1; i> = 0; i--) {ผลลัพธ์ [i] = matrix [i] [order] / matrix [i] [i]; สำหรับ (int j = i -1; j> -1; j--) เมทริกซ์ [j] [คำสั่ง] = เมทริกซ์ [j] [คำสั่ง] -ผลลัพธ์ [i] * เมทริกซ์ [j] [i]; } ผลตอบแทนผลลัพธ์; } บูลีนส่วนตัว swethifzero (int i) {ถ้า (matrix [i] [i] == 0) {int j = i + 1; // ค้นหาคอลัมน์ที่ไม่เป็นศูนย์ที่ตำแหน่งที่สอดคล้องกันในขณะที่ (j <order && matrix [j] [i] == 0) j ++; // หากตำแหน่งที่สอดคล้องกันทั้งหมดเป็น 0 ไม่มีวิธีแก้ปัญหาถ้า (j == order) ส่งคืนเท็จ; else switchrows (i, j); } return true; } สวิตช์โมฆะส่วนตัว (int i, int j) {double [] tmp = matrix [i]; เมทริกซ์ [i] = เมทริกซ์ [j]; เมทริกซ์ [j] = tmp; -ยินดีต้อนรับสู่การสื่อสารหากมีอัลกอริทึมที่ดีกว่าหรือแพ็คเกจการทำงานของเมทริกซ์ที่เหมาะสม
PS: นี่คือเครื่องมือการคำนวณบางอย่างสำหรับคุณที่จะอ้างถึง:
เครื่องมือการคำนวณฟังก์ชั่น unary unary (eq):
http://tools.vevb.com/jisuanqi/equ_jisuanqi
เครื่องคิดเลขทางวิทยาศาสตร์ออนไลน์ use_advanced เครื่องคิดเลขออนไลน์เครื่องคิดเลข:
http://tools.vevb.com/jisuanqi/jsqkeexue
เครื่องคิดเลขออนไลน์ _Standard เครื่องคิดเลข:
http://tools.vevb.com/jisuanqi/jsq
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึม Java ผู้อ่านที่มีความสนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "บทสรุปของเคล็ดลับการดำเนินงาน Java Dom", "บทสรุปของไฟล์ Java และเคล็ดลับการดำเนินการไดเรกทอรี" และ "สรุป
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน