1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo bài tập lớn vật lý 1 ph1003 xác Định quỹ Đạo chuyển Động ném xiên trong trọng trường có lực cản môi trường với python

40 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 40
Dung lượng 905,78 KB

Nội dung

16 4.3 Mô phỏng quỹ đạo chuyển động ném xiên khi chạy chương trình Python 25 4.4 Flowchart mô tả thuật toán phân tích bài toán bằng model GPT từ OpenAI 26 4.5 Màn hình giao diện https://

Trang 1

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC ỨNG DỤNG

Trang 2

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC ỨNG DỤNG

Trang 3

Danh sách thành viên

1 2413025 Văn Huy Sơn Tổng hợp, Latex, Python, .

2 2410116 Nguyễn Ngọc Vân Anh Cơ sở lý thuyết

Trang 4

Nhận xét của giáo viên hướng dẫn

Trang 5

BTL Vật lý 1 - PH1003 L38 - Nhóm 03

Lời cảm ơn

Để hoàn thành bài tập lớn là kết quả của sự hợp tác và không ngừng cố gắng của cácthành viên trong nhóm, cùng với đó là cả sự hỗ trợ rất lớn đến từ giảng viên là cô NguyễnThị Minh Hương và thầy Nguyễn Hoàng Giang Vì thế, nhóm chúng em muốn gửi lờicảm ơn chân thành đến cô Nguyễn Thị Minh Hương và thầy Nguyễn Hoàng Giang vì đã

hỗ trợ chúng em để nhóm có thể đạt được thành quả này

Dù vậy, đây là một chủ đề hoàn toàn mới mà lần đầu nhóm chúng em được tiếp xúc nên

sẽ không tránh khỏi những thiếu sót Vì thế, nhóm chúng em xin được nhận góp ý từ côHương và thầy Giang cùng mọi người để chúng em có thể hoàn thiện thêm Chúc cô vàmọi người có trải nghiệm tốt

Chúng em xin chân thành cảm ơn!

Trang 6

MỤC LỤC

LỜI CẢM ƠN 1

DANH SÁCH HÌNH ẢNH 4

PHỤ LỤC CÁC HÀM SYMPY 5

GIỚI THIỆU 6

1 MỞ ĐẦU 7 1.1 Đề tài 7

1.2 Yêu cầu 7

1.3 Điều kiện 7

1.4 Nhiệm vụ 7

1.5 Tài liệu tham khảo 8

1.6 Tổng kết 8

2 CƠ SỞ LÝ THUYẾT 9 2.1 Vị trí của chất điểm 9

2.1.1 Vector vị trí 9

2.1.2 Phương trình chuyển động 9

2.1.3 Quỹ đạo và phương trình quỹ đạo 10

2.2 Định luật II Newton 10

2.3 Vector vận tốc tức thời 10

2.4 Vector gia tốc tức thời 11

2.5 Phương trình vi phân 11

3 PHƯƠNG PHÁP GIẢI BÀI TOÁN 12 3.1 Đại lượng sử dụng 12

3.2 Giải phương trình 13

Trang 7

BTL Vật lý 1 - PH1003 L38 - Nhóm 03

4 MÔ PHỎNG QUỸ ĐẠO NÉM XIÊN BẰNG PYTHON 15

4.1 Giới thiệu về Python 15

4.2 Mô tả thuật toán giải và mô phỏng bài toán: 16

4.3 Sơ đồ khối mô tả thuật toán: 16

4.4 Đoạn mã Python hoàn chỉnh 17

4.5 Kết quả mô phỏng 25

4.6 Sử dụng mô hình GPT từ OpenAI để phân tích và lấy liệu từ bài toán 26

4.6.1 Đặt vấn đề và hướng giải pháp 26

4.6.2 Sơ đồ khối mô phỏng thuật toán 26

4.6.3 Triển khai 27

4.6.4 Lấy API key từ OpenAI 29

5 ỨNG DỤNG TRONG THỰC TẾ 31 5.1 Ứng dụng 1 31

5.2 Ứng dụng 2 33

6 TỔNG KẾT 34 6.1 Kết luận 34

6.2 Kiến thức 35

6.3 Hạn chế 35

6.4 Tài liệu tham khảo 36

Trang 8

DANH SÁCH HÌNH ẢNH

2.1 Tọa độ của M trong không gian 9

3.1 Trọng lực làm quả táo rơi xuống đất 12

3.2 Phân tích chuyển động ném xiên của chất điểm có khối lượng m trong trọng trường có lực cản môi trường 13

4.1 Hình ảnh minh họa ngôn ngữ lập trình Python 15

4.2 Flowchart thuật toán giải và mô phỏng thuật toán 16

4.3 Mô phỏng quỹ đạo chuyển động ném xiên khi chạy chương trình Python 25 4.4 Flowchart mô tả thuật toán phân tích bài toán bằng model GPT từ OpenAI 26 4.5 Màn hình giao diện https://platform.openai.com/ 30

4.6 Cửa sổ tạo API key 30

5.1 Nhập bài toán vào hộp thoại để AI có thể phân tích số liệu 31

5.2 Quỹ đạo chuyển động của quả bóng trong hệ trục Oxy 32

5.3 Quỹ đạo ném của 6 vận động viên tại thời điểm t = 5s 33

Trang 9

PHỤ LỤC CÁC HÀM SYMPY

1 # sympy.symbols

2 # Tạo các biến biểu tượng

3 m, h, g, v0, alpha, t = sp.symbols('m h g v0 alpha t')

14 # Tạo phương trình biểu tượng cho chuyển động

15 eq_x = sp.Eq(m * sp.Derivative(vx, t), -h * vx)

16

17 # sympy.dsolve

18 # Giải phương trình vi phân với điều kiện ban đầu

19 sol_x = sp.dsolve(eq_x, ics={x.subs(t, 0): 0,\dots})

20

21 # sympy.lambdify

22 # Chuyển lời giải thành các hàm số cho tính toán sau này

23 x_t = sp.lambdify((t, m, h, v0, alpha, g), sol_x.rhs, 'numpy')

Trang 10

GIỚI THIỆU

Khái quát về đề tài

Bài toán chuyển động vật ném xiên là bài toán được ứng dụng cao, thường gặp nhiềutrong lĩnh vực như thể thao như: ném tạ, bóng chày, bắn súng, đẩy tạ, ném lao, Khimột vật bất kỳ sẽ chịu tác dụng của trọng lực (lực hút của Trái Đất, hay còn gọi là lựchút trọng trường) Chính nhờ lực này mọi thứ trên Trái đất không bị ở trạng thái lơ lửng.Trong chuyển động ném xiên cũng thế, lực này đã khiến một vật khi ném xiên: ban đầu

sẽ đi lên cao hơn vị trí ném, nhưng dần dần sẽ rơi xuống và chạm đất Chính vì thế, việctìm ra phương thức giải đáp vấn đề xoay quanh về chuyển động ném xiên sẽ giúp hiểu rõhơn về chuyển động ném xiên trong trong trọng trường có lực cản môi trường cũng nhưcách thức ứng dụng phần mềm Python để mô tả quỹ đạo chuyển động của chúng

Đối tượng mục tiêu đề tài

Báo cáo này tập trung vào việc xác định quỹ đạo chuyển động ném xiên trong trọngtrường có lực cản môi trường bằng cách sử dụng công cụ symbolic trong Matlab vàPython để giải phương trình chuyển động, nhằm mô phỏng và vẽ quỹ đạo chất điểm vớicác góc ném khác nhau Đồng thời, báo cáo cũng trình bày ứng dụng của phương phápnày trong việc mô phỏng thực tế

Mục tiêu của báo cáo là:

• Giúp người đọc hiểu rõ cách tiếp cận vật lý và các kiến thức liên quan đến phươngtrình chuyển động trong trọng trường có lực cản

• Xài công cụ symbolic để giải phương trình vi phân và tìm hiểu thuật toán để môphỏng bài toán quỹ đạo chuyển động ném xiên trong Matlab hoặc Python

• Ứng dụng mô phỏng một số bài toán trong thực tế

Trang 11

x0= y0= 0, v0x= v0cos(α), v0y= v0sin(α)

Bài tập này yêu cầu sinh viên sử dụng Matlab hoặc Python để giải phương trìnhchuyển động trên, tìm toán quỹ đạo và vẽ đồ thị quỹ đạo thay đổi phụ thuộc vào góc α

1.3 Điều kiện

1 Sinh viên cần có kiến thức về lập trình cơ bản trong MATLAB hoặc Python

2 Tìm hiểu các lệnh Matlab hoặc Python liên quan symbolic và đồ họa

1.4 Nhiệm vụ

Xây dựng chương trình Matlab hoặc Python:

Trang 12

BTL Vật lý 1 - PH1003 L38 - Nhóm 03

1 Nhập các giá trị m, h, v0, α, t (thời gian bay)

2 Thiết lập các phương trình vi phân ứng với x(t) và y(t) Sử dụng các lệnh symbolic

để giải hệ phương trình

3 Vẽ trên cùng một đồ thị quỹ đạo của chất điểm với các góc alpha khác nhau α (15,

30, 45, 60, 75), mỗi đồ thị được định dạng khác nhau (màu sắc/nét vẽ)

4 Sử dụng biểu mẫu trình bày BTL theo mẫu tại biểu mẫu Luận văn, tham khảo theolink:

(https://sim.edu.vn/File/Bieumau/BM_DH_So-tay-huong-dan-LVTN-DH.pdf)

Chú ý: Sinh viên có thể dùng các cách tiếp cận khác

1.5 Tài liệu tham khảo

1 A L Garcia and C Penland, MATLAB Projects for Scientists and Engineers,

Pren-tice Hall, Upper Saddle River, NJ, 1996 http://www.algarcia.org/fishbane/fishbane.html

2 https://lucydot.github.io/python_novice/

3 https://lucydot.github.io/python_novice/14-visualising-data/index.html

1.6 Tổng kết

Như vậy, ta sẽ tiến hành lập phương trình vi phân tương ứng với x(t) và y(t) dựa trên

cơ sở lý thuyết, sau đó sử dụng Python để tiến hành giải hệ phương trình bằng các hàm

symbolicvà vẽ đồ thị quỹ đạo cho các góc α khác nhau trong đó mỗi quỹ đạo có địnhdạng riêng biệt

Trang 13

Chương 2

CƠ SỞ LÝ THUYẾT

2.1 Vị trí của chất điểm

2.1.1 Vector vị trí

[1] Ta có hệ quy chiếu của một hệ trục tọa độ Descartes gồm 3 trục đôi một vuông

góc với nhau (Ox, Oy, Oz) Vị trí M trong không gian được xác định bởi thành phần củavecto vị trí−OM→=⃗r(x, y, z) (trong đó r là vecto bán kính từ gốc tọa độ O đến vị trí M)

Nguồn: Vật lý đại cương A1

Hình 2.1: Tọa độ của M trong không gian

Trang 14

BTL Vật lý 1 - PH1003 L38 - Nhóm 03

2.1.3 Quỹ đạo và phương trình quỹ đạo

[1] Quỹ đạo là dường mà chất điểm M vạch nên trong không gian suốt quá trình

chuyển động Phương trình quỹ đạo là phương trình biểu diễn mối liên hệ giữa các tọa

độ không gian của chất điểm

2

+ dydt

2

+ dzdt

2

(2.6)

Trang 15

BTL Vật lý 1 - PH1003 L38 - Nhóm 03

Vector vận tốc⃗v là đạo hàm của vector vị trí⃗x theo thời gian t, gốc đặt tại điểm chuyểnđộng, phương tiếp tuyến với quỹ đạo tại điểm đó, chiều là chiều chuyển động và có độlớn là v

2.4 Vector gia tốc tức thời

[1] Vector gia tốc tức thời biểu diễn cho sự biến đổi giới của vector vận tốc tại mỗi

thời điểm, là giới hạn của tỷ số ∆v

[4] Phương trình vi phân là phương trình toán học nhằm biểu diễn mối quan hệ giữa

một hàm chưa được biết (một hoặc nhiều biến) với đạo hàm của nó (có bậc khác nhau).

Ví dụ: một phương trình vi phân đơn giản

f′(x) = d f(x)

Chú ý trong phương trình ví dụ trên, nếu f (x) biểu diễn cho vận tốc của một vật thì

f′(x) chính là gia tốc của vật đó

Điều này cũng có thể được lấy ví dụ rõ trong cơ học cổ điển Cụ thể là Định luật

Newton về chuyển động cho phép xác định vị trí của một vật dựa vào vận tốc, gia tốc,

và một số lực tác động được biểu diễn dưới dạng hàm sai phân theo thời gian

Trang 16

Chương 3

PHƯƠNG PHÁP GIẢI BÀI TOÁN

3.1 Đại lượng sử dụng

Khi vật chuyển động trong môi trường có lực cản, có hai lực chính tác dụng lên vật:

• Trọng lực ⃗G: Lực này hướng thẳng đứng xuống dưới và có độ lớn:

với m là khối lượng của vật và g là gia tốc trọng trường có độ lớn bằng 9.81m2/s

• Lực cản của không khí ⃗Fc: Lực này phụ thuộc vào vận tốc của vật và thường được

mô tả dưới dạng:

Fc = −h⃗v (3.2)với h là hệ số cản và ⃗v là vận tốc của vật Lực cản có hướng ngược với vận tốc

Nguồn: https://monkey.edu.vn/ba-me-can-biet/giao-duc/kien-thuc-co-ban/luc-ke-la-gi

Hình 3.1: Trọng lực làm quả táo rơi xuống đất

Trang 17

• ⃗g là gia tốc trọng trường.

• h là hệ số lực cản

Đầu tiên, ta chọn hệ trục tọa độ là hệ trục tọa độ Descartes Oxy trong mặt phẳngchuyển động của vật:

• Gốc tọa độ O tại vị trí ban đầu của vật

• Trục hoành Ox cùng chiều với chuyển động theo phương ngang

• Trục tung Oy có phương thẳng đứng hướng từ dưới lên trên

Nguồn: Tự vẽ bằng công cụ

Hình 3.2: Phân tích chuyển động ném xiên của chất điểm có khối lượng m trong trọng trường có lực cản môi trường

Ta phân tích chuyển động theo hai phương trên trục Ox và Oy:

Trang 18

Nhận xét: Mỗi phương trình trong hệ trên đều là phương trình vi phân bậc hai tuyến

tính thuần nhất, ta có thể giải chính xác sử dụng các phương pháp như biến đổi Laplace

hay dùng công thức nghiệm chuẩn Nhưng ta sẽ giải hệ phương trình vi phân trên sử

dụng các hàm symbolic trong Python ở chương sau để tận dụng sức mạnh tính toán của

máy tính

Khi đã giải được hệ và tìm được biểu thức cho x và y theo thời gian, ta có thể dễ dàng

vẽ được đồ thị quỹ đạo của vật bằng Python dưới sự hỗ trợ của thư viện Matplotlib.

Trang 19

Chương 4

MÔ PHỎNG QUỸ ĐẠO NÉM XIÊN

BẰNG PYTHON

4.1 Giới thiệu về Python

[5] [6] Python là ngôn ngữ lập trình bậc cao được Guido van Rossum tạo ra vào năm

1991 và đã trở thành một trong những ngôn ngữ phổ biến và được yêu thích nhất

Python có nhiều ưu điểm nổi bật như dễ học, dễ đọc; đa nền tảng; thư viện phongphú, cộng đồng lớn mạnh; cú pháp đa dạng; mã nguồn mở, Với nhiều ưu điểm nhưvậy, Python được ứng dụng rất nhiều trong các lĩnh vực như: giáo dục, khoa học dữ liệu,phân tích dữ liệu, trí tuệ nhân tạo (AI), phát triển web, trò chơi, tự động hóa, IoT,

Đối với đề tài này, ta sẽ sử dụng Python cùng thư viện numpy và sympy [7] để hỗ trợ giải phương trình tung độ và hoành độ và thư viện mat plotlib [8] để thực hiện mô phỏng

chuyển động ném xiên trong không gian

Nguồn: https://ciracollege.com/2020/11/06/why-python-programming-is-the-future/

Hình 4.1: Hình ảnh minh họa ngôn ngữ lập trình Python

Trang 20

BTL Vật lý 1 - PH1003 L38 - Nhóm 03

4.2 Mô tả thuật toán giải và mô phỏng bài toán:

Dựa trên các hàm của thư viện sympy:

1 Khởi tạo và khai báo các biến và ký hiệu

2 Xác định các thành phần của vận tốc

3 Viết phương trình chuyển động

4 Giải phương trình vi phân

5 Biểu diễn kết quả giải dưới dạng hàm số

6 Biểu diễn các hàm số dưới dạng mảng numpy

7 Kết thúc giải phương trình

8 Nhập input và tiến hành mô phỏng

4.3 Sơ đồ khối mô tả thuật toán:

Hình 4.2: Flowchart thuật toán giải và mô phỏng thuật toán

Trang 21

BTL Vật lý 1 - PH1003 L38 - Nhóm 03

4.4 Đoạn mã Python hoàn chỉnh

Dưới đây là đoạn mã Python hoàn chỉnh cho chương trình mô phỏng quỹ đạo chuyểnđộng ném xiên trong trọng trường có lực cản môi trường:

1 import sympy as sp

2 import numpy as np

3 import matplotlib.pyplot as plt

4 import tkinter as tk

5 from tkinter import ttk

6 from matplotlib.figure import Figure

7 from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

8 import time

9 import threading

10

11 # Khai báo biến

12 m, h, g, v0, alpha, t = sp.symbols('m h g v0 alpha t')

20 eq_x = sp.Eq(m * sp.Derivative(vx, t), -h * vx)

21 eq_y = sp.Eq(m * sp.Derivative(vy, t), -m * g - h * vy)

27 # Chuyển lời giải về dạng hàm số: (x,y)(t, m, h, v0, alpha, g)

28 x_t = sp.lambdify((t, m, h, v0, alpha, g), sol_x.rhs, 'numpy')

29 y_t = sp.lambdify((t, m, h, v0, alpha, g), sol_y.rhs, 'numpy')

Trang 22

41 colors = ["blue", "red", "green", "purple", "orange", "brown",

"pink", "gray", "olive", "cyan"]

,→

42

43 class ProjectileMotionApp:

44 def init (self, root):

45 self.root = root

46 self.root.title("Mô phỏng chuyển động ném xiên")

47 self.plots = [None]

48

49 # Biến điều khiển animation

50 self.is_animating = False

51 self.animation_thread = None

52

53 # Frame chính

54 self.main_frame = ttk.Frame(root, padding="10")

55 self.main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E,

tk.N, tk.S))

,→

56

57 # Input frame

58 input_frame = ttk.LabelFrame(self.main_frame, text="Thông

số đầu vào", padding="5")

63 self.m_var = tk.StringVar(value=f"{m_val}")

64 ttk.Spinbox(input_frame, textvariable=self.m_var, from_=0,

to=100, increment=1, width=10).grid(row=0, column=1,padx=5)

68 self.h_var = tk.StringVar(value=f"{h_val}")

69 ttk.Spinbox(input_frame, from_=0.01, to=2, increment=0.1,

textvariable=self.h_var, width=10).grid(row=0,column=3, padx=5)

,→

,→

70

71 # Vận tốc ban đầu

Trang 23

BTL Vật lý 1 - PH1003 L38 - Nhóm 03

72 ttk.Label(input_frame, text="Vận tốc ban đầu

(m/s):").grid(row=0, column=4, padx=5)

,→

73 self.v0_var = tk.StringVar(value=f"{v0_val}")

74 ttk.Spinbox(input_frame, textvariable=self.v0_var,

increment=1, from_=0, to=100, width=20).grid(row=0,column=5, padx=5)

,→

,→

75

76 # Góc alpha (slider)

77 alpha_frame = ttk.LabelFrame(self.main_frame)

78 alpha_frame.grid(row=1, column=0, pady=5, padx=5)

79 self.alpha_var = tk.StringVar(value=f"{angle_val}")

80 ttk.Label(alpha_frame, text="Góc alpha (độ):").grid(row=0,

column=0, padx=5)

,→

81 ttk.Spinbox(alpha_frame, from_=0, to=90, increment=1,

textvariable=self.alpha_var, width=10).grid(row=0,column=1, padx=5)

,→

,→

82

83 self.alpha_scale = ttk.Scale(self.main_frame, from_=0,

to=90, variable=self.alpha_var, orient=tk.HORIZONTAL)

86 # Thời gian (slider)

87 t_frame = ttk.LabelFrame(self.main_frame)

88 t_frame.grid(row=3, column=0, pady=5, padx=5)

89 self.t_var = tk.StringVar(value=f"{t_val}")

90 ttk.Label(t_frame, text="Thời gian (giây):").grid(row=0,

column=0, padx=5)

,→

91 ttk.Spinbox(t_frame, from_=0, to=60, increment=1,

textvariable=self.t_var, width=10).grid(row=0,column=1, padx=5)

,→

,→

92 self.t_scale = ttk.Scale(self.main_frame, from_=0, to=60,

variable=self.t_var, orient=tk.HORIZONTAL)

96 control_frame = ttk.Frame(self.main_frame)

97 control_frame.grid(row=5, column=0, pady=10)

98

99 self.start_button = ttk.Button(control_frame, text="Bắt

đầu", command=self.start_animation)

,→

100 self.start_button.grid(row=0, column=0, padx=5)

101

102 self.stop_button = ttk.Button(control_frame, text="Dừng",

command=self.stop_animation)

,→

Ngày đăng: 01/12/2024, 20:06

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w