为什么Matlab说这不是一个整数?

为什么Matlab说这不是一个整数?,matlab,Matlab,我想对矩阵的不同列求和 J = (1 / (2*m))*symsum(theta * transpose(X(i,:)) - y(:,i), i, 1, m); Matlab返回错误: 下标索引必须是实正整数或逻辑数 m是长度(y),X和y是矩阵。不是MatLab专家,但大多数编程语言将以最精确的操作数类型返回值 在您的例子中,(1/(2*m))是一个浮点值,因此所有剩余的整数都将转换为浮点值以计算结果,并且结果将是相同的类型。i的值是什么?不要使用symsum。这是用于符号数学的。将syms

我想对矩阵的不同列求和

J = (1 / (2*m))*symsum(theta * transpose(X(i,:)) - y(:,i), i, 1, m);
Matlab返回错误: 下标索引必须是实正整数或逻辑数


m是长度(y),X和y是矩阵。

不是MatLab专家,但大多数编程语言将以最精确的操作数类型返回值


在您的例子中,(1/(2*m))是一个浮点值,因此所有剩余的整数都将转换为浮点值以计算结果,并且结果将是相同的类型。

i的值是什么?不要使用
symsum
。这是用于符号数学的。将
symsum
替换为
sum
,并可能将其放入
循环中,以
i=1:m
theta
X
y
看起来像是数字矩阵。@jukhamil-顺便说一句,这看起来像是通过梯度下降或任何最小化此代价函数的方法用于线性回归的代价函数。代替循环,您只需执行以下操作:
J=(1/(2*m))*sum((X*theta-y)。^2)
假设
X
是您的数据矩阵,其中每行是一个样本,每列是一个变量,
y
是基本真值。总之,不要在这里使用
symsum
。“sum”如何理解一次只取一列数据矩阵?而且,语法sum(form,var,a,b)的要点不是让我们不必编写循环吗?(Var从a到b取值)你完全忽略了我说的话
symsum
用于符号变量。您正在使用数字矩阵。您不能以任何形式使用它,因为您使用了错误的数据类型。您可以使用
sum
,但您需要小心提供的参数。请看我之前的评论。那是不正确的。问题中的错误是使用了
i
的值。您假设可以计算输出,但在本例中不能。此外,返回的错误非常清楚。关键字下标是指索引到数组中。这与计算错误无关。这是数字矩阵和符号矩阵之间的类型冲突,而不是浮点和整数之间的差异。此外,MATLAB的默认数据类型是
double
,而不是
float
rayryeng。对不起,我误解了你的问题。@SystemCrash-这不是问题。只是在将来提供答案时要小心。仔细阅读问题。顺便说一句,这不是我的问题。我刚刚对你的回答发表了评论。