为了加快for
循环(或消除所有这些),我一直试图将矩阵传递到函数中。我还得用正弦和余弦。然而,当我试图找到一个矩阵的积分,其中的元素是由正弦线和余弦组成的,它不工作,我似乎找不到办法使它这样做。
我有一个矩阵SI
,它由正弦和余弦组成,与我用符号数学工具箱定义的变量有关。因此,如果我能传递SI
矩阵,并得到一个值矩阵,即这个矩阵中每个位置的正弦/余弦函数的积分,那就更好了。我基本上会得到一个正方形矩阵。我不确定我的措辞是否很好,但我有下面的代码,我已经开始了。
I = [1 2; 3 4];
J = [5 6; 7 8];
syms o;
j = o*J;
SI = sin(I + j);
%SI(1,1) = sin(5*o + 1)
integral(@(o) o.*SI(1,1), 0,1);
理想情况下,我希望求解integral(@(o) o*SI,0,1)
并得到一个值矩阵。我在这里该怎么办?
发布于 2014-06-17 16:35:40
考虑到A
、B
和C
都是N x N
矩阵,现在,让我们假设它们都是2 x 2
矩阵,让我们来让我演示的示例更加简洁。让我们将o
定义为基于您在上述问题中的评论的数学符号。
syms o;
A = [1 2; 3 4];
B = [5 6; 7 8];
C = [9 10; 11 12];
让我们根据您的注释定义您的函数f
:
f = o*sin(A + o*B + C)
因此,我们得到:
f =
[ o*sin(5*o + 10), o*sin(6*o + 12)]
[ o*sin(7*o + 14), o*sin(8*o + 16)]
记住,对于f
中的每个元素,我们接受A
、B
和C
中的相应元素,并将它们相加在一起。因此,对于每个矩阵的第一行和第一列,我们有1, 5
和9
。因此,对于第一行,第一列的A + o*B + C
等于:1 + 5*o + 9 = 5*o + 10
。
现在,如果您想集成,只需使用int
命令即可。这将找到精确的积分,条件是该积分可以在闭形式下求解。int
还可以处理矩阵,因此它将集成矩阵中的每个元素。你可以这样称呼它:
out = int(f,a,b);
这将集成每个元素的f
,从下限a
到上限b
。因此,假设我们的限制是从0
到1
的,正如您所说的。因此:
out = int(f,0,1);
因此,我们得到:
out =
[ sin(15)/25 - sin(10)/25 - cos(15)/5, sin(18)/36 - sin(12)/36 - cos(18)/6]
[ sin(21)/49 - sin(14)/49 - cos(21)/7, sin(24)/64 - sin(16)/64 - cos(24)/8]
请记住,out
是在符号数学工具箱中定义的。如果您想要实际数值,则需要将答案转换为double
。因此:
finalOut = double(out);
因此,我们得到:
finalOut =
0.1997 -0.1160
0.0751 -0.0627
显然,这可以推广到任意大小的M x N
矩阵,只要它们所有共享相同的维度。
警告
sin
、cos
、tan
等相关功能在radians中有各自的单元。如果您希望学位等效,请在函数的末尾添加d
(即sind
、cosd
、tand
等)。
我相信这就是你想要的答案。祝好运!
https://stackoverflow.com/questions/24271937
复制相似问题