在Matlab中,我想創建一個名爲J(theta_0, theta_1)
的成本函數的偏導數(以便進行梯度下降所需的計算)。計算一個數學函數的總和的導數-MATP
功能J(theta_0, theta_1)
定義爲:
比方說h_theta(x) = theta_1 + theta_2*x
。另外:alpha
是固定的,給出了起始值theta_1
和theta_2
。假設在這個例子中:alpha = 0.1
theta_1 = 0
,theta_2 = 1
。 另外我有兩個不同的矢量 x和y的所有值。
VectorOfX =
5
5
6
VectorOfX =
6
6
10
步驟我走上嘗試在Matlab來解決這個問題:我不知道如何在MATLAB來解決這個問題。所以我開始嘗試在Matlab中定義一個函數,並嘗試這樣做:
theta_1 = 0
theta_2 = 1
syms x;
h_theta(x) = theta_1 + t2*x;
這工作,但不是我真正想要的。我想要得到x ^(i),這是一個向量。我想接下來的事情是:
theta_1 = 0
theta_2 = 1
syms x;
h_theta(x) = theta_1 + t2*vectorOfX(1);
這提供了以下錯誤:
Error using sym/subsindex (line 672)
Invalid indexing or function definition. When defining a
function, ensure that the body of the function is a SYM
object. When indexing, the input must be numeric, logical or
':'.
Error in prog1>gradientDescent (line 46)
h_theta(x) = theta_1 + theta_2*vectorOfX(x);
我擡頭一看這個錯誤,不知道如何解決它爲這個特殊的例子。我感覺我使matlab對我工作,而不是使用它對我有利。
那豈不是更容易區分自己的作用?爲什麼你堅持使用MATLAB來做呢? – Jubobs 2014-11-02 10:17:02
它可能會使它更容易一些,雖然我上面描述的問題仍然會存在。即使有區別,我仍然必須總結範圍h_theta(x ^(i))和y ^(i)。 – Joop 2014-11-02 10:25:27
這是一個家庭作業嗎?如果是這樣,在你的問題中指定它是明智的。 – Jubobs 2014-11-02 11:21:03