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

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 plt
0 vào hộp tìm kiếm

Nhấp vào hộp kiểm bên cạnh

import matplotlib.pyplot as plt
0 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 plt
2, phương thức này vẽ một tập hợp các điểm dữ liệu.
import matplotlib.pyplot as plt
2 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ố 8

Lệnh

import matplotlib.pyplot as plt
2 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 plt
0

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àngyblackkwhitew

Dưới đây là bảng một số kiểu cốt truyện có sẵn

stylecodeline-đường chấm chấm. điểm. hình tròn vuông

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 plt
1

Phương thức

import matplotlib.pyplot as plt
5 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 plt
3

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 plt
4

Đ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 plt
5

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 plt
2 với chuỗi định dạng là
import matplotlib.pyplot as plt
7, 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ình

Phươ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

[tn+1], được gọi là k2. Phương pháp Euler đã sửa đổi sau đó lấy giá trị trung bình của đạo hàm này và k1 = x
[tn], sử dụng giá trị đó làm giá trị gần đúng cho độ dốc bí ẩn, sau đó tính toán ước tính tốt hơn cho xn+1.

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 .

Chủ Đề