请问下 这段MATLAB程序到底哪里错误了?

来源:百度知道 编辑:UC知道 时间:2024/09/21 21:46:23
这是我的MATLAB程序
function gm1(x); %定义函数gm1(x)
x=[]
format long; %设置计算精度
if length(x(:,1))==1 %对输入矩阵进行判断,如不是一维列矩阵,进行转置变换
x=x';
end
n=length(10); %取输入数据的样本量
z=0;
for i=1:n %计算累加值,并将值赋予矩阵be
z=z+x(i,:);
be(i,:)=z;
end
for i=2:n %对原始数列平行移位
y(i-1,:)=x(i,:);
end
for i=1:n-1 %计算数据矩阵B的第一列数据
c(i,:)=-0.5*(be(i,:)+be(i+1,:));
end
for j=1:n-1 %计算数据矩阵B的第二列数据
e(j,:)=1;
end
for i=1:n-1 %构造数据矩阵B
B(i,1)=c(i,:);
B(i,2)=e(i,:);
end
alpha=inv(B'*B)*B'*y; %计算参数 矩阵
for i=1:n+11 %计算数据估计值的累加数列,如改为n+1为n+m可预测后m-1个值
ago(i,:)=(x(1,:)-alpha(2,:)/alpha(1,:))*exp(-alpha(1,:)*(i-1))+alpha(2,:)/alpha(1,:);
end
var(1,:)=ago(1,:)
for i=1:n+10 %如改n为n+m-1,可预测后m-1个值
var(i+1,:)=ago(i+1,:)-ago(i,:); %估计值的累加数列的还原,并计算出下一预测值
end
for i=1:n

首先, 你的函数是取x作为输入的, 那么为什么还在开始的时候x=[]使得x为空. x既然为空, 就没有x(:,1), 所以下标越界, 这里会报错.
其次, 判断一个矩阵是不是一维列矩阵, 用length绝对是很不好的方法, 直接用 size(x,1) 求行数, size(x,2)求列数然后比较. 如果x是一个数组, 那么x(:)会把所有的数组转换成列式的数组, x(:)'就是行式的数组了.

x是输入,你又来个x=[]?不知道啥意思

建议多注意下函数参数传递

x没定义