@@ -166,9 +166,103 @@ class PolynomialRegression {
166166 resolve ( coefficients ) ;
167167 } ) ;
168168 }
169+
170+ /**
171+ * Dự đoán giá trị y tương ứng dựa trên giá trị x mới
172+ * @param coefficients Kết quả của hồi quy đa thức
173+ * @param x Giá trị x mới
174+ * @returns Giá trị y tương ứng với giá trị x mới
175+ */
176+ public static findY ( coefficients : number [ ] , x : number ) : number {
177+ let result = 0 ;
178+ for ( let i = 0 ; i < coefficients . length ; i ++ ) {
179+ result += coefficients [ i ] * Math . pow ( x , i ) ;
180+ }
181+ return result ;
182+ }
183+
184+ /**
185+ * Tính giá trị của đa thức tại một điểm x
186+ * @param coefficients Kết quả của hồi quy đa thức
187+ * @param x Giá trị x
188+ * @returns Giá trị của đa thức tại điểm x
189+ */
190+ private static evaluatePolynomial ( coefficients : number [ ] , x : number ) : number {
191+ let result = 0 ;
192+ for ( let i = coefficients . length - 1 ; i >= 0 ; i -- ) {
193+ result = result * x + coefficients [ i ] ;
194+ }
195+ return result ;
196+ }
197+
198+ /**
199+ * Tính giá trị của đạo hàm bậc nhất của đa thức tại một điểm x
200+ * @param coefficients Kết quả của hồi quy đa thức
201+ * @param x Giá trị x
202+ * @returns Giá trị của đạo hàm bậc nhất của đa thức tại điểm x
203+ */
204+ private static evaluatePolynomialDerivative (
205+ coefficients : number [ ] ,
206+ x : number
207+ ) : number {
208+ let result = 0 ;
209+ for ( let i = coefficients . length - 1 ; i >= 1 ; i -- ) {
210+ result = result * x + i * coefficients [ i ] ;
211+ }
212+ return result ;
213+ }
214+
215+ /**
216+ * Tìm nghiệm gần đúng của phương trình đa thức bằng phương pháp Newton-Raphson
217+ * @param coefficients Kết quả của hồi quy đa thức
218+ * @param y Giá trị y mới
219+ * @param initialGuess Giá trị xấp xỉ ban đầu
220+ * @param tolerance Sai số cho phép
221+ * @param maxIterations Số lần lặp tối đa
222+ * @returns Nghiệm gần đúng của phương trình
223+ */
224+ public static findX (
225+ coefficients : number [ ] ,
226+ y : number ,
227+ initialGuess : number ,
228+ tolerance : number ,
229+ maxIterations : number
230+ ) : number | null {
231+ let x = initialGuess ;
232+ for ( let i = 0 ; i < maxIterations ; i ++ ) {
233+ const fx = this . evaluatePolynomial ( coefficients , x ) - y ;
234+ if ( Math . abs ( fx ) < tolerance ) {
235+ return x ;
236+ }
237+ const fpx = this . evaluatePolynomialDerivative ( coefficients , x ) ;
238+ if ( fpx === 0 ) {
239+ return null ;
240+ }
241+ x -= fx / fpx ;
242+ }
243+ return null ;
244+ }
245+
246+ /**
247+ * So sánh các hệ số được tính toán với các hệ số mong đợi bằng cách sử dụng giá trị dung sai
248+ * @param coefficients Kết quả của hồi quy đa thức
249+ */
250+ public static testing ( coefficients : number [ ] ) : void {
251+ const expectedCoefficients = coefficients ; // [0, 0, 1]
252+ for ( let i = 0 ; i < coefficients . length ; i ++ ) {
253+ if (
254+ Math . abs ( coefficients [ i ] - expectedCoefficients [ i ] ) <
255+ PolynomialRegression . tolerance
256+ ) {
257+ console . log ( `Hệ số ${ i } gần đúng với giá trị mong đợi` ) ;
258+ } else {
259+ console . log ( `Hệ số ${ i } không đúng với giá trị mong đợi` ) ;
260+ }
261+ }
262+ }
169263}
170264
171- // Kiểm tra
265+ // Logger
172266( async ( ) => {
173267 const xValues = [ 1 , 2 , 3 ] ;
174268 const yValues = [ 1 , 4 , 9 ] ;
@@ -179,19 +273,23 @@ class PolynomialRegression {
179273 order
180274 ) ;
181275
182- // Kết quả của hồi quy đa thức
183- console . log ( coefficients ) ;
184-
185- // So sánh các hệ số được tính toán với các hệ số mong đợi bằng cách sử dụng giá trị dung sai
186- const expectedCoefficients = [ 0 , 0 , 1 ] ;
187- for ( let i = 0 ; i < coefficients . length ; i ++ ) {
188- if (
189- Math . abs ( coefficients [ i ] - expectedCoefficients [ i ] ) <
190- PolynomialRegression . tolerance
191- ) {
192- console . log ( `Hệ số ${ i } gần đúng với giá trị mong đợi` ) ;
193- } else {
194- console . log ( `Hệ số ${ i } không đúng với giá trị mong đợi` ) ;
195- }
196- }
276+ // Kết quả của hồi quy đa thức = [0, 0, 1] với y = 1 * x^2.
277+ console . log ( "Kết quả của hồi quy đa thức là " + coefficients ) ;
278+ PolynomialRegression . testing ( coefficients ) ;
279+
280+ console . log (
281+ "Giá trị x tương ứng với giá trị y bằng 16 là " +
282+ PolynomialRegression . findX (
283+ coefficients ,
284+ 16 ,
285+ 1 ,
286+ PolynomialRegression . tolerance ,
287+ 1000
288+ )
289+ ) ; // 4
290+
291+ console . log (
292+ "Giá trị y tương ứng với giá trị x bằng 4 là " +
293+ PolynomialRegression . findY ( coefficients , 4 )
294+ ) ; // 16
197295} ) ( ) ;
0 commit comments