用户定义的脚本,用于Matlab中数组中数据的梯形规则

时间:2015-01-10 23:06:10

标签: arrays matlab integration

我应该使用用户定义的脚本整合加速度和时间数据以获得速度。

到目前为止我所拥有的是:

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是一个数组,其中时间在第一列,加速在第二列。)

有人可以帮助我并告诉我为什么这不起作用?

1 个答案:

答案 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));

这里逗号选择器创建的向量省略了第一个或最后一个条目。两个这样的向量的平均值给出了相邻值的平均值。差异给出了相邻值的差异。