phát sóng tự động là một tính năng khá mới Octave mà ném trong một bsxfun bất cứ nơi nào có sự không phù hợp chiều giữa một singleton và kích thước của non-singleton.
Trong trường hợp này
X_poly = X.^Powers;
được thay thế bằng
X_poly = bsxfun (@power, X, powers);
Đây là hành vi octave hợp pháp hoàn hảo và hơn nữa nó dường như chính xác những gì bạn muốn làm, vì vậy bạn không có để thay đổi nó.
Cảnh báo là vì Matlab không hỗ trợ phát sóng tự động để họ muốn nhắc bạn nếu bạn cố gắng chạy mã này trong Matlab nó sẽ thất bại.
Hơn nữa, thực hành phổ biến trong số nhiều lập trình viên Octave là dựa chủ yếu vào kích thước không phù hợp như một cách để phát hiện lỗi trong chương trình của họ.Tôi thậm chí đã từng học một lớp học máy mà giáo sư nói với cả lớp "Nếu tất cả các kích thước đều xếp hàng, thì có lẽ nó đúng". Đây là một lời khuyên khủng khiếp, khủng khiếp và chắc chắn rằng tất cả mọi người đều thất bại trong bài tập về nhà, nhưng nó phản ánh một cách tiếp cận chung giữa nhiều nhà nghiên cứu để viết các chương trình Matlab/Octave.
Vì lý do này, việc giới thiệu phát sóng tự động mà không có bất kỳ cảnh báo nào có thể gây khó khăn cho bạn nếu bạn không có thói quen xác nhận rõ ràng về đầu vào chức năng của mình.
Nếu bạn muốn thoát khỏi cảnh báo, bạn chỉ có thể thêm
warning("off", "Octave:broadcast");
mã của bạn.
Nếu bạn muốn duy trì khả năng tương thích tốt hơn Matlab hoặc chỉ không sử dụng phát sóng tự động và thà có lỗi quãng tám để giúp cô lập lỗi, bạn có thể thêm
warning ("error", "Octave:broadcast");
để thay thế.
Tôi có thể đã sử dụng bsxfun, nhưng vì mục đích tập thể dục, tôi muốn tự mình thực hiện hành vi này. Chỉ có điều cần thiết để làm cho mã của tôi làm việc là để chuyển đổi X cũng sau đó. quyền hạn = số (numel (X), 1) * khoảng trống (1, p, p); Xs = X * (1, p); X_poly = Xs.^Quyền hạn; Cảm ơn bạn rất nhiều;) –
"Tôi nghĩ nó chỉ đơn giản là một lỗi, nhưng quãng tám dường như đang cố gắng tìm ra ý của bạn thay vì những gì bạn viết, nhưng sau đó đưa ra cảnh báo rằng nó đang đoán". Đó không phải là lý do. Một phần của ngôn ngữ Octave là tự động phát sóng (lấy cảm hứng từ NumPy), vì vậy những gì bạn viết trong những tình huống * là * phát sóng. Lý do cảnh báo là nó là một tính năng mới và có thể khiến mọi người bất ngờ. Những loại cảnh báo này thường bị xóa sau 2 lần phát hành. – carandraug
@carandraug: Vâng, câu hỏi cũng được gắn thẻ 'matlab', và nó là bất hợp pháp ở đó. –