Theo tôi hiểu vấn đề của bạn, bạn đang tính toán các hệ số của sản phẩm của hai đa thức như trong ví dụ này
$$[ux^2+vx+w] \times [a_0 + a_1 x + a_2 x^2 +. ]=wa_0+[a_0v+a_1w]x+\cdots \tag{1}$$
bằng cách kết hợp các hệ số của chúng
$$[u,v,w] \star [a_0, a_1, a_2, \cdots ]=[wa_0,[a_0v+a_1w],[a_0u+a_1v+a_2w],\cdots]\tag{2}$$
và bạn muốn hiểu nguồn gốc của những bất ổn mà bạn đang tìm kiếm
Tôi sẽ đề xuất bạn viết phép toán tích chập dưới dạng ứng dụng của một ma trận dải nhất định cho một ma trận cột, theo cách này
$$\begin{pmatrix} w&&&&&&&\\ v&w&&&&&&\\ u&v&w&&&&&\\ &u&v&w&&&&\\ &&\ddots&\ddots&\ddots &&&\\ &&&u&v&w&&\\ &&&&u&v&w&\\ &&&&&u&v&w \end{pmatrix}\begin{pmatrix}a_0
Trong phần trình bày này, tích chập của hai chuỗi, vốn là một phép toán đối xứng, đã được thực hiện bất đối xứng. Đó là một cách để chọn ra một trong hai đa thức và hiểu vai trò nội tại của nó, bất kể đa thức kia là gì.
Một cách hay để xem xét [3] là xem chuỗi liên tiếp của các dòng dưới dạng "cửa sổ hệ số di chuyển" trượt trước "bảng giá trị" thứ hai
Xin lưu ý rằng vectơ cột
đã bị đảo lộn như là cổ điển cho tích chập
có thể được cung cấp "số 0 ở cuối" để có cùng số phần tử với số cột của ma trận. Ngoài ra, kết thúc bằng một số 0 nhất định [ít nhất bằng bậc của đa thức đầu tiên] là thông thường để có được một tích chập chính xác [những cân nhắc này là cổ điển khi kiểm tra kích thước của tích chập của hai dãy]
Nói chung, nếu $d$ là bậc của đa thức bậc nhất thì ma trận dải có dải $d+1$
Bây giờ, một trường hợp rất xấu sẽ là một loại phản ví dụ cho thấy nguồn gốc nội tại của vấn đề bất ổn định mà bạn muốn giải quyết
Hãy xem xét đa thức
$$p[x]=x^5+3x^4+x^3+x^2+x+1\tag{4}$$ có bậc $d=5$, một phiên bản "nhiễu loạn" của đa thức của bạn. Ma trận dải liên quan với các dải $d+1=6$ có định dạng $15 \times 15$ có số điều kiện lớn $c=1. 33 \times 10^7$ [gọi lại. số điều kiện là số mà sai số được nhân lên, ở đây là 10 triệu lần]. Ví dụ: nếu chúng tôi làm việc với các chữ số bị cắt ngắn thành $10^{-8}$, số thập phân xếp hạng thứ hai sẽ bị hỏng. ]
Nếu tôi xem xét trường hợp ma trận $20 \times 20$, với cùng một đa thức, thì nó còn tệ hơn. số điều kiện cao tới $2 \times 10^9$
Hơn nữa, chúng ta vẫn còn xa mục tiêu xét các đa thức có bậc hàng trăm.
Nếu chúng ta lấy đa thức $x^5+2x^4+x^3+x^2+x+1$ với cùng một ma trận $15 \times 15$, chúng ta sẽ có một số điều kiện khác. "chỉ" $10^4$
Kết luận là các dao động quan sát được phụ thuộc rất nhiều vào [các] đa thức liên quan [tôi sử dụng số nhiều ; một phân tích tương tự có thể được thực hiện trên đa thức thứ hai]. Điều này không có nghĩa là sai số làm tròn do hàng nghìn phép nhân/cộng không đóng một vai trò nào, mà là một vai trò thứ yếu.
Đây là cách chúng ta có thể lấy số điều kiện bằng Matlab [xin lưu ý rằng Matlab thực hiện hầu hết mọi công việc. việc xây dựng ma trận chập dải được xử lý bởi một chức năng cụ thể "convmtx"]
Trong bài viết này, hãy thảo luận về cách tìm nghiệm của đa thức của mảng NumPy. Nó có thể được tìm thấy bằng nhiều phương pháp khác nhau, hãy xem chúng một cách chi tiết
Phương pháp 1. sử dụng np. rễ[]
Hàm này trả về nghiệm của một đa thức với các hệ số được cho trong p. Các hệ số của đa thức sẽ được đặt trong một mảng theo thứ tự tương ứng.
Ví dụ: nếu đa thức là x2 +3x + 1 thì mảng sẽ là [1, 3, 1]
cú pháp. cục mịch. rễ[p]
Thông số
P. [array_like] Mảng hệ số đa thức hạng 1Trở lại. [ndarray] Một mảng chứa nghiệm của đa thức
Hãy xem một số ví dụ
ví dụ 1. Tìm nghiệm của đa thức x2 +2x + 1
Python3
# import numpy library
import
numpy as np
# Enter the coefficients of the poly in the array
coeff
=
[-1. -1.]0
[-1. -1.]1
[-1. -1.]2
[-1. -1.]3
[-1. -1.]2
[-1. -1.]1
[-1. -1.]6
[-1. -1.]7
[-1. -1.]8
đầu ra
[-1. -1.]
ví dụ 2. Tìm nghiệm của đa thức x3 +3 x2 + 2x +1
Python3
# import numpy library
import
numpy as np
# import numpy library
4
# import numpy library
5
coeff
33_______
[-1. -1.]0
[-1. -1.]1
[-1. -1.]2
import
1[-1. -1.]2
[-1. -1.]3
[-1. -1.]2
[-1. -1.]1
[-1. -1.]6
[-1. -1.]7
[-1. -1.]8
đầu ra
[-2. 32471796+0. j -0. 33764102+0. 56227951j -0. 33764102-0. 56227951j]
Phương pháp 2. sử dụng np. poly1D[]
Hàm này giúp xác định hàm đa thức. Nó giúp dễ dàng áp dụng “các phép toán tự nhiên” trên đa thức. Các hệ số của đa thức sẽ được đặt trong một mảng theo thứ tự tương ứng
Ví dụ, đối với đa thức x2 +3x + 1, mảng sẽ là [1, 3, 1]
Tiếp cận
- Áp dụng chức năng np. poly1D[] trên mảng và lưu trữ nó trong một biến
- Tìm nghiệm bằng cách nhân biến với nghiệm hoặc r[từ khóa có sẵn] và in kết quả để lấy nghiệm của đa thức đã cho
cú pháp. cục mịch. poly1d[mảng, gốc, var]
Hãy xem một số ví dụ
ví dụ 1. Tìm nghiệm của đa thức x2 +2x + 1
Python3
# import numpy library
import
numpy as np
numpy as np
4
# import numpy library
5
numpy as np
6=
numpy as np
8
[-1. -1.]1_______0_______2
import
1[-1. -1.]2
[-1. -1.]3_______0_______2
[-1. -1.]1
4