1. Tuyển Mod quản lý diễn đàn. Các thành viên xem chi tiết tại đây

Mô phỏng Fuzzy Logic trong MatLab ?

Chủ đề trong 'Toán học' bởi keepsmiling, 30/10/2004.

  1. 0 người đang xem box này (Thành viên: 0, Khách: 0)
  1. loveoflife

    loveoflife Thành viên mới

    Tham gia ngày:
    09/01/2002
    Bài viết:
    94
    Đã được thích:
    0
    To bác aivoges:
    Có lẽ tôi sẽ phải xem lại cái VR thế nào? Có thể là tôi mới "cưỡi ngựa xem hoa" nên chưa làm đúng cách và do đó kết quả không như ý muốn.
    Tuy nhiên về việc bác so sánh giữa C/C++ và M-code thì tôi phải khẳng định là hoàn toàn không đúng. Sự so sánh của bác làm tôi có cảm giác như bác học MatLab chưa kỹ vậy. Nếu bác bảo là các đoạn mã M-code xử lý ma trận lằng nhằng thì các đoạn mã C/C++ còn lằng nhằng gấp bội. Lấy ngay cái ví dụ của bác, giải hệ phương trình tuyến tính. Trong MatLab bác giải như sau:
    >> x = AB;
    Thế là có kết quả. Về mặt tốc độ, tôi dám cá với bác là nhanh tương đương với mã C/C++ bác viết, thậm chí còn nhanh hơn vì MatLab đã tối ưu hoá thuật toán tìm nghiệm. Về mặt thuật toán và kết quả, bác bảo dùng C/C++ thì có thể dùng phép khử, thế bác nghĩ là MatLab không dùng thuật toán đó sao? MatLab cũng dùng thuật toán đó, chứ nó không tính nghịch đảo ma trận đâu. Không những thế, MatLab còn rất thông minh. Ví dụ như:
    - Tự động phát hiện các lỗi có thể ảnh hưởng đến độ chính xác của kết quả, v.d khi gần Singular
    - Nếu số phương trình nhiều hơn số ẩn thì có thể hệ của bác vô nghiệm, tuy nhiên MatLab không chỉ báo vô nghiệm mà còn tìm nghiệm để tổng bình phương sai lệch là cực tiểu.
    Có thể nói việc tính toán với ma trận trong MatLab được thực hiện cực kỳ đẹp đẽ, cả về mặt sử dụng (rất đơn giản, dễ dùng, gần với cách thể hiện trong Toán,...) và hiệu năng. Việc xử lý ma trận luôn là thế mạnh hàng đầu của MatLab (ví thế nên "Mat" trong MatLab nghĩa là "Matrix"), bởi vậy sự so sánh trên của bác làm tôi rất ngạc nhiên. Tôi công nhận là nếu lập trình MatLab làm đồ hoạ hay một số công việc khác thì có thể không hiệu quả bằng C/C++ nhưng riêng về mặt tính toán, đặc biệt là tính toán ma trận, thì C/C++ thua xa MatLab.
    Cũng nói thêm với bác là tôi cũng viết rất nhiều C/C++ S-function, nhưng chỉ khi nào không dùng M-file được. Theo tôi điều quan trọng là phải biết thế mạnh của từng cái để sử dụng cho hợp lý. Thêm một chút nữa về tính toán ma trận trong C++. Tôi có một thư viện tính toán ma trận viết bằng C++ do thầy của tôi viết. Thư viện này sử dụng cực kỳ tiện lợi, vì nó tiến gần đến cú pháp của MatLab. Tuy nhiên vẫn chưa thể so sánh được với MatLab, cả về mặt sử dụng và tốc độ.
    Có thể bác có suy nghĩ và so sánh trên vì bác chưa thật hiểu về MatLab. Những người chưa tìm hiểu kỹ về MatLab, không biết tận dụng hết thế mạnh của MatLab thường hay gặp phải vấn đề về tốc độ. Ví dụ như có một lần, một người bạn của tôi viết chương trình MatLab mô phỏng hệ thống, thời gian chạy là gần 10 phút. Sau khi tôi viết lại chương trình này, sửa sang 1 chút, thì thời gian chạy chỉ còn khoảng 3 phút. Đơn giản là vì anh bạn của tôi chưa học kỹ và dùng nhiều MatLab nên không biết cách viết.
    Được loveoflife sửa chữa / chuyển vào 10:06 ngày 04/11/2004
  2. aivoges

    aivoges Thành viên quen thuộc

    Tham gia ngày:
    06/11/2002
    Bài viết:
    413
    Đã được thích:
    0
    Tuy nhiên về việc bác so sánh giữa C/C++ và M-code thì tôi phải khẳng định là hoàn toàn không đúng. Sự so sánh của bác làm tôi có cảm giác như bác học MatLab chưa kỹ vậy. Nếu bác bảo là các đoạn mã M-code xử lý ma trận lằng nhằng thì các đoạn mã C/C++ còn lằng nhằng gấp bội. Lấy ngay cái ví dụ của bác, giải hệ phương trình tuyến tính. Trong MatLab bác giải như sau:
    >> x = AB;
    Thế là có kết quả. Về mặt tốc độ, tôi dám cá với bác là nhanh tương đương với mã C/C++ bác viết, thậm chí còn nhanh hơn vì MatLab đã tối ưu hoá thuật toán tìm nghiệm. Về mặt thuật toán và kết quả, bác bảo dùng C/C++ thì có thể dùng phép khử, thế bác nghĩ là MatLab không dùng thuật toán đó sao? MatLab cũng dùng thuật toán đó, chứ nó không tính nghịch đảo ma trận đâu. Không những thế, MatLab còn rất thông minh. Ví dụ như:
    - Tự động phát hiện các lỗi có thể ảnh hưởng đến độ chính xác của kết quả, v.d khi gần Singular
    - Nếu số phương trình nhiều hơn số ẩn thì có thể hệ của bác vô nghiệm, tuy nhiên MatLab không chỉ báo vô nghiệm mà còn tìm nghiệm để tổng bình phương sai lệch là cực tiểu.
    Có thể nói việc tính toán với ma trận trong MatLab được thực hiện cực kỳ đẹp đẽ, cả về mặt sử dụng (rất đơn giản, dễ dùng, gần với cách thể hiện trong Toán,...) và hiệu năng. Việc xử lý ma trận luôn là thế mạnh hàng đầu của MatLab (ví thế nên "Mat" trong MatLab nghĩa là "Matrix"), bởi vậy sự so sánh trên của bác làm tôi rất ngạc nhiên. Tôi công nhận là nếu lập trình MatLab làm đồ hoạ hay một số công việc khác thì có thể không hiệu quả bằng C/C++ nhưng riêng về mặt tính toán, đặc biệt là tính toán ma trận, thì C/C++ thua xa MatLab.
    Cũng nói thêm với bác là tôi cũng viết rất nhiều C/C++ S-function, nhưng chỉ khi nào không dùng M-file được. Theo tôi điều quan trọng là phải biết thế mạnh của từng cái để sử dụng cho hợp lý. Thêm một chút nữa về tính toán ma trận trong C++. Tôi có một thư viện tính toán ma trận viết bằng C++ do thầy của tôi viết. Thư viện này sử dụng cực kỳ tiện lợi, vì nó tiến gần đến cú pháp của MatLab. Tuy nhiên vẫn chưa thể so sánh được với MatLab, cả về mặt sử dụng và tốc độ.
    Có thể bác có suy nghĩ và so sánh trên vì bác chưa thật hiểu về MatLab. Những người chưa tìm hiểu kỹ về MatLab, không biết tận dụng hết thế mạnh của MatLab thường hay gặp phải vấn đề về tốc độ. Ví dụ như có một lần, một người bạn của tôi viết chương trình MatLab mô phỏng hệ thống, thời gian chạy là gần 10 phút. Sau khi tôi viết lại chương trình này, sửa sang 1 chút, thì thời gian chạy chỉ còn khoảng 3 phút. Đơn giản là vì anh bạn của tôi chưa học kỹ và dùng nhiều MatLab nên không biết cách viết.
    Được loveoflife sửa chữa / chuyển vào 10:06 ngày 04/11/2004
    [/QUOTE]
    Cám ơn bác. Công nhận bác nói đúng. Tôi vừa dùng cả MATLAB và C để giải một hệ phương trình 10 ẩn, lặp 1 triệu lần. Kết quả là MATLAB chạy hết 14s và C chạy mất 16s, vậy là vẫn nhanh hơn của tôi 2s. Có lẽ tôi hơi lạm dụng C/C++ . Tuy nhiên cũng có nhiều thuật toán muốn viết trong MATLAB không phải là dễ, dùng C/C++ tôi vẫn thấy tự tin hơn với con trỏ, với hướng đối tượng. Có lẽ do thói quen của từng người

Chia sẻ trang này