Python đường cong mượt mà
Khi bắt đầu học kỳ, tôi khuyên bạn nên sử dụng ứng dụng Anaconda Navigator để thiết lập môi trường sử dụng trong khóa học này. Trong vài tuần tới, tôi sẽ giới thiệu cho bạn một số gói Python. trong nhiều trường hợp, chúng tôi sẽ cần bắt đầu bằng cách thêm một số gói bổ sung vào môi trường của bạn Show Trong bài giảng hôm nay chúng ta sẽ làm việc với matplotlib, đây là một gói phần mềm để xây dựng các biểu đồ. Để sử dụng matplotlib, bạn sẽ cần thêm nó vào môi trường của mình Khởi động ứng dụng Anaconda Navigator và nhấp vào tab môi trường ở bên trái màn hình chính. Chọn môi trường CMSC210 từ danh sách các môi trường có sẵn. Trong khung bên phải, chọn Not Installed từ menu rồi nhập import matplotlib.pyplot as plt0 vào hộp tìm kiếm Nhấp vào hộp kiểm bên cạnh import matplotlib.pyplot as plt0 trong danh sách kết quả, sau đó nhấp vào áp dụng Tiếp theo, để có thể hiển thị các ô trong Visual Studio Code, bạn sẽ cần cài đặt gói thứ hai. Làm theo quy trình được nêu ở trên để cài đặt gói jupyter giới thiệu pyplot Một mô-đun trong thư viện matplotlib là pyplot, trình bày một giao diện đơn giản và dễ sử dụng để xây dựng các biểu đồ Đối với ví dụ pyplot đầu tiên của chúng tôi, tôi sẽ xây dựng trên ví dụ hồi quy tuyến tính từ một trong những bài giảng trước đây của chúng tôi. Lần này, tôi muốn tính toán đường hồi quy và sau đó sử dụng pyplot để vẽ cả điểm dữ liệu thô và đường hồi quy Đây là mã nguồn hoàn chỉnh cho ví dụ đó. Dưới đây tôi sẽ chia nhỏ vấn đề này và đề cập đến một số khía cạnh cụ thể của việc sử dụng pyplot import matplotlib.pyplot as plt def cleanLine(line): """Converts a raw line list into an appropriate data format.""" return (int(line[0]), float(line[1])) def readData(fileName): """Generic data reading function. Uses cleanLine to format lines of data.""" data = [] with open(fileName) as f: for line in f.readlines(): data.append(cleanLine(line.split())) return data def means(pairs): xSum = 0 ySum = 0 for x,y in pairs: xSum += x ySum += y N = len(pairs) return (xSum/N,ySum/N) def covariance(pairs,means): sum = 0 for x,y in pairs: sum += (x-means[0])*(y-means[1]) return sum def xVariance(pairs,xMean): sum = 0 for x,y in pairs: sum += (x-xMean)*(x-xMean) return sum def regressionCoeffs(pairs): """Computes linear regression coefficients (a,b) from a list of (x,y) pairs.""" m = means(pairs) beta = covariance(pairs,m)/xVariance(pairs,m[0]) alpha = m[1]-beta*m[0] return (alpha,beta) rawData = readData("farm.txt") pairs = [cleanLine(line) for line in rawData] a,b = regressionCoeffs(pairs) # pyplot expects the data to be plotted to be in the form # of a list of x values and a list of y values. # Reconfigure the data to suit pyplot. x = [year for year,pop in rawData] y = [pop for year,pop in rawData] s = [1930,1990] t = [a+b*1930,a+b*1990] # Now plot the data sequence and the regression line plt.plot(x,y,'rs',s,t,'b-') # Set the axis details plt.axis([1930,1990,0,35]) # Add title and labels plt.title("Regression Example") plt.xlabel("Year") plt.ylabel("Farm Population (in millions)") plt.show() Để chạy chương trình này trong Visual Studio Code, nhấp chuột phải vào tệp trong chế độ xem tệp và chọn tùy chọn "Chạy tệp trong cửa sổ tương tác mới" Khái niệm cơ bản về pyplotĐể sử dụng pyplot, chúng tôi bắt đầu với một câu lệnh nhập import matplotlib.pyplot as plt matplotlib là một phần của bản phân phối Anaconda, vì vậy bạn nên cài đặt matplotlib Lưu ý quan trọng. Người dùng Mac có thể cần thay thế câu lệnh nhập này bằng câu lệnh thay thế được hiển thị bên dưới import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt Phương thức đầu tiên và quan trọng nhất trong pyplot là phương thức import matplotlib.pyplot as plt2, phương thức này vẽ một tập hợp các điểm dữ liệu. import matplotlib.pyplot as plt2 dự kiến các điểm dữ liệu sẽ được cung cấp dưới dạng danh sách giá trị x và danh sách giá trị y riêng biệt. Nếu dữ liệu của bạn không được sắp xếp theo cách đó, bạn sẽ phải viết một đoạn mã nhỏ để sắp xếp lại nó. Trong ví dụ này, dữ liệu mà chúng tôi đọc từ tệp được lưu trữ dưới dạng danh sách các bộ (x,y), vì vậy chúng tôi phải bắt đầu với một số mã để tạo danh sách x và y riêng biệt từ dữ liệu đó x = [year for year,pop in rawData] y = [pop for year,pop in rawData] Để vẽ đường hồi quy, chúng ta chỉ cần xây dựng một chuỗi dữ liệu bao gồm một vài điểm, các điểm cuối của đường mà chúng ta muốn vẽ ________số 8Lệnh import matplotlib.pyplot as plt2 có thể vẽ một hoặc nhiều chuỗi dữ liệu. Sau mỗi chuỗi, chúng tôi cũng cần cung cấp một chuỗi định dạng để chỉ định cách chúng tôi muốn chuỗi được vẽ import matplotlib.pyplot as plt0 Chuỗi định dạng bao gồm hai ký tự, một màu và một kiểu vẽ. Dưới đây là bảng các giá trị màu có sẵn và mã chữ cái của chúng mã màumàu xanh da trờibmàu xanh lá câygredrcyancmagentammàu vàngyblackkwhitewDưới đây là bảng một số kiểu cốt truyện có sẵn Ví dụ biểu đồ mà chúng tôi đã sử dụng ở trên sẽ vẽ chuỗi dữ liệu bằng các ô vuông màu đỏ và đường hồi quy là một đường màu xanh lam Sau khi thiết lập cốt truyện, bạn thường sẽ muốn thiết lập các trục và gắn nhãn cho chúng. Các lệnh này làm điều đó import matplotlib.pyplot as plt1 Phương thức import matplotlib.pyplot as plt5 lấy một danh sách cung cấp giá trị đầu và cuối cho trục x theo sau là giá trị đầu và cuối cho trục y Bước cuối cùng trong việc vẽ sơ đồ là yêu cầu pyplot hiển thị cốt truyện import matplotlib.pyplot as plt3 Thao tác này sẽ mở một cửa sổ đồ họa hiển thị cốt truyện. Cửa sổ đồ họa cung cấp các điều khiển cho phép bạn chỉnh sửa hoặc lưu hình ảnh. Đây là cốt truyện được tạo bởi chương trình ví dụ này Bạn cũng có thể yêu cầu pyplot lưu cốt truyện trong tệp hình ảnh import matplotlib.pyplot as plt4 Điều này sẽ lưu tệp hình ảnh trong cùng thư mục với tệp mã nguồn của chương trình Python Vẽ một đường cong mượt màTrong ví dụ tiếp theo, chúng ta sẽ vẽ một đường cong mượt mà của hàm logistic Đây là cốt truyện mà pyplot sẽ tạo ra cho chúng ta Đây là mã cho chương trình tạo ra âm mưu này import matplotlib.pyplot as plt5 Cách tiếp cận cơ bản ở đây giống như trong ví dụ trước. Chúng tôi bắt đầu bằng cách lập danh sách các mẫu dọc theo trục x. Sau đó, khi xây dựng một danh sách thứ hai chứa các giá trị y được tạo bằng cách chuyển từng mẫu x cho hàm f(x). Sau đó, chúng tôi chuyển hai danh sách đó tới hàm pyplot import matplotlib.pyplot as plt2 với chuỗi định dạng là import matplotlib.pyplot as plt7, kết nối các điểm mẫu với nhau để tạo ra một số lượng lớn các đoạn đường màu xanh lam. Vì các đoạn thẳng riêng lẻ khá ngắn, nên tác dụng của việc đặt tất cả chúng lại với nhau là tạo ra thứ trông giống như một đường cong mượt mà Để tạo thuận lợi cho việc tạo các mẫu x và đánh giá chúng, chúng tôi sử dụng một cặp cách hiểu danh sách Thông tin thêm về pyplot và matplotlib Hai ví dụ tôi đã trình bày ở trên chứng minh đủ những gì pyplot có thể làm để đáp ứng nhu cầu vẽ đồ thị của chúng ta trong phần còn lại của khóa học. pyplot và matplotlib có khả năng làm được nhiều hơn thế và cung cấp các phương tiện để xây dựng nhiều loại ô khác nhau. Nếu bạn tò mò, tôi mời bạn truy cập trang web matplotlib chính thức tại matplotlib. tổ chức Bài tập lập trìnhPhương trình vi phân thường cấp một là phương trình có dạng cùng với điều kiện ban đầu x(0) = x0 Giải phương trình yêu cầu chúng ta tìm một biểu thức cho x(t) thỏa mãn cả phương trình và điều kiện ban đầu. Không phải tất cả các phương trình vi phân đều có thể được giải chính xác; . Trong bài tập này, chúng ta sẽ xem xét ba phương pháp như vậy Khi chúng ta giải chính xác một phương trình vi phân, chúng ta đang cố gắng xác định hàm x(t) thỏa mãn phương trình và điều kiện ban đầu. Nếu chúng ta có thể tìm thấy x(t) thì tất nhiên chúng ta sẽ có thể đánh giá hàm nghiệm này tại bất kỳ thời điểm t nào. Các phương pháp mà chúng ta sắp xem xét bên dưới đều là các phương pháp cố gắng xây dựng các xấp xỉ cho x(t) tại các thời điểm bị cô lập. Cụ thể, chúng tôi sẽ cố gắng ước tính x(ti) cho tập hợp các điểm bị cô lập thành = t0 + h, trong đó h là kích thước bước mà chúng tôi chọn Chúng ta hãy suy nghĩ một phút về cách chúng ta có thể tìm ra điểm đầu tiên trong số những điểm chưa biết này, x(t1) Một cách để có được x(t1) là bắt đầu tại điểm đã biết (t0 , x0) và vẽ một đường thẳng có hệ số góc phù hợp để đạt được giá trị chính xác của x(t1) Tất nhiên, vấn đề là chúng ta không biết chính xác độ dốc chính xác cần thiết để đạt được mục tiêu của mình. Các phương pháp khác nhau mà chúng ta sẽ nghiên cứu dưới đây đều nhằm mục đích thực hiện ngày càng tốt hơn công việc tính gần đúng độ dốc Phương pháp đầu tiên sử dụng độ dốc duy nhất mà chúng tôi có sẵn cho chúng tôi làm dự đoán ban đầu cho độ dốc chính xác. Vì chúng ta biết cả t0 và x0, nên chúng ta có thể thế chúng vào phương trình vi phân để tính hệ số góc của x(t) tại t = t0 Nếu chúng ta sử dụng cái này làm hệ số góc của mình và đi theo đường thẳng đến t = t1, chúng ta sẽ đến một điểm x1 = x(t0) + f(t0 , x0) (t1 - t0) = x(t0) + f(t0 , x0) h đó là một ước tính khá tồi cho x(t1). Hình ảnh dưới đây minh họa tình hình Từ (t1 , x1) chúng ta chỉ cần lặp lại quá trình x2 = x1 + f(t1 , x1) (t2 - t1) = x1 + f(t1 , x1) h Tổng quát hơn, phương pháp này đưa chúng ta từ một điểm ước tính (tn , xn) đến một ước tính mới (tn+1 , xn+1) thông qua quy trình tn+1 = tn + h k1 = f(tn, xn) xn+1 = xn + k1 h Một lần nữa, tôi muốn nhấn mạnh rằng đây là một phương pháp tệ hại (như hình trên cho thấy). Chúng ta có thể cải thiện phương pháp một chút bằng cách giảm kích thước bước h. Với kích thước bước nhỏ hơn theo hướng t, sẽ có ít cơ hội hơn để điểm ước tính x1 khác với giá trị thực của giải pháp, x(t1). Quan trọng hơn, chúng ta có thể cải thiện phương pháp bằng cách thay thế độ dốc k1 mà chúng ta đã sử dụng cho phương pháp này bằng một độ dốc tốt hơn giúp chúng ta tiến gần hơn đến điểm mục tiêu tốt hơn Phương pháp Euler đã sửa đổi cố gắng cải thiện phương pháp Euler bằng cách sử dụng trung bình của một vài đạo hàm làm phép tính gần đúng tốt hơn cho độ dốc bí ẩn mà chúng ta tìm kiếm. Phương pháp Euler đã sửa đổi bắt đầu bằng cách sử dụng phương pháp Euler để tính một giá trị gần đúng cho x(tn+1) được gọi là p1. Thay tn+1 và giá trị gần đúng của x vào phương trình vi phân cung cấp một giá trị gần đúng cho đạo hàm x Dưới đây là các công thức có liên quan tn+1 = tn + h k1 = f(tn , xn) p1 = xn + k1 h k2 = f(tn+1 , p1) Mặc dù cả hai phương pháp Euler và Euler đã sửa đổi đều rất dễ hiểu, nhưng cả hai phương pháp này đều không thực hiện tốt công việc xấp xỉ giải pháp chính xác cho một vấn đề. Để có kết quả tốt hơn, chúng ta thường phải áp dụng các phương pháp phức tạp hơn. Một phương pháp thường tạo ra kết quả khá tốt là phương pháp Runge-Kutta. Giống như cả hai phương pháp Euler và Euler đã sửa đổi, phương pháp này sử dụng các điểm xn đã được tính trước đó kết hợp với thông tin từ hàm f(t,x(t)) để tính các điểm tiếp theo xn+1. Để làm điều này, Runge-Kutta sử dụng một bộ công thức phức tạp hơn, như được hiển thị ở đây tn+1 = tn + h k1 = f(tn , xn) k2 = f(tn + h/2 , xn + k1 h/2 ) k3 = f(tn + h/2 , xn + k2 h/2 ) k4 = f(tn + h , xn + k3 h) Đây là một vấn đề cụ thể mà chúng ta sẽ làm việc với nhiệm vụ này Viết chương trình sử dụng phương pháp Runge-Kutta để xây dựng dãy các điểm nghiệm gần đúng (tn , xn) bắt đầu từ (t0 , x0) = (0 , 1/2) và kết thúc tại t = 1. 0. Cho phép người dùng nhập số bước N cần thực hiện. N bước tương ứng với giá trị h = 1/N. Sử dụng giá trị đó của h để chương trình của bạn tính toán danh sách các ước tính cho x Cuối cùng, yêu cầu chương trình của bạn tạo ra một biểu đồ các điểm ước tính cùng với một đường cong cho giải pháp thực tế. Giải pháp thực tế cho phương trình vi phân này là Đồ thị đường cong trơn là gì?Đường cong trơn là một đường cong có chức năng trơn, trong đó từ "đường cong" được diễn giải trong ngữ cảnh hình học giải tích. Cụ thể, đường cong trơn là ánh xạ liên tục từ không gian một chiều sang . không gian chiều mà trên tập xác định của nó có các đạo hàm liên tục theo thứ tự mong muốn .
Làm cách nào để làm mịn dữ liệu trong gấu trúc?Để làm cho dữ liệu chuỗi thời gian mượt mà hơn trong Pandas, chúng ta có thể sử dụng các hàm cửa sổ có trọng số theo cấp số nhân và tính trung bình theo trọng số theo cấp số nhân . |