Diễn tiến hoạt động của chương trỡnh

Một phần của tài liệu đồ án kỹ thuật cơ khí Xây dựng chương trình sử dụng phương pháp ma trận mô phỏng chuyển động hệ nhiều vật (Trang 54)

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 + =xFx 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

Fx : 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 xx = −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)

xx + <ε (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 .

Một phần của tài liệu đồ án kỹ thuật cơ khí Xây dựng chương trình sử dụng phương pháp ma trận mô phỏng chuyển động hệ nhiều vật (Trang 54)

Tải bản đầy đủ (DOC)

(80 trang)
w