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

User defined script for trapezoidal rule for data in an array in Matlab

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

我目前拥有的是:

function myIntegral=myCumulativeTrapz(X,Y)
myIntegral=0.5*(Y+(Y+1))*((X+1)-X)

当我点击 运行 时,出现此错误:

Error: File: myCumulativeTrapz.m Line: 27 Column: 1

Function definitions are not permitted in this context.

如果集成脚本成功,我会把

velocity=myCumulativeTrapz(data_resultant_acc(:,1), data_resultant_acc(:,2))

在命令中window。 (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));

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