正如标题中所述,我正在尝试编写一个函数来计算点(a,b)上f的偏导数。
但是,在(0,0)处求出的偏导数的输出太大了。
我的猜测是我的计算偏导数的算法是错误的。但是我不知道如何。
自从我上次使用MATLAB以来已经有很长时间了,所以如果我犯了一些错误或使用了无效的代码编写方式,我对此表示歉意。
我的代码如下:
function derivative = PartialDeriv(f, a, b, i)
h = 0.0001;
fn = zeros(1,2);
if i == 1
fn(i) = (f(a+h,b)-f(a,b)/h);
elseif i==2
fn(i) = (f(a,b+h)-f(a,b)/h);
end
derivative = fn(i);
end
调用我的函数,我得到:
PartialDeriv(f,a,b,i)
其中f是
f = @(x,y)(x-1).^2+(y-1).^2
我得到:
f = -1.9998e+04
用手做我应该得到-2。
i ,出现在以下参数中:
PartialDeriv(f,a,b,i)
表示我的索引,以便区分关于x和y的偏导数。
意味着fn(1)是关于x和的偏导数 fn(2)是相对于y的偏导数。
答案 0 :(得分:1)
在两种情况下您都错过了括号。
应该是fn(i) = (f(a+h,b)-f(a,b))/h;
而不是fn(i) = (f(a+h,b)-f(a,b)/h);
。
稍微修改一下代码,我相信这种结构更适合您的意图:
function derivative = PartialDeriv(f, a, b)
h = 0.0001;
derivative = zeros(1,2);
derivative(1) = (f(a+h,b)-f(a,b))/h;
derivative(2) = (f(a,b+h)-f(a,b))/h;
end