提问人:Matt Majic 提问时间:10/2/2023 最后编辑:Matt Majic 更新时间:11/22/2023 访问量:57
点积误差的Matlab双积分
Matlab double integral of dot product error
问:
说我想整合
f=@(x) [1,0];
integral2( @(x,y) f(x)*f(y)' ,0,1,0,1 );
但这给出了错误
Integrand output size does not match the input size.
即使 f 是一个向量,我采用点积,因此输入大小为 1x1。理想情况下,我想使用向量表示法来计算被积数中的点积,因为我有一个更复杂的内积,手写出来会很痛苦。对于 1D 积分,可以设置为 ,但不能设置为 2D。
如何对包含点积的函数进行数值双积分?arrayvalued
true
答:
2赞
Ander Biguri
10/2/2023
#1
虽然您的问题提供了错误的代码,但类似这样的内容会重现您的错误:
integral2( @(x,y) f(x)*f(y)' ,0,1,0,1 );
错误仅仅是因为整数函数不是接受的格式。函数需要接受数组输入,并返回相应值的数组输出。integral2
即
fun=@(x,y) f(x)*f(y)'
size(fun(0,1)) % returns 1, should return 1
size(fun([0,0],[1,1])) % returns 1, should return 2, because it has 2 inputs
% in other words, this must hold for it to be a valid function for integral2:
fun([0,0],[1,1]) == [fun(0,1), fun(0,1)]
只需重写您的函数,以便它可以同时在多对中计算,使其成为矢量化函数。
请记住,输入不需要是在一行中定义的匿名函数,您可以自由地在单独的文件中编写完整的函数,并将其用于 .[x,y]
integral2
评论
0赞
Matt Majic
10/3/2023
谢谢,我该如何重写函数?
0赞
Matt Majic
10/3/2023
我用正确的输入编辑了答案,也谢谢你
0赞
Ander Biguri
10/3/2023
@MattMajic老实说,我认为如果你只是把它写在一个文件中并做一个for循环,那就容易多了。
评论