Tìm hàm số tốt nhất thỏa N điểm bất kì trong không gian 2 chiều

Nếu chúng ta có N điểm trong Oxy, làm sao để tìm được 1 hàm số thỏa mãn N điểm đó một cách tốt nhất ?

Hiện nay đã có nhiều công cụ làm được việc này. Hôm nay, mình sẽ hướng dẫn các bạn sử dụng ngôn ngữ python để tìm được hàm số này một cách dễ dàng 🙂

Đầu tiên, bạn có thể tải Anaconda 2.7 về để lập trình python. Sau khi cài đặt Anaconda 2.7, bạn search Jupyter NoteBook và sử dụng nó để làm môi trường lập trình. Nếu không thích Jupyter, bạn có thể code trên Notepad hoặc Console cũng được :).

Cách lập trình

Để tìm được hàm này bạn cần import các thư viện numpy, matplotlib.pyplot, random. Bạn dúng “as” để khai báo chữ viết tắt khi gọi các thư viện.
import random as rd //thư viện để tạo số ngẫu nhiên
import numpy as np //thư viện thực hiện việc tính toán phức tạp
import matplotlib.pyplot as plt //thư viện để vẽ đồ thị

Tiếp theo, khởi tạo 2 mảng
x=[] //mảng lưu hoành độ của điểm
y=[] //mảng lưu tung độ của điểm

N=input(“Input number of points: “) //yêu cầu nhập số điểm cần khởi tạo, chúng ta sẽ tạo ngẫu nhiên các điểm.

Tiến hành tạo điểm ngẫu nhiên bằng 1 vòng lặp N lần, N là số điểm cần tạo.
for i in range(N): //lặp N lần
x.insert(0, rd.uniform(-2, 2)) //chèn hoành độ ngẫu nhiên kiểu số thực có giá trị từ -2 đến 2 (bạn có thể thay đổi khoảng này) bằng hàm uniform trong thư viện random
y.insert(0, rd.uniform(-2, 2))//tương tự cho tung độ

Chúng ta cần biến 2 mảng x và y thành mảng trong thư viện numpy để thực hiện việc tính toán với thư viện này
x=np.array(x)
y=np.array(y)

Sử dụng hàm polyfit để tìm tất cả các hệ số của hàm số cần tìm
z=np.polyfit(x, y, 60) //tham số ’60’ là bậc của hàm số, bạn có thể thay đổi tham số này để hàm số tốt hơn. NGoài ra bạn có thể dùng lệnh print(z) để xem tất cả các hệ số của hàm
p = np.poly1d(z) //trả về dạng hàm số có 1 biến tương ứng với các hệ số được lưu trong “z” ở trên. Bạn hãy thử viết lệnh p(1) hay p(1.5),….xem kết quả ra sao. 1, và 1.5 chính là giá trị của x và p(1), p(1.5) chính là giá trị hàm số tại 1, 1.5

Bắt đầu vẽ
xp = np.linspace(-2, 6, 1000000)//định giới hạn của biến trong khoảng -2 đến 6, đường cong sẽ được tạo bởi 1000000 điểm, điểm này là điểm cấu thành đường cong chứ ko phải điểm mà chúng ta tạo ra ban đầu bằng hàm random. Bạn cũng có thể thay đổi cá tham số trên cho phù hợp.
shape = plt.plot(x, y, ‘.’, xp, p(xp))//Định dạng nét vẽ. Trong ví dụ này, đường cong sẽ được tạo bằng các dấu “.”
plt.ylim(-2, 2)//giới hạn hiển thị của trục y
plt.show() //hiển thị đồ thị

Demo: N=50, các thông số khác như trên. Những dấu chấm xanh da trời là chấm được tạo ngẫu nhiên, xanh lá cây là đồ thị được tạo ra. Việc đồ thị hiển thị có tốt nhất hay không phụ thuộc vào bậc, số điểm cấu thành và cả số điểm được tạo ra.
dothi

Rõ ràng hàm số đã giúp bạn đã tìm được quy luật tốt nhất của N điểm bất kì. Hãy thử ứng dụng bài toán này vào cuộc sống xem chúng ta có dự đoán trước được điều gì không. Chẳng hạn giá nhà, giá đất qua các năm,….

Trả lời

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *