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

问题描述 投票:0回答:1

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

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

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

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

arrays matlab numerical-integration
1个回答
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));

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

© www.soinside.com 2019 - 2024. All rights reserved.