为了加速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)
并获取值矩阵。我该怎么办?
答案 0 :(得分:0)
鉴于A
,B
和C
都是N x N
矩阵,目前我们假设它们都是{{1}制作示例的矩阵我说明了更简洁的理解。我们还会根据您在上述问题中的评论将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
(即d
,sind
,cosd
等。 )
我相信这是你之后的答案。祝你好运!