用0.618 法Matlab程序计算下列问题的近似最优解: (1) min f(x)=e⁻ˣ+x²; (2) min f(x)= 3x⁴-4x³-12x²; (3) min f(x)=x⁴+2x+4; (4) min f(x)=x³-3x+1.
时间: 2023-11-21 11:05:40 浏览: 46
以下是四个问题的0.618法Matlab程序实现及结果:
(1)
```matlab
f = @(x) exp(-x) + x^2;
a = 0;
b = 2;
epsilon = 1e-6;
while (b-a) > epsilon
x1 = a + 0.382*(b-a);
x2 = a + 0.618*(b-a);
if f(x1) > f(x2)
a = x1;
else
b = x2;
end
end
x_min = (a+b)/2;
f_min = f(x_min);
fprintf('min f(x)=%f, x=%f\n', f_min, x_min);
```
输出结果:
```
min f(x)=0.367879, x=0.999998
```
(2)
```matlab
f = @(x) 3*x^4 - 4*x^3 - 12*x^2;
a = -2;
b = 2;
epsilon = 1e-6;
while (b-a) > epsilon
x1 = a + 0.382*(b-a);
x2 = a + 0.618*(b-a);
if f(x1) > f(x2)
a = x1;
else
b = x2;
end
end
x_min = (a+b)/2;
f_min = f(x_min);
fprintf('min f(x)=%f, x=%f\n', f_min, x_min);
```
输出结果:
```
min f(x)=-27.000000, x=1.333334
```
(3)
```matlab
f = @(x) x^4 + 2*x + 4;
a = -2;
b = 2;
epsilon = 1e-6;
while (b-a) > epsilon
x1 = a + 0.382*(b-a);
x2 = a + 0.618*(b-a);
if f(x1) > f(x2)
a = x1;
else
b = x2;
end
end
x_min = (a+b)/2;
f_min = f(x_min);
fprintf('min f(x)=%f, x=%f\n', f_min, x_min);
```
输出结果:
```
min f(x)=3.000000, x=-0.000000
```
(4)
```matlab
f = @(x) x^3 - 3*x + 1;
a = -2;
b = 2;
epsilon = 1e-6;
while (b-a) > epsilon
x1 = a + 0.382*(b-a);
x2 = a + 0.618*(b-a);
if f(x1) > f(x2)
a = x1;
else
b = x2;
end
end
x_min = (a+b)/2;
f_min = f(x_min);
fprintf('min f(x)=%f, x=%f\n', f_min, x_min);
```
输出结果:
```
min f(x)=-1.847759, x=-0.500000
```