Giả sử đã có hàm truyền Laplace W(p) (của khâu bậc ba hoặc lớn hơn chẳng hạn). Biết tín hiệu vào Uvao=f(t) và điều kiện đầu. Mình muốn tìm đầu ra Y(t) (0<t<T) thì giải thuật thế nào nhỉ nếu tự viết bằng C? (Không dùng MATLAB và các phần mềm tương tự)
Thông báo
Collapse
No announcement yet.
Giải pt vi phân bằng phương pháp số
Collapse
X
-
Những phương pháp số dùng để giải phương trình vi phân có thể tham khảo ở trang sau:
http://mathworld.wolfram.com/Runge-KuttaMethod.html
Phương pháp đơn giản hơn là phương pháp Euler:
http://www.ugrad.math.ubc.ca/coursed...eqs/euler.html
Muốn giải phương trình vi phân áp dụng phương pháp số, thường viết thành dạng:
x_dot = f(x,u,t) (bậc cao thì hạ bậc bằng cách dùng mô hình không gian trạng thái, định nghĩa véc tơ trạng thái x)
trong đó: x là tín hiệu ra, u là tín hiệu vào và t là thời gian. Nếu dùng mô hình không gian trạng thái thì có dạng sau:
x_dot = A*x + Bu
y = C*x + Du
Phương pháp Euler đơn giản:
x_dot(k) = f(x,u,t)(k);
x(k+1) = x(k) + h*x_dot(k);
Trong chương trình phải định nghĩa hàm số, tức là định nghĩa phương trình vi phân, ví dụ dùng hàm số (function) của MATLAB, hoặc Subroutine của Fortran, hoặc dùng Class của Visual C++...
Sau đó đặt điều kiện đầu (initial conditions) cho biến số, cho tín hiệu vào, và thời gian (cũng như những input arguments khác) và áp dụng công thức sau:
x(0) = điều kiện ban đầu
u = tín hiệu vào
t = thời gian
h = chu kỳ lấy mẫu
// ví dụ dùng phương pháp Euler đơn giản:
x_dot = f(x,u,t);
x += h*x_dot;
Áp dụng các phương pháp tích phân số khác cũng tương tự như vậy.
Có một cuốn sách rất có ích cho lập trình là cuốn Numerical Recipes in C (C++) (có cả bản in Fortran nữa) có bản điện tử miễn phí trên Internet ở trang sau:
http://www.library.cornell.edu/nr/bookcpdf.html
Chúc thành công.
H.A.Last edited by HaiAu2005; 25-03-2006, 18:37.
Comment
-
Cám ơn các bạn. Về nguyên tắc thì đúng là như vậy. Vấn đề là ở chỗ với các khâu bậc cao (thậm chí chỉ cần bậc 3 thôi) nếu làm như trên thì lập trình sẽ rất phức tạp. Không biết MATLAB nó làm thế nào mà hệ phức tạp như thế nào thì nó cũng giải được
Comment
-
Chính là trong cuốn sách tính toán số mà anh Hùng giới thiệu, nó chứa các thuật toán tính toán đó. Cuốn sách dó hơi dày, cho nên có thể bạn sẽ gặp khó khăn khi đọc, nhưng mà đọc trong đó bạn sẽ thấy chi tiết các thuật toán tính toán.
Chúc vui.Falleaf
Công ty TNHH Thương mại và Giao nhận R&P
58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
mail@falleaf.net - VP: (04) 36408561 - (08) 38119870
Comment
-
Tôi đã giải thích rồi, nhưng có lẽ ngắn gọn quá chưa rõ, tôi xin giải thích thêm. Đối với những phương trình vi phân bậc cao (nth-order) thì bạn nên dùng mô hình không gian trạng thái (state space model) để hạ bậc trở thành phương trình vi phần bậc 1 thôi (về hình thức). Phương trình bậc n thì bạn phải làm tích phân n lần, tương đương với việc dùng mô hình không gian trạng thái là định nghĩa véc tơ trạng thái (state vector) có n phần tử. Xin lấy ví dụ phương trình bậc 3 minh họa:
a*yddd + b*ydd + c*yd + d*y = k*u (1) (d = dot, tức là biểu diễn đạo hàm bậc 1, dd đạo hàm bậc 2, ddd đạo hàm bậc 3).
hoặc dạng tương đương là:
yddd = -d/a*y -c/a*yd - b/a*ydd + k/a*u (2)
trong đó a, b, c, d, k là các tham số (parameters, hoặc cũng có thể gọi là coefficients), y và u là tín hiệu ra và tín hiệu vào. Nếu bạn định nghĩa véc tơ trạng thái x = transpose of [x1 x2 x3] = transpose of [y yd ydd] (véc tơ cột có ba phần tử, tương ứng với số bậc của phương trình) thì phương trình (1) trên trở thành mô hình không gian trạng thái như sau:
xd = Ax + Bu (3) (phương trình trạng thái, state)
y = Cx + Du (4) (phương trình quan sát, observation)
trong đó x là véc tơ trạng thái được định nghĩa ở trên, xd là đạo hàm của x, tức xd = transpose of [x1d x2d x3d] = transpose of [yd ydd yddd], A, B, C, D là các ma trận tham số, u là véc tơ tín hiệu vào, y là tín hiệu ra (trong trường hợp ví dụ chỉ có một tín hiệu vào u và một tín hiệu ra y)
A = [0 1 0; 0 0 1; -d/a -c/d -b/a] (viết theo lệnh MATLAB, tức là ma trận 3*3 có ba hàng ba cột)
B = transpose of [0 0 -k/a]
u = u
C = [1 0 0] (vì y = x1)
D = 0 (trường hợp này D = 0, D khác không khi vế phải của (1) xuất hiện đạo hàm bậc cao của u).
Qua ví dụ này chúng ta thấy rằng: từ phương trình bậc cao chúng ta áp dụng mô hình không gian trạng thái chúng ta có thể hạ bậc xuống thành bậc 1 và khi áp dụng trong lập trình, việc viết codes sẽ đơn giản hơn nhiều. Trong các ngôn ngữ lập trình chúng ta đều có thể sử dụng việc khai biến mảng (array) để tính toán được. Bạn viết lại những phương trình trên ra giấy theo ký hiệu toán học thông thường sẽ rõ hơn. Xin tham khảo sách về mô hình không gian trạng thái thì bạn sẽ hiểu rõ hơn và sẽ áp dụng được vào trong việc lập trình.
Xin nói thêm: MATLAB (MATrix LABoratory) là chương trình ưu tiên tính toán bằng ma trận, do đó việc giải phương trình vi phần dùng mô hình không gian trạng thái bằng MATLAB không khó khăn lắm. Các chương trình đi kèm MATLAB cũng rất tiện lợn. Chương trình đi kèm với MATLAB là Simulink cũng có thể dùng để giải phương trình vi phân được, Simulink là chương trình lập trình sử dụng các khối (blocks), dạng giống sơ đồ khối trong điều khiển tự động đó. Sử dụng Simulink để giải phương trình vi phân cũng khá đơn giản vì trong Simulink có các khối như Integrator block, Transfer Function block... có thể dùng cho mô hình (phương trình vi phân được. Khi chạy một mô hình Simulink các phương pháp tích phân số như pp Euler, pp Adams, pp Runge-Kutta .v.v... đã có sẵn rồi, chỉ việc lựa chọn phương pháp vi phân số. Trường hợp mà trong thư viện Simulink bạn không thể tìm được khối nào phù hợp cho bài toán của bạn thì bạn có thể dùng S-function block (user-definable block), có thể nói nôm na, đây là một dạng khối mở của Simulink cho người sử dụng có thể định nghĩa (hoặc thêm) khối (block) của mình vào trong thư viện Simulink. S-function block của Simulink cũng giống như lệnh function của MATLAB, Subroutine của Fortran và Class của C++.
H.A.
Comment
-
giải phương trình và hệ phương trình vi phân trong matlab
Em chào anh H.A và các bạn
Hiện tại em đang gặp bài toán phải giải hệ phương trình vi phân cấp hai có sáu ẩn số .Thực sự đây là điều khó khăn đối với em.
anh H.A và các bạn có cách nào mà có thể giải hệ phương trình vi phân bậc cao có nhiều ẩn số không ạ ?
liệu mình có thể giải trên mô hình simulink của matlab không ? nếu có ví dụ thì hay.
mong được sự giúp đỡ.
em cảm ơn.
Comment
Bài viết mới nhất
Collapse
-
bởi chinhnguyen9
Điến âp vào 24V;Điên áp ra 30V;Dòng điện ra 10A
Trên nền tảng mạch Boost thay đổi như sau: cự âm tụ lọc C không nối mas mà nối vào Vc +24V
Mach phản hồi tao điê áp trên tụ lọc này ổn đinh ở 6V
Kết quả:
· Điện áp ra =24V+ 6V=30V
· Công...-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 19:33 -
-
bởi chinhnguyen92. Các yếu tố để dòng điện đầu ra không bị "thiếu"
Dòng điện đầu ra bị "thiếu" có thể hiểu là không đủ 10A theo yêu cầu hoặc bị sụt áp khi tải thay đổi. Để đảm bảo điều này, bạn cần xem xét các yếu tố sau:
a. Khả năng chịu dòng của cuộn cảm- Dòng bão hòa (I_sat): Như
-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 19:06 -
bởi chinhnguyen9
1. Tính toán cuộn cảm (Inductor)
Để tính giá trị cuộn cảm, chúng ta cần thực hiện các bước sau:
a. Xác định chu kỳ nhiệm vụ (Duty Cycle - D)
Với mạch tăng áp lý tưởng, chu kỳ nhiệm vụ được tính theo công thức :
D=1-VinVout=1-24V30V=0.2
Vậy D = 0.2 (20%)
b....-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 19:03 -
-
bởi chinhnguyen9Công thức
Gain (dB) = 20 × log₁₀(A)
Thí dụ 1; 60dB
log₁₀(A)=60/20=3
⇒ A=V_out / V_in = 10³ = 1.000
Thí dụ 2; 100dB
log₁₀(A)=100/20=5
⇒ A=V_out / V_in = 105 = 100.000
Tí dụ 3; LM 358
Large Signal Open Loop Voltage Gain AVOL V/mV RL = 2.0...-
Channel: Hướng dẫn sử dụng diễn đàn
19-03-2026, 08:44 -
-
Trả lời cho Mạch 3s bị giảm điện áp đầu rabởi minhtri0405chả biết bạn xử lý được chưa , kích sạc hoặc điện áp > điện áp khối pin vào 2 chân P - P+ , nhiều mạch phải yêu cầu có kích lần đầu sau đó mới chạy...
-
Channel: Điện tử dành cho người mới bắt đầu
18-03-2026, 10:01 -
-
bởi minhtri0405đây có phải là 1 cách để test mosfet xịn hay dỏm khi mua đồ tàu không nhỉ , vì ko thể đập ra để coi lõi rồi trả hàng được....
-
Channel: Tâm tình dân kỹ thuật
18-03-2026, 09:57 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
16-03-2026, 18:05 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
16-03-2026, 18:04 -

Comment