1. Trang chủ
  2. » Giáo án - Bài giảng

Bài giảng Phương pháp tính và Matlab: Chương 3.6 - Trường ĐH Bách khoa Hà Nội

21 11 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 241,17 KB

Nội dung

Bài giảng Phương pháp tính và Matlab: Chương 3.6 - Trường ĐH Bách khoa Hà Nội được biên soạn bao gồm các nội dung chính sau: Vector hóa; Các phép toán vector; Sử dụng phép toán vector trong Matlab. Mời các bạn cùng tham khảo chi tiết bài giảng tại đây.

Vector hóa (Vectorization) Nội dung Mở đầu Các thủ tục Các hàm m-file Nhập, xuất liệu Điều khiển luồng Vector hóa (Vectorization) Quản lý biến Input, Output Tính giá trị hàm cách gián tiếp Chú thích 10 Gỡ lỗi 11 Một số kinh nghiệm lập trình Matlab (SAMI-HUST) Lập trình Matlab Hà Nội, 53/87 tháng năm 2015 53 / 87 Vector hóa (Vectorization) Vector hóa Vector hóa việc sử dụng phép tốn vector để xử lý toàn phần tử vector hay ma trận Thật biểu thức vector hóa tương đương với phép lặp phần tử ma trận hay vector Biểu thức vector hóa ngắn gọn thực thi nhanh biểu thức lặp thơng thường Sử dụng phép tốn vector thay cho vịng lặp Tiền cấp phát nhớ cho vector hay ma trận Sử dụng việc đánh mục vector hóa hàm logic Mã khơng sử dụng vector hóa gọi mã vơ hướng (scalar code) phép tốn thực phần tử vô hướng vector hay ma trận thay tồn Lời khun Chương trình chậm mà xác cịn chương trình nhanh mà khơng xác =⇒ Bắt đầu với mã vơ hướng, sau vector hóa cần (SAMI-HUST) Lập trình Matlab Hà Nội, 54/87 tháng năm 2015 54 / 87 Vector hóa (Vectorization) Vector hóa Vector hóa việc sử dụng phép tốn vector để xử lý tồn phần tử vector hay ma trận Thật biểu thức vector hóa tương đương với phép lặp phần tử ma trận hay vector Biểu thức vector hóa ngắn gọn thực thi nhanh biểu thức lặp thông thường Sử dụng phép tốn vector thay cho vịng lặp Tiền cấp phát nhớ cho vector hay ma trận Sử dụng việc đánh mục vector hóa hàm logic Mã khơng sử dụng vector hóa gọi mã vơ hướng (scalar code) phép tốn thực phần tử vơ hướng vector hay ma trận thay tồn Lời khun Chương trình chậm mà xác cịn chương trình nhanh mà khơng xác =⇒ Bắt đầu với mã vơ hướng, sau vector hóa cần (SAMI-HUST) Lập trình Matlab Hà Nội, 54/87 tháng năm 2015 54 / 87 Vector hóa (Vectorization) Vector hóa Vector hóa việc sử dụng phép tốn vector để xử lý tồn phần tử vector hay ma trận Thật biểu thức vector hóa tương đương với phép lặp phần tử ma trận hay vector Biểu thức vector hóa ngắn gọn thực thi nhanh biểu thức lặp thông thường Sử dụng phép tốn vector thay cho vịng lặp Tiền cấp phát nhớ cho vector hay ma trận Sử dụng việc đánh mục vector hóa hàm logic Mã khơng sử dụng vector hóa gọi mã vơ hướng (scalar code) phép tốn thực phần tử vơ hướng vector hay ma trận thay tồn Lời khun Chương trình chậm mà xác cịn chương trình nhanh mà khơng xác =⇒ Bắt đầu với mã vơ hướng, sau vector hóa cần (SAMI-HUST) Lập trình Matlab Hà Nội, 54/87 tháng năm 2015 54 / 87 Vector hóa (Vectorization) Vector hóa Vector hóa việc sử dụng phép tốn vector để xử lý toàn phần tử vector hay ma trận Thật biểu thức vector hóa tương đương với phép lặp phần tử ma trận hay vector Biểu thức vector hóa ngắn gọn thực thi nhanh biểu thức lặp thơng thường Sử dụng phép tốn vector thay cho vịng lặp Tiền cấp phát nhớ cho vector hay ma trận Sử dụng việc đánh mục vector hóa hàm logic Mã khơng sử dụng vector hóa gọi mã vơ hướng (scalar code) phép tốn thực phần tử vô hướng vector hay ma trận thay tồn Lời khun Chương trình chậm mà xác cịn chương trình nhanh mà khơng xác =⇒ Bắt đầu với mã vơ hướng, sau vector hóa cần (SAMI-HUST) Lập trình Matlab Hà Nội, 54/87 tháng năm 2015 54 / 87 Vector hóa (Vectorization) Vector hóa Vector hóa việc sử dụng phép toán vector để xử lý toàn phần tử vector hay ma trận Thật biểu thức vector hóa tương đương với phép lặp phần tử ma trận hay vector Biểu thức vector hóa ngắn gọn thực thi nhanh biểu thức lặp thông thường Sử dụng phép tốn vector thay cho vịng lặp Tiền cấp phát nhớ cho vector hay ma trận Sử dụng việc đánh mục vector hóa hàm logic Mã khơng sử dụng vector hóa gọi mã vơ hướng (scalar code) phép tốn thực phần tử vô hướng vector hay ma trận thay tồn Lời khun Chương trình chậm mà xác cịn chương trình nhanh mà khơng xác =⇒ Bắt đầu với mã vô hướng, sau vector hóa cần (SAMI-HUST) Lập trình Matlab Hà Nội, 54/87 tháng năm 2015 54 / 87 Vector hóa (Vectorization) Vector hóa Vector hóa việc sử dụng phép tốn vector để xử lý tồn phần tử vector hay ma trận Thật biểu thức vector hóa tương đương với phép lặp phần tử ma trận hay vector Biểu thức vector hóa ngắn gọn thực thi nhanh biểu thức lặp thông thường Sử dụng phép tốn vector thay cho vịng lặp Tiền cấp phát nhớ cho vector hay ma trận Sử dụng việc đánh mục vector hóa hàm logic Mã khơng sử dụng vector hóa gọi mã vơ hướng (scalar code) phép tốn thực phần tử vơ hướng vector hay ma trận thay tồn Lời khun Chương trình chậm mà xác cịn chương trình nhanh mà khơng xác =⇒ Bắt đầu với mã vơ hướng, sau vector hóa cần (SAMI-HUST) Lập trình Matlab Hà Nội, 54/87 tháng năm 2015 54 / 87 Vector hóa (Vectorization) Vector hóa Vector hóa việc sử dụng phép tốn vector để xử lý toàn phần tử vector hay ma trận Thật biểu thức vector hóa tương đương với phép lặp phần tử ma trận hay vector Biểu thức vector hóa ngắn gọn thực thi nhanh biểu thức lặp thơng thường Sử dụng phép tốn vector thay cho vịng lặp Tiền cấp phát nhớ cho vector hay ma trận Sử dụng việc đánh mục vector hóa hàm logic Mã khơng sử dụng vector hóa gọi mã vơ hướng (scalar code) phép tốn thực phần tử vô hướng vector hay ma trận thay tồn Lời khun Chương trình chậm mà xác cịn chương trình nhanh mà khơng xác =⇒ Bắt đầu với mã vơ hướng, sau vector hóa cần (SAMI-HUST) Lập trình Matlab Hà Nội, 54/87 tháng năm 2015 54 / 87 Vector hóa (Vectorization) Vector hóa Thay vịng lặp phép tốn vector Mã vơ hướng x= for k=1:length(x) y(k)=sin(x(k)); end Mã vector hóa tương đương x= y=sin(x); (SAMI-HUST) Lập trình Matlab Hà Nội, 55/87 tháng năm 2015 55 / 87 Vector hóa (Vectorization) Vector hóa Tiền cấp phát nhớ Vịng lặp sau tăng chiều s sau Tiền cấp phát cho s trước gán lần lặp giá trị cho thành phần y=[4 -1 0]; for j=1:length(y) if y(j)>0 s(j)=sqrt(y(j)); else s(j)=0; end end (SAMI-HUST) y=[4 -1 0]; s=zeros(size(y)); for j=1:length(y) if y(j)>0 s(j)=sqrt(y(j)); end end Lập trình Matlab Hà Nội, 56/87 tháng năm 2015 56 / 87 Vector hóa (Vectorization) Vector hóa Đánh mục vector hóa hàm logic Việc vector hóa mã hồn tồn địi hỏi việc sử dụng việc đánh số mảng (array indexing) đánh số logic (logical indexing) Đánh số mảng >> x=sqrt(0:4:20) x = 2.0000 >> i=[1 5]; >> y=x(i) y = 2.8284 3.4641 4.0000 4.4721 Biểu thức y=x(i) tương đương với đoạn mã k=0; for i=[1 5], (SAMI-HUST) k=k+1; y(k)=x(i); Lập trình Matlab end Hà Nội, 57/87 tháng năm 2015 57 / 87 Vector hóa (Vectorization) Vector hóa Đánh mục vector hóa hàm logic Đánh số logic >> x=sqrt(0:4:20) x = 2.0000 2.8284 >> j=find(rem(x,2)==0) j = >> z=x(j) z = (SAMI-HUST) 3.4641 Lập trình Matlab 4.0000 4.4721 Hà Nội, 58/87 tháng năm 2015 58 / 87 Vector hóa (Vectorization) Vector hóa Đánh mục vector hóa hàm logic Ví dụ 18 Vector hóa mã vơ hướng Xét đoạn mã y= s=zeros(size(y)); for j=1:length(y) if y(j)>0 s(j)=sqrt(y(j)); end end Thực ra, thay tồn vịng lặp cách sử dụng đánh số logic đánh số mảng (SAMI-HUST) Lập trình Matlab Hà Nội, 59/87 tháng năm 2015 59 / 87 Vector hóa (Vectorization) Vector hóa Đánh mục vector hóa hàm logic Ví dụ (tiếp) y= s=zeros(size(y)); i=find(y>0); s(y>0)=sqrt(y(y>0)); gọn y= s=zeros(size(y)); s(y>0)=sqrt(y(y>0)); (SAMI-HUST) Lập trình Matlab Hà Nội, 60/87 tháng năm 2015 60 / 87 Vector hóa (Vectorization) Vector hóa Vector hóa phép chép Sao chép toàn cột (hàng) Mã vô hướng [m,n]=size(A); % Giả sử A B có số hàng (cột) for i=1:m B(i,1)=A(i,1); end Mã vector hóa B(:,1)=A(:,1); (SAMI-HUST) Lập trình Matlab Hà Nội, 61/87 tháng năm 2015 61 / 87 Vector hóa (Vectorization) Vector hóa Vector hóa phép chép Sao chép chuyển vị ma trận Mã vô hướng for j=2:3 B(1,j)=A(j,3); end Mã vector hóa B(1,2:3)=A(2:3,3); (SAMI-HUST) Lập trình Matlab Hà Nội, 62/87 tháng năm 2015 62 / 87 Vector hóa (Vectorization) Vector hóa Một số ví dụ khác Xóa thành phần mảng Để xóa thành phần khơng phải số (NaN) giá trị vô (inf) mảng x ta dùng đoạn mã sử dụng đánh số mảng i=find(isnan(x) | isinf(x)); x(i)=[]; % Find bad elements % and delete them hay cách khác i=find(~isnan(x) & ~isinf(x)); % Find elements that are are not NaN and not x=x(i); % Keep those elements Ta thay đổi đoạn mã cách sử dụng số logic x(isnan(x) | isinf(x))=[]; % Delete bad elements x=x(~isnan(x) & ~isinf(x)); % Keep good elements (SAMI-HUST) Lập trình Matlab Hà Nội, 63/87 tháng năm 2015 63 / 87 Vector hóa (Vectorization) Vector hóa Một số ví dụ khác Hàm khúc (Piecewise functions) Hàm sinc định nghĩa sinc(x) = sin(x)/x, 1, x=0 x = So sánh đoạn mã sử dụng lệnh find function y=sinc(x) y=ones(size(x)); i=find(x~=0); y(i)=sin(x(i))./x(i); end % Set y to all ones, sinc(0)=1; % Find nonzero x values % Compute sinc when x ~=0 cách viết thú vị khác: y=(sin(x)+(x==0))./(x+(x==0)); (SAMI-HUST) Lập trình Matlab Hà Nội, 64/87 tháng năm 2015 64 / 87 Vector hóa (Vectorization) Vector hóa Một số ví dụ khác Nội suy đa thức Cho n mốc nội suy x1 , x2 , , xn giá trị hàm tương ứng y1 , y2 , , yn Khi đó, hệ số c0 , c1 , , cn−1 đa thức nội suy bậc n − tính cách giải hệ  n−1     x1 xn−2 · · · x21 x1 cn−1 y1 n−2 xn−1  cn−2   y2  x · · · x x 2 2         =         c0 yn xn−1 xn−2 · · · x2n xn n n hay Ac = y n Hệ có định thức Vandermond |A| = (xj − xi ) = nên có nghiệm 1≤i

Ngày đăng: 26/01/2023, 18:19

TỪ KHÓA LIÊN QUAN