我应该使用用户定义的脚本集成加速度和时间数据以获得速度。
到目前为止我所拥有的是:
function myIntegral=myCumulativeTrapz(X,Y)
myIntegral=0.5*(Y+(Y+1))*((X+1)-X)
当我点击运行时,我收到此错误:
错误:文件:myCumulativeTrapz.m 行:27 列:1
在此上下文中不允许使用函数定义。
如果集成脚本成功,我会添加
velocity=myCumulativeTrapz(data_resultant_acc(:,1), data_resultant_acc(:,2))
在命令窗口中。 (Data_resultant_acc 是一个数组,其中时间位于第一列,加速度位于第二列。)
有人可以帮助我并告诉我为什么这不起作用吗?
显示错误消息是因为 Matlab 文件不能同时包含函数和任何函数之外的命令。所以,如果你有类似的东西
data_resultant_acc = rand(10,2);
velocity=myCumulativeTrapz(data_resultant_acc(:,1), data_resultant_acc(:,2));
function myIntegral=myCumulativeTrapz(X,Y)
myIntegral=0.5*(Y+(Y+1))*((X+1)-X)
end
将其更改为
function myProject
data_resultant_acc = rand(10,2);
velocity=myCumulativeTrapz(data_resultant_acc(:,1), data_resultant_acc(:,2));
end
function myIntegral=myCumulativeTrapz(X,Y)
myIntegral=0.5*(Y+(Y+1))*((X+1)-X)
end
从而使 myProject 成为运行文件时将执行的顶级函数(为了获得最佳结果,文件名应该是该函数的名称)。
之后,您会发现由于多种原因,
0.5*(Y+(Y+1))*((X+1)-X)
不是有效的公式。由于 X 和 Y 都是列向量,因此第一个向量应在乘法之前转置。另外,您将向量分量加 1,而不是将索引移位 1。执行索引移位的正确方法如下:
myIntegral=0.5*(Y(1:end-1)+Y(2:end))'*(X(2:end)-X(1:end-1));
这里逗号选择器创建的向量省略了第一个或最后一个条目。两个这样的向量的平均值给出了相邻值的平均值。差异给出了相邻值的差异。