Chào buổi sáng/chiều/tối,Tích hợp một chức năng không trực tiếp vận hành phần tử khôn ngoan
Tôi đang làm việc trên tập lệnh Matlab liên quan đến tích lũy khối lượng thứ tự tính toán. Gọi H (r, theta, phi) là hàm tôi muốn tích hợp. Giả sử rằng H không thể thu được bằng các phép toán đơn giản trên r, theta và phi.
Vấn đề của tôi là trong Matlab như trong bất kỳ mã khác mà tôi biết:
All input functions must accept arrays and operate elementwise. The function FUN(X,Y,Z)
must accept arrays X, Y, Z of the same size and return an array of corresponding values.
Đây là từ việc thực hiện các integral3 function từ Matlab.
Nếu tôi thử với chức năng đơn giản này:
fun = @(X,Y,Z) X.*Y.*Z
Không có vấn đề gì cả và nếu tôi tích hợp nó trên [0,1] x [0,1] x [0,1], tôi có được kết quả đúng:
integral3(fun,0,1,0,1,0,1)
trả về 0.125 đúng.
Vấn đề là như tôi đã nói, tôi không thể thực hiện các phép tính đơn giản với các vectơ để có được H và tôi buộc phải làm những điều ít nhiều theo cách này:
function [result] = fun(x,y,z)
sz = length(x);
result = zeros(1,sz);
for i=1:sz
result(i) = x(i)*y(i)*z(i);
end
end
Chức năng này hoạt động trên nó sở hữu và trả về chính xác kết quả tương tự như kết quả tôi đã giới thiệu trước đó. Tuy nhiên, khi tôi cố gắng sử dụng integral3 tôi nhận được lỗi này:
Error using integral2Calc>integral2t/tensor (line 241)
Integrand output size does not match the input size
Nhưng nó rõ ràng có thể được nhìn thấy từ định nghĩa của chức năng của tôi mà tôi đặc biệt đã làm cho nó kích thước của đầu vào.
Tôi không hiểu điều gì sai và tôi không chắc mình có giải pháp nào khác để tính toán chức năng này hay không bằng cách sử dụng loại cú pháp này.
Cảm ơn rất nhiều thời gian của bạn và giúp :)
Không có gì để thêm vào câu trả lời của @drhagen nhưng tôi chỉ muốn cảm ơn bạn vì câu hỏi được viết đẹp mắt này! – Toghe