Giải hệ phương trình bậc 4 Matlab

Đã gửi 30-07-2018 - 22:51

Em chào cả nhà. Trước hết xin phép và nhờ admin giúp đỡ chuyển bài viết này của em tới vị trí phù hợp nếu em mắc sai sót!

Em không biết về Toán, lại đang gặp vấn đề cần giải quyết bằng ứng dụng p.pháp Runge-Kutta bậc 4 để giải hệ phương trình trong file đính kèm.

Tại page số 4 trong file đính kèm là 13 phương trình ứng với 13 ẩn cần giải. Trong đó thì ẩn là các biến nhân với số QR tại mỗi phương trình đó, nhưng chưa hết, các ẩn này có mặt trong cả các hàm r1,r2,..,r13 nằm rải rác trong các phương trình đó nữa (các hàm r này xem tại các page từ 1-3).

Em rất mong được các bác chỉ giáo cho cách thức ứng dụng p.pháp Runge-Kutta bậc 4 để giải hệ phương trình này. Có bạn gợi ý em là chuyển hết ẩn của một phương trình sang một vế (ví dụ với p.trình 1, ẩn là So) nhưng em thấy nó vẫn nằm rải rác trong phương trình đó (chưa kể là có chứa sẵn ẩn của các phương trình tiếp theo), phức tạp quá, khiến em bất định.

Em là Hà, sđt: 09.3730,8188, mail: [email protected] làm việc tại Cầu Giấy, Hà Nội. Bác nào có cách giải quyết mà ở cùng địa phương, xin cho em được gặp để dễ thông suốt vấn đề hơn.

Em xin cảm ơn các bác nhiều ạ.

File gửi kèm


Bài viết đã được chỉnh sửa nội dung bởi thanhha1984: 30-07-2018 - 22:53

Theo bài giảng của Danilo Šćepanović - MIT Opencourseware
Nội dung

1. Đại số tuyến tính2. Đa thức3. Bài toán tối ưu4. Tính đạo hàm và tích phân số

5. Giải phương trình vi phân


1. Đại số tuyến tính
    a/ Hệ phương trình tuyến tính Với một hệ phương trình tuyến tính            x+2y - 3z = 5            -3x - y + z = -8             x - y + z = 0 Hệ này được biểu diễn dưới dạng ma trân : Ax=b. Trong MATLAB, thực hiện giải hệ này như sau:            >> A=[1 2 -3;-3 -1 1;1 -1 1];
           >> b=[5;-8;0];
           >> X=A\b; % X là một vector 3x1 chứa giá trị của x,y và z thỏa mãn phương trình.
           % Phép \ sẽ làm việc với hệ phương trình có A là ma trận vuông hoặc ma trận chữ nhật
           % Phép \ đưa ra một nghiệm khi hệ có vô số nghiệm.
           % Nếu hệ vô nghiệm, khi thực hiện MATLAB sẽ đưa ra một cảnh báo và vẫn trả về một vector 3x1.
     b/ Các phép toán khác với ma trận
>> mat=[1 2 -3;-3 -1 1;1 -1 1];
>> r=rank(mat); % Tính hạng của ma trận
>> d=det(mat); % Tính định thức, mat phải là ma trận vuông
% Nếu định thức khác không thì ma trận là khả đảo.
>> E=inv(mat); % Tính ma trận nghịch đảo
>> eig(mat) % Tính các trị riêng của ma trận
>> rank(mat) % Tìm hạng của ma trận
>> rref(mat) % Đưa một hệ tuyến tính về dạng bậc thang
=> Có rất rất nhiều câu lệnh thực hiện với ma trận, để xem tất cả bạn hãy vào help.
Bài Tập Giải hệ phương trình sau Hệ 1           x+4y =34           -3x+y=2 Hệ 2           2x-2y=4           -x+ y =3           3x+4y=2 Tính rank của ma trận của hệ 2.

2.    Đa thức


  • Đa thức bậc cao có thể dùng để xấp xỉ rất nhiều các hàm phi tuyến khác nhau
  • Matlab mô tả một đa thức bằng một vector chứa các hệ số. Mỗi vector P có thể dùng để mô tả một đa thức. Ví dụ: ax^3+bx^2+cx+d tương ứng với vector P=[a, b, c, d]
            P = [1 0 -2] mô tả đa thức x^2-2
            P = [2 0 0 0] mô tả đa thức 2x^3 
  • Tính toán với đa thức
    • Giả sử P là một vector có kích thước N+1 mô tả một đa thức bậc N. Để tìm nghiệm của đa thức sử dụng lệnh roots
                >> r = roots(P) % r là một vector có kích thước N
    • Ngược lại, nếu như biết các nghiệm của một đa thức, ta có thể tìm được đa thức đó với lệnh poly
                >> P = poly(r)  % r là vector chứa N nghiệm của P
    • Tính giá trị đa thức tại một điểm (lệnh polyval)
                >> y0 = polyval(P,x0)  % Tính y0 khi x = x0
    • Tính giá trị đa thức tại nhiều điểm
               >> y = polyval(P,x)        % x, y là 2 vector cùng kích thước 
  • Xấp xỉ đa thức
    • Matlab làm đơn giản việc tìm đa thức nội suy từ một bộ dữ liệu với lệnh polyfit.
                >> X=[-1 0 2]; Y=[0 -1 3];
                >> p2 = polyfit(X,Y,2);  % tìm đa thức bậc 2 phù hợp nhất đi qua các điểm (-1,0), (0 -1) và (2,3) 
                                                      % gõ help polyfit để biết thêm về cách dùng
                >> plot(X,Y,’o’, ‘MarkerSize’, 10); 
                >> hold on; 
                >> x = -3:.01:3; 

                >> plot(x,polyval(p2,x), ‘r--’);

Bài tập


Tính y= x^2 với x= -4:0.1:4

Cộng thêm nhiễu ngẫu nhiên vào các giá trị tính được đó. Trong bài tập này, hãy dùng hàm randn

Vẽ tín hiệu có nhiễu thu được. 

Tìm đa thức bậc 2 xấp xỉ bộ dữ liệu có nhiễu đó. Vẽ đa thức đó trên cùng một đồ thị. Dùng cùng giá trị x và đường màu đỏ  

Hướng dẫn>> x=-4:0.1:4;
>> y=x.^2; 

>> y=y+randn(size(y));>> plot(x,y,’.’);>> p=polyfit(x,y,2);

>> hold on; 

>> plot(x,polyval(p,x),’r’)

  • Giải phương trình phi tuyến
    • Nhiều bài toán thực tế buộc chúng ta phải giải phương trình f(x) = 0
    • Có thể dùng hàm fzeoro để giải nghiệm cho bất kỳ một hàm tùy ý. Tham số của hàm fzero là hàm số cần tìm nghiệm. Do đó trước khi dùng hàm fzero, ta cần tạo một mfile riêng chứa hàm muốn tìm nghiệm.
    • Ví dụ:

                    Tạo ra một file riêng chứa hàm. Lưu mfile này dưới tên 'myfun' sau đó gõ lệnh trên Work Space như sau:

Giải hệ phương trình bậc 4 Matlab

                    x=fzero('myfun',1) % 1 là giá trị ước đoán mà ta nghĩ nằm gần nghiệm
                    x=fzero(@myfun,1)

  • Tìm cực tiểu của hàm số
    • Lệnh fminbnd : tìm cực tiểu của một hàm trên một khoảng bị chặn.
    • Ví dụ ta đã có hàm myfun lưu trong 1 mfile nào đó. Muốn tìm giá trị nhỏ nhất của hàm này trên khoản [-1, 2] ta làm như sau:
                    >> x=fminbnd('myfun',-1,2);
                    % Chú ý: hàm myfun là một hàm một biến
                    % fminbnd sẽ trả về một điểm cực tiểu của hàm myfun trong đoạn [-1 , 2]
  • Lệnh fminsearch: tìm một cực tiểu của một hàm trên toàn bộ miền xác định
                    >> x=fminsearch('myfun',0.5)  % tìm một cực tiểu địa phương bắt đầu từ  x=0.5
  • Khi bạn muốn tìm cực trị hoặc tìm nghiệm một hàm mà không muốn tạo một mfile để chứa riêng hàm đó, có thể dùng cách sau:
          >> x=fzero(@myfun,1)
          Cách làm này thường được dùng hàm có dạng đơn giản
            >> x=fzero(@(x)(cos(exp(x))+x^2-1), 1 );   % ở đây f(x)= cos(exp(x))+x^2-1
            >> x=fminbnd(@(x)(cos(exp(x))+x^2-1),-1,2);
  • Opimization Toolbox
    • Nếu bạn thường xuyên làm việc với các bài toán tối ưu hóa, nên dành thời gian học cách sử dụng Optimization Toolbox. Đây là một Toolbox rất hữu ích khi làm việc với những bài toán tối ưu lớn và có cấu trúc.
    • Có thể kể ra một số câu lệnh trong Toolbox này như sau (vào help để có thêm thông tin):
                >> linprog      % Giải bài toán quy hoạch tuyến tính sử dụng phương pháp nội suy
                >> quadprog  Giải bài toán quy hoạch bậc 2
                >> fmincon   % Giải bài toán tối ưu phi tuyến có điều kiện ràng buộc
Bài tập
Tìm giá trị nhỏ nhất của hàm f(x)= cos(4x)sin(10x)exp(-|x|) trong dải  [-π,π] dùng hàm fminbnd

Hướng dẫn: Lập mfile với tên myFun.m với nội dung như sau:
function y=myFun(x)
y=cos(4*x).*sin(10*x).*exp(-abs(x));
Trên Work Space, tìm cực tiểu như sau:
>> x0=fminbnd('myFun',-pi,pi);
% Vẽ đồ thị hàm số trong khoảng đó để kiểm tra
>> figure; 
>> x=-pi:.01:pi; 
>> plot(x,myFun(x));