MATLAB程序会提示未定义函数或变量x,怎么解决

function g(x); %定义函数gm(x)
for j=1:10
clc; %清屏,以使计算结果独立显示
format long; %设置计算精度
if length(x(:,1))==1 %对输入矩阵进行判断,如不是一维列矩阵,进行转置变换
x=x';
end;
n=length(x); %取输入数据的样本量
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+1 %计算数据估计值的累加数列,如改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 %如改n为n+m-1,可预测后m-1个值
var(i+1,:)=ago(i+1,:)-ago(i,:); %估计值的累加数列的还原,并计算出下一预测值
end
for i=1:n
error(i,:)=var(i,:)-x(i,:); %计算残差
end
c=std(error)/std(x); %调用统计工具箱的标准差函数计算后验差的比值c
ago %显示输出预测值的累加数列
alpha %显示输出参数α、μ数列
var %显示输出预测值
error %显示输出误差
c %显示后验差的比值c
var=fix(var);
for i=2:11
x(i-1)=var(i);
end
end

情况一:符号变量

必须要定义,定义之后才可以使用。如下面的例子,未定义就会出错。符号变量定义方法例如: sym x 或者 syms x ,两者有区别也有共同点。

情况二:计算过程当中的存储数值的变量

可以不必定义,随时需要,随时定义,但是有时候如果变量很多,那么最好提前声明,声明的时候,可以直接赋予0值,并且注释,这样方便以后区分,避免混淆。

具体如下:

电脑常见问题解决

1、无法自动识别硬盘控制器

使用非正版的个别操作系统光盘,在安装系统时,容易出现此错误。原因是非正版光盘自动加载的硬盘控制器驱动不符合电脑自身需要的驱动。这种情况就建议换正版光盘安装操作系统。

2、手动更新错误的驱动程序

windows操作系统正常使用,但手动更新驱动程序把硬盘控制器的驱动程序更新错误,导致此故障。解决方法是进入windows系统高级菜单,选择最后一次的正常配置,即可正常进入系统。

3、bios设置变化后所导致

windows操作系统正常,但是由于某些原因,用户修改了bios设置,导致0x0000007b故障。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-16

你有没有给x赋值?没有的话,函数g(x)没法调用参数x就出错了。例如试试:

x = 1:10;
g(x)

追问

如果要把X=[103783 109170 115993 122737 131176 135192 135909 136184 140569 145531 150406 159431 183792 213456 235997 258676 280508 291448 306647 324939 348002 361732 375000];
在哪里改,详细点,不懂,谢谢了?

追答

你直接这样可以么?在命令行窗口输入:

x=[103783 109170 115993 122737 131176 135192 135909 136184 140569 145531 150406 159431 183792 213456 235997 258676 280508 291448 306647 324939 348002 361732 375000];
g(x)

追问

结果完全不符合啊,我这是要做这一列数据的GM(1,1)模型改进,基于时间序列的,大神要不帮帮我编一个

本回答被网友采纳
第2个回答  2017-08-28
自己看在flag拿来运算之前,是否有值。在出问题的语句上设断点,就能看到是否有值了
相似回答