我应该使用用户定义的脚本整合加速度和时间数据以获得速度。
到目前为止我所拥有的是:
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是一个数组,其中时间在第一列,加速在第二列。)
有人可以帮助我并告诉我为什么这不起作用?
答案 0 :(得分:0)
显示错误消息,因为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));
这里逗号选择器创建的向量省略了第一个或最后一个条目。两个这样的向量的平均值给出了相邻值的平均值。差异给出了相邻值的差异。