0

首先,我不知道该写什么标题,因为这个问题不容易很快提出。

我需要将矩阵值函数 (k) 与向量值函数 (X) 进行卷积,每个函数都在 R^3 上定义。我需要在 MATLAB 中这样做,所以我自然会做离散化版本。我计划分别用 5 维和 4 维数组来表示 k 和 X。不过这似乎有点重。你知道是否有更好的方法来做到这一点?

我不会直接进行卷积,而是fft通过将 k 和 X 都输入到傅立叶空间,用零填充,将它们相乘,然后使用ifft. 这应该会产生相同的结果并且运行得更快。

我的问题是是否有任何方法可以轻松地将这些数组/矩阵相乘?即有什么方法可以在k(i,j,k,:,:)*X(i,j,k,:)不使用三个嵌套循环的情况下对所有 i,j,k 做任何事情?

4

2 回答 2

1

需要离散化吗?Matlab 完全能够将函数作为输入和输出。例如,您可以定义一个卷积函数:

>> convolve = @(fm,fv) @(x) fm(x) * fv(x); %fm matrix valued, fv vector valued

并定义一些矩阵值和向量值函数(假设输入是列向量)

>> f = @(x) [x x x];
>> g = @(x) cos(x);

现在他们的卷积:

>> h = convolve(f,g);

并尝试将其应用于向量:

>> h([1;2;3])
ans =
   -0.8658
   -1.7317
   -2.5975

您会得到与手动操作相同的答案:

>> f([1;2;3]) * g([1;2;3])
ans =
   -0.8658
   -1.7317
   -2.5975
于 2012-10-30T12:10:53.517 回答
0

您可以使用 执行逐个元素的操作。与选择的运营商一起。例如:

Element-by-element multiplication: .* 
Element-by-element division: ./

等等……你是这个意思吗?

于 2012-10-30T12:05:13.410 回答