PIC Vietnam

Go Back   PIC Vietnam > Robotics > Matlab-Simulink & Labview & 20-Sim

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Matlab-Simulink & Labview & 20-Sim Các công cụ mô phỏng đa ngành...

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 12-01-2008, 05:43 AM   #8
picvendor
Super Moderator
 
Tham gia ngày: Jun 2005
Bài gửi: 385
:
Tôi tách thành 3 file:

%%%---vd1_init.m---%%%

% initialize function f(x) and calculate df/dx

x=-10:0.1:10;

a0=1;
b0=-2;
c0=3;

fx=a0*x.^2+ b0*x + c0;
df=[diff(fx) 0]; %so that df has the same length with f
a=df./sqrt(df.^2+1);
%%%---%%%

%%%---vd1.m---%%%

function F=vd1(q,t,fxt,at)

% bring the commented part out of this function
% x=-10:0.1:10;
%
a0=1;
b0=-2;
c0=3;
%
% fx=a0*x.^2+ b0*x + c0;
% df=diff(fx);
% a=df/sqrt(df.^2+1);
l0=490;
l1=250;
l2=150;
l3=200;


F=[t+l2-l3*sin(q(1)+q(2)-q(3))-l0*cos(q(1)+q(2))+l1*cos(q(2));...
fxt+l3*sin(q(1)+q(2)-q(3))+l0*sin(q(1)+q(2))-l1*sin(q(2));...
at-cos(q(1)+q(2)-q(3))];
%%%---%%%

%%% ---vd1_run.m--- %%%

% q0 should vary with x, anyway using the same initial guess is ok

vd1_init;

q0=[0.94910999;4.804079037;0.52999628]
q_matrix=[];

options=optimset('Display','iter');

for i=1:length(x)

t = x(i);
fxt = fx(i);
at = a(i);
[qt,fval] = fsolve(@vd1,q0,options,t,fxt,at);
%t,fxt,at come after "options", meaning they are parameter, fsolve doesn't optimize those parameters
q_matrix = [q_matrix qt]; %solution for each x is a column of q_matrix
end

%at x=x(i), solution is: q=q_matrix(:,i)

% Read help of fsolve: (online help contains one more syntax than Matlab help)
% http://nf.apac.edu.au/facilities/sof...im/fsolve.html
% x = fsolve(fun,x0,options,P1,P2,...) passes the problem-dependent
% parameters P1, P2, etc., directly to the function fun.

% Good study!
% conso0 & picvendor, www.picvietnam.com, 20080111.
%%%---%%%

---

Cách giải bài này là:
- Xấp xỉ hàm liên tục f(x) bằng một chuỗi, đây là bước rời rạc hóa, bạn đã làm được. Lưu ý chọn bước để xấp xỉ càng nhỏ càng tốt. (phụ thuộc vào độ phân giải bộ điều khiển của dao)
- Tính đạo hàm df/dx, do đạo hàm chỉ phụ thuộc vào hình dạng của f(x) mà không phụ thuộc vào các góc quay q_i, nên ta mang ra ngoài, tính đạo hàm một lần thôi.
- Giải hệ phương trình [F1(q); F2(q); F3(q)] = [0;0;0] bằng lện fsolve, đối với mỗi giá trị x. (mỗi giá trị x thì có giá trị fx và ax tương ứng).

---

Mã lệnh bạn gửi lúc đầu có một số lỗi về cú pháp:

+ Tính giá trị a, nếu bạn ghi a=df/sqrt(df.^2+1) thì cái dấu / có ý nghĩa là phép chia (giả) giữa 2 ma trận. Cần sửa là a=df./sqrt(df.^2+1) - từng phần tử chia cho nhau.

+ F = [...];[...];[...]; không tạo được vector 3 thành phần.

+ fx +l3*sin(q(1)+q(2)-q(3))+l0*sin(q(1)+q(2))-l1*sin(q(2)) - để ý khoảng trống ngay sau biến fx, nó tách câu lệnh này thành vector có 2 cột, đó là lý do bạn thấy lỗi ở feval (lúc mới sửa tôi cũng gặp lỗi đó, nó báo lỗi "vercat" và cho biết 3 dòng của F không có cùng số cột).
__________________
Cách tìm link DOI để yêu cầu bài báo ở Sciencedirect: http://www.picvietnam.com/forum/show...&postcount=682
Cách tìm link DOI để yêu cầu bài báo ở IEEE: http://www.picvietnam.com/forum/show...&postcount=760
Cuộc thi thiết kế PIC (tạm ngưng): http://www.picvietnam.com/contest
picvendor vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:44 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam