Cõy đạo hàm thu được: sin
3.4.2 Diễn tiến hoạt động của chương trỡnh
Cỏc tiến trỡnh được mụ tả trong biểu đồ diễn tiến theo thời gian Sequence Diagram như hỡnh vẽ: Module Tính Động Lực Học Ng ời sử dụng : User Module Nhập Thông Số
Mô Tả MBS Trận SymbolicSinh Các Ma Module Tính Toán Động Học MBS Module Mô phỏng
nếu các thông số đã đủ 1: Nhập các thông số mô tả MBS Ng ợc lại 4: Thoát 6: Tính toán động học 7: Sử dụng phuơng pháp Newton-Raphson 8: L u kết quả động học 2: Sinh các ma trận Symbolic 3: Sinh các SymbolicMatrix 5: L u các ma trận Symbolic chuyển động 9: Tính toán lực 10: L u kết quả 11: Mô phỏng chuyển động
Hỡnh 4.2: Biểu đồ diễn tiến cỏc tiến trỡnh trong chương trỡnh
1. Module Nhập thụng số mụ tả MBS yờu cầu người sử dụng nhập cỏc thụng tin cần thiết cho MBS: số vật, số khớp, ma trận Incidence mụ tả cấu trỳc MBS, vật
nền, cỏc giỏ trị khởi tạo của cỏc toạ độ dẫn, số bứơc lặp trong module NewtonRaphson…Cỏc thụng số nhập vào được lưu vào cỏc biến xỏc định.
2. Cỏc thụng số đầu vào sẽ được kiểm tra, nếu hợp lệ sẽ gọi module xừy dựng cỏc ma trận Symbolic tương ứng với cỏc phộp chuyển hệ toạ độ rồi tiến hành tiếp bứơc 3. Ngược lại nếu khụng hợp lệ sẽ sinh thụng bỏo lỗi và kết thỳc.
3. Lưu cỏc ma trận Symbolic tớnh được, ghi cỏc phương trỡnh Symbolic biểu diễn hệ phuơng trỡnh cừn bằng chuyển động ra file dinh dạng : *.txt, phục vụ cho việc tớnh toỏn tiếp theo.
4. Đọc cỏc giỏ trị từ File nguồn đó ghi vào mảng cỏc chuỗi động học là đầu vào cho module tớnh động học. Gọi thực hiện Module tớnh toỏn động học.
5. Lưu cỏc kết quả động học tớnh được theo thời gian ra file vật lớ. Kết quả sẽ được sử dụng trong module tớnh lực và mụ phỏng chuyển động.
6. Tớnh toỏn cỏc lực: lực tỏc động, phản lực tại cỏc khớp,…. Lưu kết quả tớnh đươc.(module này chưa được cài đặt trong đồ ỏn này)
7. Mụ phỏng chuyển động của hệ.
Sơ đồ khối của module Nhập thụng số mụ tả MBS:
Nhập dữ liệu cho ma trận Incidence, số b ớc lặp, các giá trị khởi tạo,...
Nhập các thông tin cho từng khớp theo cấu trúc của ma trận Incidence
Lặp lại cho đến khi hết số khớp Nhập các thông tin cho từng vật Lặp lại cho đến khi hết số vật Hỡnh 4.3: Tiến trỡnh Nhập thụng số mụ tả MBS
Gán giá trị ID của vật tr ớc và vật sau Gán giá trị khoảng cách
tới vật tr ớc và vật sau
Xây dựng ma trận chuyển Symbolic từ hệ toạ độ vật tr ớc đến vật sau Khớp quay Khớp tịnh tiến Hạn chế với hệ MBS phẳng với các khớp quay, khớp tịnh tiến L u các thông tin Hỡnh 4.4: Tiến trỡnh nhập cỏc thụng tin về khớp
3.4.3 Cỏc lớp chớnh của chương trỡnh<<use>> <<use>> CGridCtrl CBodyDataInputDlg CMatrix CSymbolicMatrix CPair CBody CMBSDataDescDlg CMBSSysTaskMan ** * 1 * 1 <<use>> 1 1 1 1 <<use>> CMBSPairInfDlg Hỡnh 4.5: sơ đồ cỏc lớp chớnh
*) Lớp CMBSSysTaskMan: đừy là lớp mà diễn ra cỏc tiến trỡnh chớnh của chương trỡnh, lớp này cú vai trũ như một quản trị của chương trỡnh, cú nhiệm vụ điều hành, phừn phối cỏc tỏc vụ nhập liệu tớnh toỏn cho cỏc Module theo yờu cầu.
CMBSSysTaskMan cú cỏc phương thức thao tỏc xử lớ với dữ liệu của đối
tượng thuộc lớp ma trận CMatrix : giải hệ phương trỡnh tuyến tớnh, Nghịch đảo ma trận, Phừn tớch LU, Module NewtonRaphson giải hệ phương trỡnh phi tuyến….
std::vector<CPoint> GausDeoxidate(Cmatrix &, CMatrix &);
Cmatrix NewtonRaphsonSolve(std::vector<CString> pszFunc, std::vector<variable>varVal,int iStep);
CMatrix GetSkewMatrix(std::vector<double>); CMatrix GetUMatrix(const CMatrix&);
CMatrix GetLMatrix(const CMatrix&);
CMatrix InverseSolve(const CMatrix &,const CMatrix &); CMatrix InverseMatrix(const CMatrix &);
CMatrix EquasSolve(const CMatrix &,const CMatrix &); CMatrix LUAnalys(const CMatrix &);
…
Khi cú yờu cầu nhập cỏc thụng số mụ tả MBS thỡ CMBSSysTaskMan sẽ gọi moduleGetMBSInf thực hiện nhận cỏc thụng số nhập vào từ người sử dụng, trong đú sẽ gọi cỏc Module nhập thụng tin về cỏc vật, cỏc khớp, module lấy thụng dữ liệu cho ma trận Incidence...
Khi cú yờu cầu về tớnh toỏn động học CMBSSysTaskMan sẽ gọi module
KinematicComputation , trong đú gọi cỏc module xử lớ cỏc dữ liệu text từ file như
GetFuncValue làm đầu vào cho module NewtonRaphson…, cỏc kết quả sẽ được
lưu thành cỏc mảng hay ma trận.
Ta cú mụ hỡnh class của lớp này như sau:
CMBSSysTaskMan m_nBodies : Integer = 0
m_nPairs : Integer = 0 m_iValue : Integer = 0 m_pBodies : CBody** = NULL m_pPairs : CPair** = NULL m_matrIC : CMatrix
m_pForces : doube* = NULL m_nConst : Integer
m_nVari : Integer
GetMBSInf() : void
GetBody(idBody : Integer) : CBody GetPair(inPair : Integer) : CPair GetIncidenceMatrix() : CMatrix
GetSkewMatrix(resvec : std::vector<double>) : CMatrix GetUMatrix(resMatr : const CMatrix&) : CMatrix GetLMatrix(resMatr : const CMatrix&) : CMatrix
InverseSolve(leftMatr : const CMatrix&, rightMatr : const CMatrix&) : CMatrix InserveMatrix(resMatr : const CMatrix&) : CMatrix
EqualsSolve(leftMatr : const CMatrix&, rightMatr : const CMatrix&) : CMatrix LUAnalys(resMatr : const CMatrix&) : CMatrix
SwapCol(resArr : double**, idOld : Integer, idNew : Integer, iRows : Integer) : void GausDeoxidate() : std::vector<CPoint>
Hỡnh 4.6: Mụ hỡnh class của lớp CMBSSysTaskMan
Cỏc thuật giải sử dụng trong cỏc module của lớp này:
. Đầu vào cho module này là cỏc ma trận vế phải và vế trỏi của hệ phương trỡnh cần giải.
. Đầu ra của module này là nghiệm của hệ phuơng trỡnh, cú thứ tự như ban đầu
. Trỡnh tự hoạt động của cỏc tiến trỡnh đựơc mụ tả trong sơ đồ sau:
Kiểm tra tính hợp lệ của các ma trĩ đầu vào
Gọi module Khử Gauss
thông báo lỗi sai
đúng
Module này trả về vector l u sự thay đổi vị trí các ẩn trong phép khử Gauss
Gọi module
giải ng ợc Trả về vactor nghiệm với thứ tự đã thay đổi
Hoán đổi lại vị trí các nghiệm
Hỡnh 4.7: Sơ đồ tiến trỡnh của Module giải hệ phương trỡnh tuyến tớnh
+ Module giải hệ phương trỡnh phi tuyến NewtonRaphsonSolve(…): module này sử dụng phươg phỏp lặp NewtonRaphson tổng quỏt trong khụng gian n chiều để giải hệ phương trỡnh phi tuyến,cú dạng:
( ) 0
f x = (3.1)
Trong phươg phỏp lặp NewtonRaphson sẽ xừy dựng chuỗi vector { }x( )k , bỏ qua định lớ về tớnh hội tụ của chuỗi { }x( )k cũng như tớnh duy nhất của nghiệm của phuơng trỡnh (3.1) vỡ thực tế cỏc điều kiện này khú được kiểm tra và thoả mún, ta cú biểu thức hồi quy như sau:
(k 1) ( )k 1( )( )k . ( )( )k
x
x + =x −F− x f x (3.2) Trong đú :
x
F : là ma trận Jacobi được định nghĩa như sau:
1 1 1 1 2 2 2 2 1 2 1 2 ... ... ... ... ... n n x n n n n f f f x x x f f f x x x F f f f x x x ∂ ∂ ∂ ∂ ∂ ∂ ∂ ∂ ∂ ∂ ∂ ∂ = ∂ ∂ ∂ ∂ ∂ ∂ (3.3) 1 x
F− : là ma trận nghịch đảo của ma trận Jacobi
( )
( )
1 k
x
F− x : là ma trận nghịch đảo của ma trận Jacobi được tớnh tại “điểm” ( )k
x
( )
( )k
f x : là vector chứa cỏc giỏ trị của cỏc hàm số f f1, ,2 … fn tại điểm
( )k
x
Để trỏnh phải tớnh nghịch đảo của ma trận Jacobi tại mỗi bước lặp, (3.2 ) được tỏch thành việc giải hai hệ phương trỡnh sau :
Bước 1: giải ( )( )k . ( )k ( ( )k ) x F x ∆x = −f x (3.4) để tỡm ( )k x ∆ Bước 2: giải (k 1) ( )k ( )k x + =x + ∆x (3.5)
Ở bước 1 ta cú hệ phương trỡnh đại số tuyến tớnh cho cỏc ẩn số ( )k
x
∆ . Sử dụng Module giải hệ phương trỡnh tuyến tớnh ở trờn sẽ tỡm được ( )k
x
∆
Thuật giải của phương phỏp NewtonRaphson cho hệ phương trỡnh n ẩn số được mụ tả như sau:
1) Đặt k=0
2) Chọn xấp xỉ ban đầu ( )0
x
3) Tớnh f x( )( )k
Nếu f xi( ) <ε(ε là hằng số dương bộ chọn trước) với mọi i=1,2,…,n thỡ dừng, nếu khụng thỡ tiếp tục từ 4. 4) Tớnh ma trận Jacobi tại ( )k x , tức là ( )( )k x F x 5) Giải (3.4) để tỡm ( )k x ∆ 6) Thay ( )k x ∆ vào (3.5) để tỡm (k 1) x + 7) k = k+1
Nếu k>M với M là số bước lặp đó chọn trước, thỡ dừng Nếu khụng, tiếp tục từ 3
Như khi khụng đạt được độ chớnh xỏc vũng lặp được kết thỳc sau một số bước nhất định. Điều kiện dừng đuợc chọn bằng cỏch xột chuẩn cực đại của vector f. Cú thể thay thế khỏc như:
( )k (k 1)
x −x + <ε (3.6)
Đầu vào của Module này là vector chứa cỏc chuỗi dạng văn bản biểu diễn cỏc hàm (3.1), vector chứa cỏc phần tử biến gồm tờn biến và giỏ trị của biến, số bước lặp.
Đầu ra của Module là vector nghiệm. Phần tử biến là một cấu trỳc cú dạng: typedef struct var
{
CString name; double value; } variable;
Khởi tạo cỏc giỏ trị,k=0, chọn xấp xỉ Xõy dựng ma trận Jacobi dạng Symbolic từ cỏc chuỗi hàm Tớnh ma trận Jacobi dạng số tại Tớnh nghịch đảo ma trận Jacobi Tớnh giỏ trị cỏc hàm từ cỏc chuỗi text tại
Tớnh , k=k+1, = Kiểm tra Đỳng Sai Kiểm tra k<step Sai Đỳng Start loop
Hỡnh 4.8: Sơ đồ thuật giải của phương phỏp NewtonRaphson
Tại bước xừy dựng ma trận Jacobi Symbolic hàm GetJacobiMatrix
được gọi, với tham số đầu vào là vector cỏc chuỗi dạng text của cỏc hàm và vector cỏc biến cựng giỏ trị của cỏc biến tại lần lặp k. Trong đú ỏp dụng xử lớ Symbolic để tớnh giỏ trị cỏc hàm, tớnh đạo hàm cỏc hàm theo cỏc biến. Kết quả trả lại là một ma trận Jacobi số.
Hai vector phải có cỡ bằng nhau iSize Khởi tạo ma trận Jacobi(J), biến đếm i = 0 Lấy chuỗi thứ i Nhập vector các ch ỗi hàm, vector các biến Tăng giá trị i = i+1 Nếu i >= iSize Nếu i <= iSize
Khởi tạo biến đếm j = 0 Lấy tên và giá trị của biến thứ j Đạo hàm theo biến thứ j
bằng xử lí Symbolic Tính giá trị của chuỗi
đã đ ợc đạo hàm L u giá trị của phần tử J(i,j) Tăng giá trị j = j + 1 Nếu j < iSize Nếu j>iSize
Hinh 4.10: Sơ đồ thuật toỏn trong phương thức tớnh ma trận Jacobi sử dụng module xử lớ Symbolic
+) Module phừn tớch LU :
CMatrix CMBSTaskMan::LUAnalys(const CMatrix &A)
+) Module khử Gauss:
std::vector<CPoint> CMBSTaskMan::GausDeoxidate(CMatrix & resMatr, CMatrix & resVector)
+ ) Module nghịch đảo ma trận :
CMatrix CMBSTaskMan::InverseMatrix(const CMatrix &A)
+) Module tớnh toỏn động học KinematicComputation: module này cú nhiệm vụ tớnh toỏn cỏc toạ độ phụ thuộc xỏc định vị trớ động học MBS. Đầu vào của module là giỏ trị thời gian, đầu ra của module là vector giỏ trị cỏc toạ độ xỏc định vị trớ của hệ.
Sơ đồ diễn tiến của module như sau :
đầu vào của module này là vector chuỗi hàm mô tả động học của hệ đã đ ợc biến đổi, trả về vector giá trị các toạ độ vị trí của hệ
Tính toán giá trị toạ độ dẫn theo thời gian từ chuỗi hàm, sử dụng xử lí Symbolic
Thế giá trị toạ độ dẫn vào hệ chuỗi hàm mô tả động học của hệ
Gọi module NewtonRaphson Nếu ko có lỗi Nếu có lỗi Nếu có lỗi Nếu ko có lỗi
Hỡnh 4.11: Sơ đồ mụ tả diễn tiến của module.
*) Lớp CBody : đừy là kết quả của việc khỏi quỏt hoỏ đối tượng vật thể trong hệ nhiều vật(MBS) theo hướng đối tượng, lớp này chứa thuộc tớnh, phương thức của
một vật thể trong MBS. Mỗi hiện thực hoỏ của một CBody là đại diện cho một vật thể trong MBS, nú chứa cỏc thuộc tớnh và cỏc phương thức của vật :
. Cỏc thuộc tớnh : Khối lượng của vật, ma trận quỏn tớnh, ma trận toạ độ, ma trận vận tốc, ma trận gia tốc, cỏc ma trận “moment vector”, danh sỏch cỏc khớp,…
. Cỏc phương thức : GetMass, InputData, GetDescMatrix
CBody m_matrBaseCoor : CMatrix m_dlgInputData : CDataMatrixInputDlg m_dMass : double m_matrAcce : CMatrix m_matrVelo : CMatrix m_matrMotorR : CMatrix m_mmatrMotorA : CMatrix m_matrMotorI : CMatrix GetDescMatrix() ...
Hinh 4.12: Sơ đồ class của lớp Cbody
*) Lớp CBodyDataInputDlg: lớp này luụn được sử trong lớp CBody , cú
nhiệm vụ nhập cỏc thụng tin cho một vật thể.
*) Lớp CPair: đừy là kết quả của việc khỏi quỏt hoỏ đối tượng khớp động
học trong hệ của nhiều vật (MBS) theo hướng đối tượng, lớp này chứa thuộc tớnh, phương thức của một khớp động học trong MBS. Mỗi hiện thực hoỏ của một CPair
là đại diện cho một khớp động học trong MBS, nú chứa cỏc thuộc tớnh và cỏc phương thức của khớp động học :
.Cỏc thuộc tớnh : Kiểu khớp động học, khoảng cỏch đến vật trước, khơảng cỏch đến vật sau, ma trận chuyển dạng Symbolic, ma trận vận tốc dạng Symbolic, ma trận gia tốc dạng Symbolic, ID của khớp để quản lớ khớp,..
CPair m_iBefBdy : Integer m_iAftBdy : Integer m_iType : Integer m_dBefDis : double m_dAftDis : double m_szType : CString m_szDrvConstrain : CString InputData() SetID()
Hỡnh 4.13: Sơ đồ class của lớp CPair
*) Lớp CMBSPairInfDlg: lớp này luụn được sử trong lớp CPair, cú nhiệm vụ nhập cỏc thụng tin cho một khớp động học.
*) Lớp CMatrix: lớp này lưu cấu trỳc, thuộc tớnh và cỏc phương thức của ma trận. Dữ liệu của ma trận được lưu dưới dạng mảng hai chiều.
*) Lớp CSymbolicMatrix: là lớp được mở rộng từ lớp CMatrix biểu diễn cỏc ma trận dưới dạng text .