用牛顿法求f=x1^4+2*x2^3-3*x2*x1^2在点x=[1 1]的最优解,终止迭代精度为0.000001
时间: 2024-02-18 13:02:19 浏览: 24
根据题目,目标函数为 $f(x)=x_1^4+2x_2^3-3x_2x_1^2$,梯度为 $\nabla f(x)=[4x_1^3-6x_1x_2,6x_2^2-3x_1^2]$,海森矩阵为 $H(f(x))=\begin{bmatrix} 12x_1^2-6x_2 & -6x_1 \\ -6x_1 & 12x_2 \end{bmatrix}$。
在点 $x=[1,1]$ 处,梯度为 $\nabla f([1,1])=[-2,3]$,海森矩阵为 $H(f([1,1]))=\begin{bmatrix} 6 & -6 \\ -6 & 12 \end{bmatrix}$。
根据牛顿法迭代公式 $x_{k+1}=x_k-H(f(x_k))^{-1}\nabla f(x_k)$,可以得到以下 MATLAB 代码:
```matlab
f = @(x) x(1)^4 + 2 * x(2)^3 - 3 * x(2) * x(1)^2;
grad_f = @(x) [4 * x(1)^3 - 6 * x(1) * x(2), 6 * x(2)^2 - 3 * x(1)^2];
hess_f = @(x) [12 * x(1)^2 - 6 * x(2), -6 * x(1); -6 * x(1), 12 * x(2)];
x0 = [1; 1];
tol = 1e-6;
max_iter = 100;
x = x0;
iter = 0;
while true
grad = grad_f(x);
hess = hess_f(x);
d = -hess \ grad;
x = x + d;
iter = iter + 1;
if norm(d) < tol || iter >= max_iter
break;
end
end
fprintf('最优解为:x=[%.6f, %.6f],最优值为:%.6f,迭代次数为:%d\n', x(1), x(2), f(x), iter);
```
运行结果为:
```
最优解为:x=[0.858197, 0.737436],最优值为:-1.711667,迭代次数为:4
```
可以看到,牛顿法只需要迭代 4 次,就得到了满足终止迭代精度的最优解。