Friday, 30 September 2011

[Matlab] Giải phương trình bằng phương pháp chia đôi

Tớ sẽ không code cụ thể ở đây vì không có matlab để test. Chỉ viết lịa nhưng gì hôm nay đã học cho khỏi quên.

1. Symbolic math toolbox:
Symbolic object là đối tượng hình thức (nghĩa là viết bằng chữ - chưa thay số). Ứng dụng của symbolic trong bài này là điểm mấu chốt.
Qua ví dụ này ta cũng hiểu được 1 phần khái niệm functional programming paradism (mô hình lập trình hàm) khi ta dùng 1 hàm làm đối của hàm khác (mặc dù hàm trong trường hợp này mang tính hình thức).


khai báo biến symbolic:
syms x



gán "hàm" : fx giờ cũng là 1 đối tượng symbolic
fx = x*x + 5*x + 6


"thay" giá trị vào x để tính fx:
subs(fx,1)
kết quả trả về 12.

2. Bài tóan giải phương trình bằng phương pháp chia đôi:

Ta sẽ phải viết hàm phuongPhapChiaDoi() gồm các đầu vào:
- sai số
- cận a
- cận b
- hàm f - bởi bài tóan yêu cầu giải phương trình nhưng ko cho phương trình cụ thể. Thế nên bắt buộc hàm phuongPhapChiaDoi phải nhận 1 đối là hàm tóan học - vế trái của phương trình (vế phải mặc định bằng 0). Như vậy, hàm của ta rất "đa năng" - giải được nhiều phương trình khác nhau chứ ko phải 1 kiểu ptr bậc 2, bậc 3 gì đây. Đố ai viết được chương trình  C giải quyết được vấn đề này :D

vậy hàm đầy đủ của ta lúc khai báo là:
function nghiem1 = phuongPhapChiaDoi(f, saiso, cana, canb)
%tạm thời tớ chưa nghĩ ra cách tìm tất cả các nghiệm. Bởi để giải quyết triệt để, ta phải xác định bậc của hàm đầu vào để biết số nghiệm tối đa ở đầu ra. Ví dụ này chỉ tìm 1 nghiệm trong khỏang cho trước.

xong phần vấn đề kỹ thuật, phần còn lại đơn giản vài vòng lặp, if - else khong có vấn đề gì :D

Code: http://pastebin.com/hTce1v3i