Lời nói đầu Cùng với sự phát triển mạnh mẽ của tin học,để giải các phơng trình vi phân chuyển động bằng máy tính, ngời ta thờng dùng các phơng pháp số chẳng hạn nh phơng pháp Euler, phơn
Trang 1Lời nói đầu
Cùng với sự phát triển mạnh mẽ của tin học,để giải các phơng trình vi phân chuyển động bằng máy tính, ngời ta thờng dùng các phơng pháp số chẳng hạn nh phơng pháp Euler, phơng pháp Runge-Kutta Lý do sử dụng phơng pháp số bởi vì các phơng trình chuyển động ít khi có dạng tuyến tính, mà thờng có dạng phi tuyến phức tạp và khó đa ra các nghiệm tổng quát ở dạng giải tích
Trong cơ học, sử dụng một số nguyên lý cơ bản ta thấy phơng trình chuyển động của 1 cơ hệ bất kì thờng là các phơng trình vi phân cấp hai.Do vậy,việc giải các ph-
ơng trình chuyển động của cơ hệ thực chất đợc đa về giải các phơng trình vi phân(PTVP)
Thông qua việc giải các PTVP ngời ta sẽ giải quyết đợc các bài toán vị trí,bài toán vận tốc,bài toán gia tốc từ đó xác định đợc vị trí,vận tốc và gia tốc của cơ hệ ở thời điểm bất kỳ
Cùng với sự phát triển mạnh mẽ của tin học,khi ta đã có sẵn thuật giải của phơng pháp số ,việc triển khai các phơng pháp số trên máy tính ngày càng thuận tiện và nhanh chóng,do đó có nhiều phần mềm thông dụng giải phơng trình chuyển động của cơ hệ.Trong phạm vi đố án tốt nghiệp này,em xin trình bày vấn đề giải phơng trình chuyển động của cơ hệ sử dụng các công cụ phần mềm ,qua các phần mềm Matlab và DAESOL sau đó là một chơng trình do em tự viết giải hệ PTVP
thờng sử dụng thuật toán Runge-Kutta cấp 4
Do khả năng và thời gian còn nhiều hạn chế chắc chắn sẽ không tránh khỏi những thiếu sót,em mong sẽ nhận đợc sự đóng góp chân thành và nhiều ý kiến thực tiễn từ các thầy giáo và các bạn sinh viên Qua đây,em xin gửi tới thầy Đinh Văn Phong ,thầy Phan Mạnh Dần lời cám ơn chân thành vì sự giúp đỡ chỉ bảo tận tình trong suốt quá trình thực hiện đồ án tốt nghiệp để em có thể hoàn thành đồ án đúng thời hạn đợc giao
HN-8/5/2003
Trang 2I Cơ sở lý thuyết giải các phơng trình vi phân chuyển
động.
1.Đặt vấn đề.
Phơng trình chuyển động của cơ hệ thờng là các phơng trình vi phân(PTVP), do vậy việc giải các phơng trình chuyển động của cơ hệ đợc chuyển về giải các phơng trình vi phân
Đối với các cơ hệ holonom có thể dùng các toạ độ Lagrange để mô tả chuyển động của cơ hệ.Nếu ta chọn các toạ độ suy rộng này là đủ(số các toạ độ suy rộng là n, vừa đúng bằng số bậc tự do của cơ hệ ) thì từ phơng trình Lagange loại 2:
với : qi là các toạ độ suy rộng đủ
Qi là các lực suy rộng ứng với các toạ độ suy rộng qi
Nếu số toạ độ suy rộng là d, p là số toạ độ, n là số bậc tự do với p>n thì giữa các toạ độ suy rộng qi ,i=1,2 ,p sẽ có các liên kết ràng buộc:…
fj(q1,q2, ,q… p)=0 (3) j=1,2, ,s …
Trang 3có (p+s) phơng trình cho (p+s) ẩn số là qi ,i=1,2, ,p và … λj ,j=1,2, ,s.… ở dạng tổng quát đây là hệ PTVP hỗn hợp gồm các PTVP cấp hai (4) và các phơng trình đại số (3)
Việc giải PTVP thờng (ODE) và PTVP đại số (DAE) đợc trình bày cụ thể ở phần dới đây
y=y(x)
Bài toán trên còn gọi là bài toán Cauchy
Bài toán (6) có thể mở rộng cho n hệ phơng trình vi phân cấp 1:
y1’=f1(x,y1,y2, ,yn)
y2’=f2(x,y1,y2, ,yn)
(8)
yn’=fn(x,y1,y2, ,yn)
Với y1,y2, ,yn đều là các hàm số của x : yi=yi(x) i=1,2, ,n
Ta viết lại (3) nh sau:
y’i=fi(x,y1,y2, ,yn) (9)Với các điều kiện đầu:
Trang 4y(i)(x0)=yi0 i=0,1,2, ,(n-1).
Trong đó ta ký hiệu y(i) là đạo hàm cấp i của hàm số
y=y(x)
Ta chuyển hệ (13) sang hệ (8) bằng cách đa ra:
y1=y, y2=y’, y3=y”, ,yn=y(n-1)
Với các điều kiện đầu:
y1(x0)=y00, y2(x0)=y10, , yn(x0)=yn-1,0
Do đó, bài toán giải các phơng trình vi phân đợc đa về giải PTVP thờng (6)
Ngời ta thờng áp dụng 2 nhóm phơng pháp sau để giải phơng trình vi phân thờng
a.Phơng pháp chính xác:
Là phơng pháp dựa vào các tích phân trực tiếp thông qua các tích phân cơ bản tìm
ra các nghiệm ở dạng khép kín Các điều kiện đầu sẽ xác định các nghiệm riêng từ nghiệm tổng quát
b Phơng pháp gần đúng:
Trang 5Theo phơng pháp này chỉ tìm các xấp xỉ của nghiệm chính xác đợc xác định từ các
điều kiện đầu.Các phơng pháp này có u điểm là tổng quát và đợc sử dụng rộng rãi hơn.Có thể đa ra các nghiệm dới dạng các biểu thức giải tích,bảng số hay đồ thị.Ta chủ yếu tập trung vào nhóm phơng pháp này
ở nhóm phơng pháp thứ hai,ngời ta có nhiều sơ đồ thuật giải nh phơng pháp Euler,phơng pháp Runge-Kutta,các phơng pháp của Adams,phơng pháp sai phân,phơng pháp PREDICTOR-CORRECTOR
Ta xét 2 phơng pháp Euler và Runge-Kutta:
• Phơng pháp Euler.
Để tính giá trị của hàm số vi phân trong phơng trình,thay các giá trị đúng của hàm
số đó tại từng thời điểm bằng một chuỗi các xấp xỉ đợc tính nhờ các biểu thức hồi qui
Biểu thức hồi qui của phơng pháp Euler có dạng :
z0=y0
zi+1=zi+h.f(xi,zi)
h=(b-a)/N
Trong đó:
y0 là điều kiện đầu
zi là các giá trị xấp xỉ của hàm số tại bớc tích phân thứ i
Trang 6+Dạng cải tiến thứ hai
Trở lại (14) ta có thể tìm hàm D một cách đơn giản bằng cách khai triển hàm số y tại xi+1 nh là tại các điểm lân cận của xi theo khai triển Taylor và chỉ lấy một số phần tử đầu tiên :
y(xi+1)=yi+1=yi+
!2
)(' xi
y
+
!2
)('' xi
y
h2 + (15)…Trong (15) nếu ta chỉ lấy 2 phần tử đầu tiên của chuỗi sẽ thu đợc:
)(
Vì y’’=f(x,y) và trong đó ta ký hiệu f’x và f’y là các đạo hàm riêng của f theo x và y
Ta có thể làm tơng tự với các cấp cao hơn, nhng việc phải tính đạo hàm là nhợc
điểm của phơng pháp này.Phơng pháp Runge-Kutta đã khắc phục đợc nhợc điểm này
• Phơng pháp Runge-Kutta.
Phơng pháp Euler có thể tính chính xác hơn bằng cách khai triển Taylor cho nhiều phần tử.Nhng nhợc điểm của phơng pháp này là phải tính đạo hàm (đã trình bày ở trên).Để khắc phục điểm này Runge-Kutta đã đa ra phơng pháp để tìm zi+1 mà chỉ
Trang 7cần zi và giá trị của hàm số ở một vài điểm xác định khác.Hoàn toàn không phải dùng đến đạo hàm riêng của hàm số f Các phơng pháp này gọi là phơng pháp một nút nhiều điểm Tuỳ theo số điểm k mà tại đó cần tính giá trị hàm số f ta có ph-
ơng pháp k điểm
Cần phân biệt rõ các khái niệm :k nút,k điểm và cấp k
+k nút tức là để tính giá trị tại zi+1 ta cần giá trị của k nút trớc đó
+k điểm là số điểm tại đó cần tính giá trị hàm số f
+Khái niệm cấp k của phơng pháp liên quan đến các kiến thức sâu hơn về toán số.Nó đợc định nghĩa thông qua các sai số cục bộ của các xấp xỉ.Ta có thể hình dung cấp là độ chính xác của phơng pháp
Biểu thức hồi qui của phơng pháp Runge-Kutta cho r điểm có dạng:
Trang 8-Nếu p22=1 thì p21=0, α2=β21=
2
1.Đây chính là sơ đồ Eurler cải tiến dạng thứ nhất
- Nếu p22=
2
1 thì p21=
2
1, α2=β21=1.Đây chính là sơ đồ Eurler cải tiến dạng thứ hai, cấp chính xác chỉ là cấp 2
+r=3
Với 3 điểm tơng tự trên, phơng pháp chỉ đạt tối đa là cấp 3
+r=4
Phơng pháp đạt đợc tối đa là cấp 4
Trong phạm vi đồ án tốt nghiệp này, sử dụng ngôn ngữ C , áp dụng thuật toán của phơng pháp Runge-Kutta cấp 4 em viết đợc chơng trình giải PTVP thờng,em tạm gọi chơng trình của mình là ODE_RK4 Em chọn phơng pháp Runge-Kutta cấp 4
để giải vì phơng pháp này dễ điều khiển sai số và đạt độ chính xác cao, đây là một phơng pháp rất hay đợc dùng.Phơng pháp này có thể dễ dàng chuyển qua hệ phơng trình
+Các bớc giải của phơng pháp Runge-Kutta cấp 4 cho hệ PTVP nh sau:
1) Tính c1=h*f(xi,zi);
2) Tính c2=h*f(xi+
2
1h,zi+2
y’=f(x,y) (7) Trong đó:
y=[y1,y2, ,yn]T
y’=[y1’,y2’, ,yn’]T
f=[f1,f2, ,fn]T
Với y’i=fi(x,y1,y2, ,yn)
Trang 9Chú ý là trong các hệ cơ học biến độc lập x chính là biến thời gian t,còn các hàm
số y1,y2, chính là các toạ độ suy rộng của cơ hệ.…
Trong cơ học,khi sử dụng phơng trình Lagrange loại 2 để thiết lập phơng trình vi phân chuyển động:
áp dụng cơ sở lý thuyết đã trình bày ở trên ta hoàn toàn có thể hạ bậc (2) và sử dụng các phơng pháp số đã trình bày để giải phơng trình vi phân chuyển động đã thiết lập đợc
Trang 10hệ PTVP Để kiểm tra tính chính xác của chơng trình, ta sử dụng phần mềm Matlab và phần mềm DAESOL để đối chiếu, việc sử dụng Matlab và DAESOL giải hệ PTVP đợc trình bày cụ thể ở phần dới.
Có thể giải bài toán này theo 3 hớng:
Trang 11• Phơng án thứ nhất: đạo hàm 2 lần các phơng trình liên kết (3) để thu đợc
f
1 j,kl
.
q j
.
ql j=1,2, ,s (5)…Kết hợp với (4) ta có hệ (p+s) phơng trình đại số cho (p+s) ẩn số là q k và λj với k=1,2, ,p và j=1,2, s.Với các giá trị … … λj từ hệ (4) và (5) ta sử dụng ph-
ơng pháp tích phân số để tìm qk ,k=1,2, ,p từ ph… ơng trình (4).Với mỗi tập hợp các giá trị (t,q1,q2, ,q… n,q. 1, q. 2, , … q. n) khác nhau ta lại có các giá trị λ1,,
… λs khác nhau để thay vào phơng trình (4)
• Phơng án thứ 2 : sử dụng các phơng pháp trực tiếp giải hệ phơng trình vi
phân - đại số.Các phơng pháp này đang đợc các nhà toán học nghiên cứu kỹ trong mấy năm gần đây Đối với các hệ cơ học qua tính toán thử nghiệm có thể thấy sơ đồ Runge-Kutta dạng ẩn (implicit) cho các kết quả tốt
• Phơng án thứ 3 : áp dụng các thuật toán của Gear cho các “hệ cứng” Vì
thực tế các hệ phơng trình vi phân - đại số với sự xuất hiện của các phơng trình đại số, có thể coi là các hệ cứng Các thuật giải này đã đợc kiểm nghiệm tốt cho các hệ cơ học
Việc giải hệ PTVP đại số đợc thực hiện bởi phần mềm Matlab và phần mềm DAESOL (đợc trình bày cụ thể ở dới)
II.Giải phơng trình vi phân chuyển động bằng các công
cụ phần mềm.
1.Sử dụng các hàm th viện của Matlab giải PTVP chuyển động.
Matlab là chơng trình phần mềm trợ giúp cho việc tính toán và hiển thị.Các lệnh
của Matlab rất mạnh và hiệu quả, nó cho phép giải các loại hình bài toán khác nhau và đặc biệt hữu dụng cho các hệ phơng trình tuyến tính hay các bài toán ma trận Ngoài ra, Matlab có thể tích hợp với một vài ngôn ngữ quen thuộc của ngời sử dụng nh C,C++,Visual C++,Fortran
Việc giải PTVP hay các hệ PTVP trong Matlab đợc thực hiện bởi các hàm th viện
nh : ode45, ode23, ode113, ode15s, ode23s, ode23t,ode23tb
Trang 121.1 Tổng quan về các công cụ giải phơng trình vi phân thờng (ODE) có điều kiện đầu của Matlab.
F Tên của tệp tin ODE, đó là một hàm của t và y, trả về một véctơ cột Tất
cả các công cụ giải phơng trình vi phân thờng (solver – gọi tắt là công
cụ giải) đều có thể giải đợc hệ phơng trình có dạng y’ = f(t, y), hoặc khi
có ma trận khối lợng M(t, y).y’ = f(t, y) ode23s chỉ giải đợc những hệ phơng trình có M = const ode15s và ode23t có thể giải đợc các bài toán với M suy biến, phơng trinh vi phân đại số
Tspan Véctơ xác định khoảng tích phân [t0 tfinal] Để thu đợc nghiệm tại các
thời điểm xác định (có thứ tự tăng dần hoặc giảm dần theo thời gian), sử dụng véctơ tspan = [t0, t1, , tfinal]
Y0 Véctơ xác định các điều kiện ban đầu
Options Đối số tích phân tuỳ chọn đợc thiết lập bằng cách dùng hàm odeset.P1,p2 Các tham số dùng để truyền cho hàm F
T,Y Ma trận kết quả Y có số hàng bằng kích thớc véctơ T, mỗi hàng của Y
t-ơng ứng với một thời điểm cho trong véctơ T
c Mô tả
[T,Y] = solver(’F’, tspan,y0) với tspan = [t0 tfinal], tích phân hệ PTVP
y’ = f(t, y) từ thời điểm t0 đến tfinal với điều kiện đầu y0 ’F’ là một chuỗi ký tự biểu thị tên một tệp tin ODE Hàm F(t, y) phải trả về một véctơ cột Mỗi hàng của nghiệm thu đợc tơng ứng với một thời điểm cho trong véctơ T
[T,Y] = solver(’F’,tspan,y0,options), có công dụng giải bài toán nh trên nhng các tham số tích phân mặc định đợc thay bằng các giá trị thuộc tính trong options, một
đối số đợc tạo bởi hàm odeset Các thuộc tính thờng đợc sử dụng bao gồm sai số
Trang 13ơng đối RelTol (mặc định là 1e-3) và một véctơ sai số tuyệt đối AbsTol (mặc định các phần tử đều là 1e-6).
[T,Y] = solver(’F’,tspan,y0,options,p1,p2 ) cũng có công dụng giải bài toán nhtrên, các tham số p1,p2 đợc dùng để truyền cho M-file F khi nó đợc gọi Truyền vào giá trị options = [] nếu không có tuỳ chọn nào đợc thiết lập
[T,Y,TE,YE,IE] = solver(’F’,tspan,y0,options) với thuộc tính ’Events’ trong options đợc đặt là ’on’, cũng có công dụng giải bài toán nh trên, đồng thời tìm các
điểm không của các hàm của (t, y), gọi là các hàm sự kiện, đợc định nghĩa trong tệp tin ODE Tệp này phải đợc viết sao cho F(t, y, ’events’) trả về các thông tin thích hợp nhất định Cụ thể là viết một hàm:
[value, isterminal, direction] = EVENTS(t, y)
Với hàm sự kiện thứ i:
• value(i) là giá trị của hàm
• isterminal(i) = 1 nếu phép tích phân dừng tại một điểm không của hàm sự kiện này và 0 trong các trờng hợp còn lại
• direction(i) = 0 nếu tất cả các điểm không đều đợc tính (mặc định), +1 nếu chỉ tính các điểm không mà qua đó hàm sự kiện tăng, và -1 nếu chỉ tính các
điểm không mà qua đó hàm sự kiện giảm
Tơng ứng với các đầu vào, các giá trị trả về trong TE, YE, và IE lần lợt là thời điểm
mà tại đó một sự kiện xảy ra, nghiệm tại thời điểm này, và chỉ số i của hàm sự kiện
bị triệt tiêu
Nếu ta gán một hàm đầu ra cho giá trị của thuộc tính OutputFcn, công cụ giải sẽ gọi nó để tính toán ra kết quả sau mỗi bớc thời gian Bốn hàm đầu ra đợc MATLAB cung cấp là: odeplot, odephas2, odephas3, odeprint Khi đợc gọi mà không có các đối số đầu ra, các công cụ gọi hàm đầu ra mặc định odeplot để vẽ nghiệm đã tính đợc odephas2 và odephas3 tơng ứng dùng để vẽ mặt phẳng pha 2 chiều và 3 chiều odeprint hiển thị các thành phần nghiệm ra màn hình Mặc định, tất cả các thành phần của nghiệm đợc truyền cho hàm đầu ra, song bạn có thể chỉ truyền một số thành phần nhất định bằng cách cung cấp một véctơ các chỉ số cho thuộc tính OutputSel Chẳng hạn, nếu bạn gọi công cụ giải không có đối số đầu ra
và đặt giá trị của OutputSel là [1 3], công cụ sẽ vẽ các thành phần 1 và 3 của nghiệm đã tính
Trang 14Với các công cụ cứng ode15s, ode23s, ode23t, và ode23tb, ma trận Jacobian df/dy tạo nên sự tin cậy và hiệu quả trong tính toán Dùng hàm odeset đặt thuộc tính Jacobian cho @FJAC với hàm FJAC(t,y) trả về ma trận Jacobian df/dy hoặc cho
ma trận df/dy nếu Jacobian là hằng số Nếu thuộc tính Jacobian không đợc thiết lập (mặc định), df/dy đợc xấp xỉ bằng sai phân hữu hạn Đặt thuộc tính Vectorized là
’on’ nếu hàm ODE đợc viết sao cho F(t,[y1,y2, ]) trả về [F(t,y1), F(t,y2), ] Nếu df/dy là một ma trận tha, đặt cho thuộc tính JPattern mẫu tha của df/dy, nghĩa là, một ma trận tha S với S(i,j) = 1 nếu thành phần thứ i của f(t, y) phụ thuộc thành phần thứ j của y, và 0 trong trờng hợp ngợc lại
Các công cụ giải PTVP thờng đều có thể giải đợc bài toán dạng
M(t, y).y’ = f(t, y) với ma trận khối lợng M phụ thuộc cả thời gian và trạng thái (Công cụ ode23s chỉ có thể giải đợc các phơng trình với ma trận khối lợng hằng.) Nếu bài toán có ma trận khối lợng, tạo một hàm M = MASS(t,y), trả về giá trị của ma trận khối lợng Với MATLAB 5.3, dùng hàm odeset đặt thuộc tính Mass
là ’M’, ’M(t)’ hoặc ’M(t,y)’ nếu tơng ứng, tệp ODE F.m đợc viết sao cho F(t,y,’mass’) trả về một ma trận khối lợng hằng, phụ thuộc thời gian, hoặc phụ thuộc cả thời gian và trạng thái của cơ hệ Giá trị mặc định của Mass là ’none’ Còn với MATLAB 6.0, đặt thuộc tính Mass là @MASS Nếu ma trận khối lợng là hằng, nó đợc sử dụng nh một giá trị của thuộc tính Mass Bài toán với ma trận khối lợng phụ thuộc trạng thái thì khó hơn:
• Nếu ma trận khối lợng không phụ thuộc vào biến trạng thái và hàm MASS
đợc gọi với một đối số vào, t, đặt thuộc tính MstateDependence là ’none’
• Nếu ma trận khối lợng phụ thuộc ít, đặt MstateDependence là ’weak’ (mặc
định) và còn lại, đặt là ’strong’ Trong cả hai trờng hợp, hàm MASS đều đợc gọi với hai đối (t,y)
Nếu hệ gồm rất nhiều PTVP, việc khai thác tính tha của các ma trận có ý nghĩa quan trọng:
Trang 15• Với M(t, y) phụ thuộc nhiều vào trạng thái, đặt cho MvPattern một ma trận tha S với S(i,j) = 1 nếu với mọi k, thành phần (i,k) của M(t, y) phụ thuộc thành phần j của y, và 0 trong trờng hợp ngợc lại.
Nếu ma trận khối lợng M suy biến thì M(t, y) y’ = f(t, y) là một phơng trình vi phân đại số (DAE) Các DAE chỉ có nghiệm khi y0 thích hợp, đó là, nếu có một véctơ yp0 thoả mãn M(t0, y0) yp0 = f(t0, y0) Khi có ma trận khối lợng, bạn có thể dùng hàm odeset đặt thuộc tính MassSingular là ’yes’, ’no’, hoặc ’maybe’ Giá trị mặc định ’maybe’khiến công cụ giải kiểm tra xem bài toán có phải là DAE hay không Ta có thể cung cấp giá trị yp0 cho thuộc tính InitialSlope Măc định là véctơ không Nếu bài toán là một DAE, mà y0 và yp0 không phù hợp, công cụ giải coi chúng nh các xấp xỉ, thử tìm các giá trị thích hợp gần nhất, rồi giải bài toán Khi giải các DAE, sẽ rất thuận lợi khi M là một ma trận đờng chéo
Công cụ giải Loại bài toán Cấp chính xác Sử dụng
Ode45 Không cứng Trung bình (4, 5) Hầu hết, bạn nên thử công cụ
này đầu tiên
Ode23 Không cứng Thấp (2, 3) Nếu dùng sai số thô hoặc giải
các bài toán cứng vừa phải
Ode113 Không cứng Thấp đến cao Nếu dùng sai số tinh
Ode15s Cứng Thấp đến trung
bình
Nếu ode45 bị chậm do bài toán cứng, hoặc có ma trận khối lợng.Ode23s Cứng Thấp Nếu giải hệ cứng với sai số thô
và ma trận khối lợng là hằng số.Ode23t Cứngvừa phải Thấp Nếu bài toán chỉ cứng vừa phải Ode23tb Cứng Thấp Nếu giải hệ cứng với sai số thô
Trang 16để thu đợc các giá trị không đợc cung cấp trong danh sách đối của công cụ giải Các đối rỗng ở vị trí cuối cùng của lời gọi có thể bỏ qua Điều này cho phép bạn gọi các công cụ giải với các cú pháp khác nhau nh:
Trang 17∨
∨
∨
∨: công cụ giải chấp nhận các tham số trong danh sách các tuỳ chọn.
: công cụ giải không chấp nhận các tham số trong danh sách các tuỳ chọn
e Thuật toán
ode45 dựa trên công thức Runge-Kutta (4, 5) dạng hiển Đây là phơng pháp một nút - để tính y(tn), chỉ cần một nút tính ở bớc ngay trớc, y(tn-1) Nói chung, ode45 là hàm tốt nhất để áp dụng thử lần đầu tiên cho hầu hết các bài toán
ode23 là một triển khai của sơ đồ Runge-Kutta (2, 3) dạng hiển Nó có thể hiệu quả hơn ode45 ở sai số thô và trong các hệ cứng vừa phải Cũng nh ode45, ode23 là công cụ giải một nút
ode113 là công cụ giải Adam-BashForth-Moulton PECE cấp thay đổi Nó có thể hiệu quả hơn ode45 ở sai số tinh và khi hàm odefile định giá phức tạp ode113 là công cụ nhiều nút - thờng cần một vài nút trớc để tính xấp xỉ ở bớc hiện tại
Các thuật toán trên dùng để giải các hệ không cứng Nếu thấy chúng hình nh quá chậm, hãy thử dùng một trong các công cụ cứng dới đây
ode15s là công cụ cứng cấp thay đổi, dựa trên các công thức vi phân số, NDFs Thông thờng, dùng công thức sai phân lùi, BDFs (còn gọi là phơng pháp Gear), th-
Trang 18ờng kém hiệu quả hơn Nh ode113, ode15s là công cụ nhiều nút Nếu ta nghi ngờ bài toán là cứng hoặc ode45 không đáp ứng đợc hay hiệu quả rất kém, hoặc khi giải phơng trình vi phân đại số, hãy thử ode15s.
ode23s dựa trên công thức Rosenbrock cấp 2 sửa đổi Vì là công cụ một nút, nó có thể hiệu quả hơn ode15s ở sai số thô Nó có thể giải một số loại bài toán cứng mà ode 15s giải không hiệu quả
Ngoài ra còn ode23t và ode23tb
options = odeset(oldopts,’name1’,value1, ) thay đổi một cấu trúc tùy chọn đã có oldopts
options = odeset(oldopts,newopts) thay đổi một cấu trúc tuỳ chọn đã có oldopts bằng cách ghép nó với một cấu trúc tùy chọn mới newopts Mọi tùy chọn mới khác rỗng sẽ đè lên tùy chọn tơng ứng trong oldopts
odeset không đối số vào sẽ hiển thị tất cả tên các thuộc tính có thể có và các giá trị mặc định
i Khuôn mẫu một tệp tin ODE (odefile).
(odefile) Định nghĩa một bài toán PTVP cho các công cụ giải.
Trang 19odefile không phải là một lệnh hay một hàm cụ thể mà đó là một khuôn mẫu của một M-file định nghĩa hệ phơng trình cần giải Việc định nghĩa này là bớc đầu tiên khi sử dụng bất kỳ một công cụ giải nào của Matlab Không bắt buộc phải là odefile, bạn có thể dặt tên gì tuỳ thích cho M-file của mình.
Bạn có thể dùng M-file odefile để định nghĩa hệ phơng trình ở một trong các dạng sau:
y’ = f(t, y) hoặc M(t, y) y’ = f(t, y)
trong đó
• t là một biến độc lập, đặc trng cho yếu tố thời gian
• y là một véctơ của các biến độc lập
• f là một hàm của t và y, trả về véctơ cột có cùng cỡ với y
• M(t, y) là ma trận khối lợng phụ thuộc cả thời gian và trạng thái
Tệp ODE phải nhận tối thiểu hai đối t và y cho dù nó không sử dụng đến chúng Mặc nhiên tệp ODE phải trả về một véctơ cột cùng cỡ với y
Tất cả các công cụ giải ODE đều có thể giải hệ PTVP dạng M(t, y) y’ = f(t, y), trừ ode23s chỉ có thể giải đợc bài toán với ma trận khối lợng hằng số ode15s và ode23t có thể giải các DAE dạng M(t) y’ = f(t, y)
Ngoài việc định nghĩa hệ PTVP, bạn còn có thể xác định điều kiện đầu cho bài toán trong odefile, để bỏ qua đợc sự cần thiết phải cung cấp khoảng thời gian và các giá trị đầu trên dòng lệnh
function varargout = odefile(t,y,flag,p1,p2)
Trang 20-function dydt = f(t,y,p1,p2)
dydt = < Insert a function of t and/or y, p1, and p2 here >
%
-function [tspan,y0,options] = init(p1,p2)
tspan = < Insert tspan here >;
y0 = < Insert y0 here >;
options = < Insert options = odeset( ) or [] here >;
%
-function dfdy = jacobian(t,y,p1,p2)
dfdy = < Insert Jacobian matrix here >;
-function [value,isterminal,direction] = events(t,y,p1,p2)
value = < Insert event function vector here >
isterminal = < Insert logical ISTERMINAL vector here >;
Trang 21direction = < Insert DIRECTION vector here >;
k Lu ý.
1 Đối số tuỳ chọn flag xác định loại đầu ra mà tệp ODE trả về (ma trận khối ợng, Jacobian, v.v).…
l-2 Công cụ giải lặp đi lặp lại việc gọi tệp ODE để định giá hệ PTVP tại các thời
điểm khác nhau Việc này cần có đủ thông tin - ta phải định nghĩa hệ PTVP ờng cần giải
th-3 Câu lệnh switch xác định kiểu đầu ra yêu cầu, từ đó tệp ODE có thể cung cấp thông tin thích hợp cho công cụ giải
4 Trong trờng hợp điều kiện đầu mặc định ( ‘ init ’), tệp ODE trả về các thông tin cơ bản (khoảng thời gian tspan, điều kiện đầu y0, tuỳ chọn options) cho các công cụ giải Nếu ta bỏ qua trờng hợp này, ta phải cung cấp tất cả các thông tin cơ bản trên dòng lệnh
5 Trong trờng hợp ’jacobian’, tệp ODE trả về một ma trận Jacobian cho công cụ giải Ta chỉ cần viết cho trờng hợp này khi ta muốn hoàn thiện khả năng của các công cụ cứng ode15s, ode23s, ode23t, và ode23tb
6 Trong trờng hợp ’jpattern’, tệp ODE trả về mẫu tha của ma trận Jacobian cho công cụ giải Ta chỉ cần viết cho trờng hợp này khi ta muốn tạo các ma trận Jacobian tha cho các công cụ giải
7 Trong trờng hợp ’mass’, tệp ODE trả về ma trận khối lợng cho công cụ giải Ta chỉ cần viết cho trờng hợp này khi ta muốn giải hệ có dạng M(t, y) y’ = f(t, y)
8 Trong trờng hợp ’events’, tệp ODE trả về cho công cụ giải các giá trị cần cho việc đánh dấu sự kiện Khi thuộc tính Events đợc đặt là ’on’, Công cụ giải kiểm tra mọi phần tử của véctơ sự kiện để chuyển tới, từ, hoặc qua giá trị không Nếu phần tử tơng ứng của véctơ isterminal đợc đặt là 1, quá trình tích phân sẽ dừng khi gặp một điểm không Các phần tử của véctơ direction là -1, 1, hoặc 0
9 Nếu ta truyền vào flag không có trong các trờng hợp trên sẽ gây ra lỗi
1.2 Các thuộc tính (MATLAB 6.0).
Các thuộc tính có thể sử dụng phụ thuộc vào công cụ giải PTVP đợc dùng Có một
số loại thuộc tính nh sau:
• Sai số
Trang 22• §Çu ra cña c«ng cô gi¶i
Trang 23Sai số tuyệt đối áp dụng cho các thành phần riêng biệt của véctơ nghiệm AbsTol(i) là ngỡng dới của thành phần nghiệm thứ i Sai số tuyệt đối xác định độ chính xác khi nghiệm tiến tới không Thậm chí nếu thành phần nghiệm y(i) quá bé, bạn có thể phải xác định AbsTol(i) đủ nhỏ để nhận đợc số chữ số có nghĩa cần thiết của y(i), vì thế có thể tính đợc các thành phần nghiệm mà bạn quan tâm đến một cách chính xác hơn.Nếu AbsTol là một véctơ, nó phải cùng cỡ với véctơ nghiệm y Nếu AbsTol là một vô hớng, giá trị đó đợc áp dụng cho tất cả các thành phần của y.
NormControl on|{off} Điều khiển sai số tơng đối để chuẩn hoá nghiệm Đặt
thuộc tính này là ’on’ để yêu cầu công cụ giải điều chỉnh sai số trong mỗi bớc tích phân
norm(e) ≤ max{ RelTol*norm(y), AbsTol }
b) Đầu ra của công cụ giải.
Thuộc tính Giá trị Mô tả
OutputFcn Hàm số Cài đặt hàm đầu ra Các công cụ giải PTVP cung cấp các
hàm mẫu, bạn có thể sử dụng hoặc sửa đổi lại: {odeplot}, odephas2, odephas3, odeprint
Ví dụ,options = odeset(’OutputFcn’,@myfun)
đặt cho thuộc tính OutputFcn một hàm ra, myfun, để truyền cho một công cụ giải PTVP
Hàm ra phải có dạng:
Trang 24status = myfun(t,y,flag)với flag là ’init’, {’none’}, hoặc ’done’.
OutputSel Véctơ
chỉ số
Chỉ ra các thành phần nào của véctơ nghiệm mà công cụ giải sẽ truyền cho hàm ra Ví dụ, nếu bạn dùng hàm ra odeplot, nhng chỉ muốn vẽ thành phần nghiệm thứ nhất và thứ ba, viết lệnh sau:
options = odeset('OutputFcn',@odeplot,’OutputSel',[1 3]);
Refine Số
nguyên dơng
Làm trơn đầu ra Tăng số nút đầu ra bằng hệ số Refine Nếu Refine là 1, công cụ giải chỉ trả về nghiệm tại các
điểm cuối mỗi bớc thời gian Nếu Refine là n > 1, công cụ giải chia mỗi bớc thời gian thành n khoảng nhỏ hơn, và trả
về nghiệm tại mỗi thời điểm Giá trị mặc định là 1 ở tất cả các công cụ giải, trừ ở ode45 nó là 4 Refine không áp dụng khi length(tspan) > 2
Stats on|
{off}
Có hay không hiển thị thống kê về quá trình tính toán của công cụ Mặc định, Stats là off Nếu là on, sau khi giải bài toán, công cụ sẽ cho hiển thị:
• Số bớc thành công
• Số lần thử thất bại
• Số lần hàm ODE đợc gọi để định giá f(t, y)
• Số lần ma trận đạo hàm riêng df/dy đợc thiết lập
• Số lần phân tích LU
• Số nghiệm của hệ tuyến tính
c) Ma trận Jacobian.
Các công cụ giải cứng thờng thực hiện nhanh hơn nếu ta cung cấp thêm thông tin
về ma trận Jacobian df/dy, một ma trận các đạo hàm riêng của hàm cho trong các PTVP
df/dy = [ df1/dy1 df1/dy2
df2/dy1 df2/dy2 ];
Trang 25Thuộc tính Giá trị Mô tả
Jacobian Hàm số |
Ma trậnHằng
Một ma trận hằng hoặc một hàm định giá Jacobian Việc cung cấp Jacobian dạng giải tích thờng tăng tốc độ tính và độ tin cậy của nghiệm các bài toán cứng Đặt thuộc tính này cho hàm FJac, với FJac(t,y) tính df/dy, hoặc cho giá trị hằng của df/dy
JPattern Ma trận
tha của{0,1}
Vectorized on|{off}
d) Đánh dấu sự kiện.
Thuộc tính Giá trị Mô tả
Events Hàm số Đánh dấu các điểm đặc biệt Đặt cho thuộc tính này là
@Events, trong đó Events là một hàm sự kiện
e) Ma trận khối lợng và hệ phơng trình vi phân đại số (DAEs).
Các công cụ giải PTVP đều có thể giải đợc hệ dạng M(t, y) y’ = f(t, y) với ma trận khối lợng M(t, y) thờng là tha
Khi M(t, y) không suy biến, phơng trình trên tơng đơng với y’ = M-1 f(t, y) và PTVP có một nghiệm với mọi giá trị đầu y0 tại t0
Khi M(t, y) suy biến thì M(t, y) y’ = f(t, y) là một DAE và nó chỉ có nghiệm khi y0 thích hợp, đó là, tồn tại hệ số góc ban đầu yp0 sao cho: M(t0, y0) yp0 = f(t0,
ma trận hằng số M Với bài toán M(t, y) y’ = f(t, y), gán cho thuộc tính này một hàm Mfun,
Trang 26định giá ma trận M(t, y).
MstateDependence none |
{weak} |strong
Sự phụ thuộc của ma trận khối lợng vào y
Đặt là ’none’ cho bài toán M(t) y’ = f(t, y) Cả ’weak’ và ’strong’ đều dùng cho M(t, y) nhng ’weak’ cho các công cụ ẩn tính xấp xỉ khi giải các phơng trình đại số
MvPattern Ma trận tha ∂ ( M(t, y)v ) / ∂y mẫu tha Đặt thuộc tính
này cho một ma trận tha S với S(i, j) = 1 nếu với mọi k, thành phần (i, k) của M(t, y) phụ thuộc vào thành phần j của y, và 0 nếu ngợc lại Dùng với ode15s, ode23t, và ode23tb khi MStateDependence là ’strong’
MassSingular yes | no |
{maybe}
Cho biết ma trận khối lợng có suy biến không Đặt thuộc tính này là ’no’ nếu ma trận khối lợng không suy biến và bạn đang sử dụng công cụ ode15s hoặc ode23t
InitialSlope Véctơ |
{vtơ không}
Véctơ biểu diễn hệ số góc ban đầu yp0, thoả mãn M(t0, y0) yp0 = f(t0, y0) Mặc định là một véctơ không Thuộc tính này dùng với ode15s và ode23t khi giải DAEs
f) Độ lớn bớc tính.
Thuộc tính Giá trị Mô tả
InitialStep Gợi ý bớc tính ban đầu InitialStep đặt một
giới hạn trên cho bớc tính đầu tiên mà công
cụ sẽ thử Nếu bạn không đặt InitialStep, bớc tính ban đầu dựa trên độ dốc của nghiệm tại thời điểm đầu tspan(1), và nếu tất cả các thành phần nghiệm là không, thì tức là đã thử với b-
Trang 27ớc quá lớn.
MaxStep Số dơng
tf)}
{0.1*abs(t0-Giới hạn trên của bớc tính Nếu PTVP có hệ
số hoặc nghiệm tuần hoàn, có thể là tốt nếu
đặt MaxStep cho một số phần (nh 1/4) của chu
kỳ Điều này bảo đảm rằng công cụ không mở rộng bớc thời gian quá lớn và bớc không vợt quá một chu kỳ Không giảm MaxStep:
• Để tạo thêm nút đầu ra Nó có thể làm giảm đáng kể thời gian giải Để thay thế, dùng Refine
BDFs thay cho công thức mặc định NDFs hay không Đặt BDF là ’on’ để có ode15s dùng BDFs Với cả NDFs và BDFs, các công thức
Trang 28cấp 1 và 2 đều ổn định A (miền ổn định bao gồm toàn bộ nửa trái mặt phẳng phức) Các công thức cấp cao hơn đều không ổn định Có một lớp các bài toán cứng (dao động cứng) đ-
ợc giải có hiệu quả hơn nếu giảm MaxOrder (ví dụ thành 2) để chỉ có các công thức ổn
định nhất đợc sử dụng
2 Giải phơng trình vi phân chuyển động bằng phần mềm DEASOL.
2.1 Giới thiệu chung
Phần mềm DEASOL đợc xây dựng bởi tập thể các tác giả thuộc bộ môn Cơ học ứng dụng Trờng Đại Học Bách Khoa Hà Nội,hiện nay phiên bản mới nhất là DEASOL 3.3
DAESOL l hệ chà ơng trình dùng để giải các hệ phơng trình vi phân đại số của các biến y, u dạng:
t t
Với E(y) l ma trận vuông không suy biến.à
Các biến y đợc gọi l các biến vi phân, các biến u đà ợc gọi l các biến đại số, doàxuất hiện y trong hệ dới dạng vi phân trong khi véc tơ u chỉ có ở dạng đại số
Trong cơ học, thờng gặp phơng trình chuyển động của các cơ hệ có dạng:
f l véc-tơ các ngoà ại lực suy rộng kích thớc n
Trang 29Chơng trình DAESOL đọc các tệp tin mô tả các phơng trình(.eqt,.eqn) cùng với tệp tin mô tả các điều kiện đầu v các tham số(.in), sau đó thực hiện phân tích để cóàthể xuất ra các file nguồn Fortran l một chà ơng trình có thể dịch ra file exe hoặc dịch ra file th viện liên kết động dll, chơng trình fortran đợc tạo ra để thực hiện giải các b i toán hệ phà ơng trình vi phân bằng phơng pháp số Xem sơ đồ khối (Hình 1).
Trang 30NguyÔn Thµnh Long - C¬ Tin A-k43
Phương trình (.EQT) Thông số (.IN)
Phương trình (.EQT) Thông số (.IN)
Chương trình nguồn Fortran
Chương trình nguồn Fortran
Chương trình
thực thi (.EXE)
Chương trình
thực thi (.EXE) Thư viện liên kết động (.DLL)
Thư viện liên kết động (.DLL)
Bộ phân tích
Thực hiện Ghép nối
Chương trình biên dịch
Chương trình biên dịch
30
Trang 31Đồ án tốt nghiệp
Hình 1: Sơ đồ khối chơng trình DAESOL
Với chơng trình n y cho phép ngà ời sử dụng có đợc một công cụ để tạo ra các
ch-ơng trình giải các hệ phch-ơng trình vi phân bằng ngôn ngữ Fortran 77 Ngời dùng có thể dịch luôn ra chơng trình (.exe) để chạy v có file kết quả hoặc dịch ra file thàviện liên kết động (.dll) để liên kết v o các chà ơng trình khác
2.2 Cách sử dụng và các chức năng chính hiện có của chơng trình.
Đầu v o cho mỗi b i toán của DAESOL gồm hai tệp tin: tệp EQT (hay EQN) môà àtả các phơng trình cùng với các biến, tham số của hệ v tệp IN mô tả các điềuàkiện đầu vào của các biến v giá trị của các tham số xuất hiện trong phà ơng trình
2.2.2 Soạn thảo tệp tin phơng trình dùng Edit Equation hoặc Notepad.
Soạn thảo tệp tin phơng trình với chơng trình soạn thảo bên ngo i (nhà NotePad, xem hình 3) hoặc sử dụng chơng trình soạn thảo EqtEditor (Xem hình 4) kèm theo
Trang 32Hình 2: Soạn thảo tệp tin phơng trình bằng NotePad.
Ví dụ: Trên Hình 2 soạn thảo tệp tin phơng trình vi phân chuyển động cơ hệ con lắc Eliptic(chi tiết về cơ hệ con lắc Eliptic xem ở phần III),sau khi soạn thảo xong
ta ghi thành tệp Eliptic.eqt
Khi soạn thảo tệp tin phơng trình dùng Notepad cần chú ý:
- Sau từ khoá [DifEqt] ta đa các phơng trình vi phân vào, kết thúc mỗi phơng trình
phải có dấu ;
-Sau từ khoá [Unknown] ta đa danh sách các toạ độ suy rộng
-Sau từ khoá [Parameter] ta đa danh sách các tham số
Soạn thảo tệp tin phơng trình bằng EqtEditor.
Hình 3: Soạn thảo tệp tin phơng trình bằng EqtEditor.
2.2.3 Edit Initial File.
Soạn thảo tệp tin thông số (.in) với chơng trình soạn thảo bên ngo i (nhà NotePad).Trong tệp tin thông số ta cần đa vào các thông số cơ bản sau:
-Khoảng thời gian lấy tích phân [t0 t1]
-Bớc tích phân h
Trang 33-Các sai số tơng đối(xtoll) và tuyệt đối(feps).
-Các điều kiện đầu
-Các tham số
-ở các phiên bản DEASOL trớc,có một số từ khoá nh [CreateResultFile],[ Pause],[DecOrd] đ… ợc sử dụng để thực hiện một số chức năng nhng trong phiên bản này không cần sử dụng dến các chức năng đó nên đằng sau chúng ngời sử dụng không cần khai báo gì
Ví dụ: Ta soạn thảo tệp tin thông số Eliptic.in nh sau:
Trang 34Hình 4: Giao diện chơng trình DEASOL.
2.2.5 Generate Fortran code.
Chỉ thực hiện xuất ra file nguồn fortran m không thực hiện biên dịch v liên kết.à àKhi sử dụng chức năng n y, chà ơng trình sẽ hỏi ngời dùng muốn có file nguồn Fortran để có thể dịch ra file chạy (.exe) hay ra file dll
Hình 5: Các thao tác với phơng trình.
2.2.6 Compile & Link Fortran Code.
Dùng chức năng n y để thực hiện dịch file Fortran mới xuất ra theo dạng tà ơng ứng (ra file exe hay dll tuỳ theo ngời dùng đó sử dụng xuất file theo dạng n o), nếuàviệc biên dịch không th nh công (không tạo ra đà ợc file exe hay dll) sẽ có hộp thoại thông báo việc dịch không th nh công.à
2.2.7 Generate Code and Build (.EXE).
Lựa chọn chức năng n y để tạo ra file nguồn Fortran theo định dạng của một chà
-ơng trình chạy, v sẽ thực hiện dịch luôn chà ơng trình ra file exe, nếu việc dịch không th nh công sẽ có hộp thoại thông báo.à
Trang 352.2.8 Run Program
Chạy thử chơng trình vừa đợc dịch ra
2.2.9 Generate Code and Build (.DLL).
Lựa chọn chức năng n y để tạo ra file nguồn Fortran theo định dạng để dịch ra fileà
th viện liên kết động (DLL), v sẽ thực hiện dịch luôn ra file dll, nếu việc dịchàkhông th nh công sẽ có hộp thoại thông báo Đồng thời chà ơng trình cũng tạo ra kèm theo một file tiêu đề "*.h" để sử dụng trong việc liên kết với chơng trình viết bằng ngôn ngữ C/C++
2.2.10 Test DLL
Kiểm tra sự hoạt động của file DLL vừa tạo ra (Cha ho n th nh).à à
2.2.11 Options.
Chức năng n y để thực hiện lựa chọn trình biên dịch v trình liên kết cũng nhà à thiết
đặt các tuỳ chọn cho trình biên dịch v liên kết Khi thực hiện chức năng n y xuấtà àhiện hộp thoại gồm 2 trang : một trang d nh cho các thiết đặt cho việc biên dịch raàfile exe v một trang d nh cho các thiết đặt cho việc biên dịch ra file dll Sau khià àthiết đặt song, bạn có thể lu lại các thiết đặt đó v o một file riêng của bạn Đồngàthời cũng cho phép lấy các thiết đặt từ các thiết đặt đã có (xem Hình 6)
Hình 6: Thiết lập thông số cho chơng trình biên dịch
Trang 362.2.12 Select method
Thực hiện lựa chọn phơng pháp giải (hiện nay mới cung cấp hai phơng pháp : Runge Kutta 2 bớc v Runge Kutta 3 bà ớc)
Hình 7: Lựa chọn phơng pháp tích phân
2.2.13 Setup Lahey Fortran 77.
C i đặt bộ Lahey Fortran77 trực tiếp từ chà ơng trình (để có thể c i đặt đà ợc bạn cần copy đầy đủ bộ chơng trình n y) Chú ý : bạn không nên c i đặt v o các thà à à mục ở mức quá sâu, hoặc v o bên trong các thà mục có lớn quá 8 ký tự
Ví dụ:Sau khi soạn thảo xong các tệp tin Eliptic.eqt và Eliptic.in ta thực hiện chơng trình nh sau:
-Khởi động DEASOL,mở tệp Eliptic.eqt vừa soạn thảo(Xem Hình 8)
Trang 37H×nh 8.
-Thùc hiÖn chän ph¬ng ph¸p gi¶i (xem H×nh 9):
Trang 39Sau khi chọn phơng pháp giải, ta tiến hành dịch chơng trình ra file.exe( xem hình 11):
Hình 11
Thực hiện chức năng trên sẽ dịch luôn chơng trình ra file Eliptic.exe,chạy file Eliptic.exe ta sẽ thu đợc file kết quả Eliptic.txt(xem hình 12):
Trang 40Hình 12:Giao diện chơng trình khi chạy file Eliptic.exe
Opt_DLL Th mục chứa các file thiết đặt các thông số mặc định cho các trình
biên dịch v liên kết để thực hiện dịch ra file dll.àOpt_EXE Th mục chứa các file thiết đặt các thông số mặc định cho các trình
biên dịch v liên kết để thực hiện dịch ra file exe.à