Matlab 创建通用代码

Matlab 创建通用代码,matlab,octave,Matlab,Octave,我一直在努力创建一个通用方程来计算θ函数。我现在的方程式不是万能的。这对最大2θ有效。如果计算θ大于2,我必须手动修改θ括号内的数字 有没有办法设置通用功能?类似这样的东西aj=等式。我在下面粘贴了两个代码,一个正常工作,但不是通用的,另一个我试着玩过,结果仍然出错 代码1: for iter = 1:num_iters theta(1) = theta(1) - (alpha/m)*((X*theta-y)')*X(:,1), theta(2) = theta(2) - (

我一直在努力创建一个通用方程来计算θ函数。我现在的方程式不是万能的。这对最大2θ有效。如果计算θ大于2,我必须手动修改θ括号内的数字

有没有办法设置通用功能?类似这样的东西aj=等式。我在下面粘贴了两个代码,一个正常工作,但不是通用的,另一个我试着玩过,结果仍然出错

代码1:

for iter = 1:num_iters


    theta(1) = theta(1) - (alpha/m)*((X*theta-y)')*X(:,1),
    theta(2) = theta(2) - (alpha/m)*((X*theta-y)')*X(:,2);
    theta_hist(iter,1) = theta(1);
    theta_hist(iter,2) = theta(2);

end
代码2:

num_cols = size(X,2)
for inter = 1:num_iters
    for j = 1:num_cols
        theta(j) = theta(j) - (alpha/m)*((X*theta-y)')*X(:,j),
    end,
end, 
该代码的挑战在于,当代码第二次通过循环时,i=1,j=2。函数正在使用θ的新值。这把计算搞砸了

如有任何反馈或建议,我们将不胜感激

有关此问题的更多说明,请参见以下链接:
您应该将代码矢量化。您尚未提供矩阵尺寸说明和/或示例输入,但如果我猜对了,以下内容应能满足您的需要:

% Some random inputs
alpha = 1;
m = 1;
num_iters = 15;
N = 5; k = 12;
X = randn(k,N);
y = randn(k,1);

theta = zeros(N,1);
theta_hist = zeros(N,num_iters);
for i = 1:num_iters
    theta = theta - (alpha/m)*X'*(X*theta-y);
    theta_hist(:,i) = theta;
end

经过多次迭代,我能够回答我自己的问题

代码发布在github的以下链接中:


谢谢您的帮助。

这不是R代码。请添加正确的语言标记。对不起,我正在处理R和八度音。然后我就糊涂了。谢谢你的修正。在一般情况下,所有输入变量的维数是多少?X,y,θ是输入变量。X和y取自csv文件。θ是通过这个方程计算出来的。alpha是一个由用户指定的常数,m是矩阵X或y的长度。您仍然没有提供变量的尺寸,最好是一个可复制的示例。我尝试过类似的事情。这是我面临的挑战。对不起,什么?什么挑战?我们说话的时候我正在输入挑战。很抱歉,上面的评论是错误的。由于评论太长,我已经在下面的链接上发布了评论:事实上,反之亦然。原始代码在第二个元素更新时修改了θ的第一个元素。另一方面,我提供的向量化版本使用了上一次迭代中的整个θ向量,我相信这就是您所追求的。