Chương trỡnh tớnh toỏn

Một phần của tài liệu đồ án kỹ thuật điện cơ giới thiệu sơ qua các khái niệm về tối ưu và bài toán cơ học đặt ra (Trang 66)

III. MỘT SỐ BÀI TOÁN CƠ HỌC

b. Chương trỡnh tớnh toỏn

Chương trỡnh cú sử dụng modul tớnh trị riờng bằng phương phỏp Jacobi (nằm trong tệp tin gốc “Jacobi.cpp” và tệp tin đầu “Jacobi.h”). Từ thủ tục jacobi() ta tạo thờm một thủ tục tớnh cỏc trị riờng cú tờn tanso() nằm trong tệp tin gốc “tanso.cpp” và tệp tin đầu “tanso.h”. Thủ tục tanso() được khai bỏo như sau:

void tanso(double *m, double *c, double *&l, int n); Trong đú:

n là số bậc tự do của hệ và là đọ dài của mảng m, c, l.

m là mảng khối lượng cỏc vật, c là mảng độ cứng, l là mảng chứa kết quả cỏc trị riờng theo cụng thức (2.1.9) ở mục a.

Hàm tớnh hàm mục tiờu bừy giờ sẽ phải gọi tới thủ tục tanso(…) để tớnh cỏc trị riờng rồi mới thực hiện tớnh toỏn trả về giỏ trị của hàm. Tệp

#include <math.h> #include "nrutil.h" #include "tanso.h"

#include "objective_function.h" double *ltb;

double f(double *x,int n) { float *ltb; int i; float *m,*c,*l; m=vector(1,n/2); c=vector(1,n/2); l=vector(1,n/2); for (i=1;i<=n;i++) { m[i]=float(x[i-1]); c[i]=float(x[n/2+i-1]); } tanso(m,c,l,n/2); double t=0.0; for (i=1;i<=n/2;i++) t+=(sqrt(l[i])-ltb[i])*(sqrt(l[i])-ltb[i]); return t; }

void constrains(double *x,int n,double *&h,int m,double *&g,int p) {

int i=0; while (i<n)

{ g[i]=x[i/2]-mk[i]; g[i+1]=mk[i+1]-x[i/2]; g[n+i]=x[n/2+i/2]-ck[i]; g[n+i+1]=ck[i+1]-x[n/2+i/2]; i=i+2; } }

Chú ý trong thủ tục tanso() ở trờn ta tham số thứ 3 là n/2 vỡ số biến trạng thỏi bằng số cỏc giỏ trị khối lượng cộng với số cỏc giỏ trị độ cứng, ở trong hàm mục tiờu số biến trạng thỏi là n nờn tham số trờn phải là n/2. Ngoài ra ở đõy trong n biến trạng thỏi thỡ n/2 giỏ trị đầu tiờn là khối lượng, n/2 giỏ trị cũn lại là độ cứng.

Chương trỡnh chớnh ở đõy cũng giống như phần nhập hàm đều do thư viện MFC tạo thành giao diện như hỡnh V-2.

Để chạy chương trỡnh, trước hết ta kớch vào nút “Open” để mở “Notepad”, sau đú mở tệp “tansonhap.txt” trong thư mục gốc của chương trỡnh để nhập dữ liệu. Cấu trỳc của tệp “tansonhap.txt” như sau:

- Dũng đầu tiờn ghi giỏ trị của n dạng số nguyờn. - Dũng tiếp theo ghi n giỏ trị của trị riờng mong muốn. - Dũng tiếp theo ghi n giỏ trị khởi tạo của khối lượng. - Dũng tiếp theo ghi n giỏ trị khởi tạo của độ cứng.

- n dũng tiếp theo mỗi dũng ghi 2 giỏ trị giới hạn dưới và trờn của khối lượng.

- n dũng tiếp theo mỗi dũng ghi 2 giỏ trị giới hạn dưới và trờn của độ cứng. Kết thỳc tệp.

Hỡnh V-2

Trờn giao diện cú 2 bảng phải chọn: bảng đầu tiờn là chọn một trong bốn phương phỏp tối ưu, bảng thứ hai là chọn bài toỏn, trong phần này là bài toỏn tần số.

Hộp time để hiển thị thời gian tớnh toỏn (giừy).

Bấm “Run” để chạy. Sau khi chạy xong cú thể bấm “Continue” rồi chọn lại để chạy tiếp, nếu khụng thỡ bấm “Exit” để thoỏt.

Kết quả tớnh toỏn sẽ được lưu vào tệp “tansoxuat.txt”, sau khi thực hiện muốn xem thỡ bấm “Open” để mở ra xem như mở ra nhập ở trờn. Mảng x ghi trong tệp “tansoxuat.txt” gồm 2n phần tử, trong đú n phần tử đầu là giỏ trị của khối lượng (chỉ số từ 1 đến n), n phần tử cũn lại là giỏ trị của độ cứng.

c. Vớ dụ

Thay số: (xem [4]) Với hệ 2 bậc tự do:

λ1b=225 ; λ2b=3025 (rad/s)2 Cỏc ràng buộc:

10 ≤ m1 ≤30 ; 40 ≤ m2 ≤60 (kg)

18000 ≤ c1 ≤22000 ; 25000 ≤ c2 ≤99000 (N/m)

Với cỏc giỏ trị khởi tạo ban đầu là m1(0)=20 ; m2(0)=50 (kg)

c1(0)=20000 ; c2(0)=30000 (N/m) Thỡ tệp “tansonhap.txt” như sau:

2 15.0 55.0 20.0 50.0 20000.0 30000.0 10.0 30.0 40.0 60.0 18000.0 22000.0 25000.0 99000.0

Và kết quả thu được như sau: Phương phỏp Hook Jeeves:

fmin=0 λ*1=225 ; λ*2=3025 (rad/s)2 m*1=20 ; m*2=45 (kg) c*1=19406,588857 ; c*2=31564,672691 (N/m) Phương phỏp Powell: fmin=0 λ*1=225 ; λ*2=3025 (rad/s)2 m*1=18,992998 ; m*2=44,740926 (kg) c*1=19520,430058 ; c*2=29628,992297 (N/m) Phương phỏp Rosenbrock:

λ*1=225 ; λ*2=3025 (rad/s)2

m*1=19,728391 ; m*2=49,04627 (kg)

c*1=21847,135713 ; c*2=30144,717004 (N/m)

Phương phỏp Nelder Mead: fmin=0

λ*1=225 ; λ*2=3025 (rad/s)2

m*1=19,279078 ; m*2= 45,744982 (kg)

c*1= 20004,145870 ; c*2= 30006.648830 (N/m)

Cú thể kiểm tra kết quả tớnh toỏn bằng cụng thức tớnh trị riờng của hệ rời rạc hai bậc tự do theo cụng thức (2.1.4) trang 125 của [6]. Với cỏc biến trạng thỏi tớnh toỏn được ở trờn hoàn toàn đỳng với giỏ trị cỏc trị riờng tớnh được.

Như vậy do cỏc phương phỏp lặp khỏc nhau mà cho ra kết quả tớnh toỏn khỏc nhau (trong trường hợp cú nhiều lời giải cho một bài toỏn tối ưu), nhưng quan trọng là hàm mục tiờu đạt được giỏ trị tối ưu, việc lựa chọn phương phỏp nào để tớnh toỏn dựa vào từng yờu cầu cụ thể của bài toỏn đụng thời cũng là lợi thế của người sử dụng.

Một phần của tài liệu đồ án kỹ thuật điện cơ giới thiệu sơ qua các khái niệm về tối ưu và bài toán cơ học đặt ra (Trang 66)

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

(111 trang)
w