integral() doesn't accept scalar function as input
4 次查看(过去 30 天)
显示 更早的评论
Psi = @(x) [1 x]
fun = @(x) abs(Psi(x)*Psi(x)')
integral(fun,0,1)
It is necessary for me to numerically integrate over a function (fun), that gets a vector-function (Psi) as input. fun is NOT array-valued. Why doesn't this work?
0 个评论
采纳的回答
Star Strider
2023-7-5
It works correctly with the 'ArrayValued' name-value pair —
Psi = @(x) [1 x]
fun = @(x) abs(Psi(x)*Psi(x)')
integral(fun,0,1, 'ArrayValued',1)
.
更多回答(1 个)
Jayant
2023-7-5
The error you encountered occurs because the function fun you defined is not compatible with the integral function in MATLAB. The integral function expects the integrand function to have a scalar output for each input value, but in your case, the fun function returns a vector output.
To resolve this issue, you can modify the fun function to return a scalar value by taking the norm (magnitude) of the vector output of Psi(x):
Psi = @(x) [1 x];
fun = @(x) norm(Psi(x))^2;
integral(fun, 0, 1)
Please note that I used norm(Psi(x))^2 instead of abs(Psi(x)*Psi(x)') to calculate the squared norm, as it is more efficient and mathematically equivalent.
3 个评论
Jayant
2023-7-5
I misunderstood your previous statement. To resolve the error, you can modify the fun function to handle array-valued inputs by setting the 'ArrayValued' option to true in the integral function. This will inform MATLAB that the integrand function is array-valued. Below is the modified code:
Psi = @(x) [1 x];
fun = @(x) abs(Psi(x)*Psi(x)');
integral(fun, 0, 1, 'ArrayValued', true)
By including the 'ArrayValued', true option in the integral function, the error related to array-valued inputs should be resolved, and the integration should proceed correctly.
Please try the updated code & let me know if you face any further issues. Apologies for the confusion.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!