帮我写一个MATLAB程序:一元四次函数f(x)=3x⁴+x³-9x²+7x+5,用进退法找其单谷区间,再用黄金分割法求极值。再绘制函数图像
时间: 2024-10-09 08:00:45 浏览: 12
当然可以。首先,让我们编写MATLAB程序来完成这个任务:
```matlab
% 定义一元四次函数 f(x)
function y = fourth_order_poly(x)
y = 3*x^4 + x^3 - 9*x^2 + 7*x + 5;
end
% 进退法 (Bisection Method) 寻找单谷区间
a = -10; % 初始区间的左端点
b = 10; % 初始区间的右端点
tol = 1e-6; % 容忍度
max_iter = 100; % 最大迭代次数
while b-a > tol && max_iter > 0
c = (a + b) / 2; % 中间点
if fourth_order_poly(c) * fourth_order_poly(a) < 0
b = c; % 单谷区间在左侧
else
a = c; % 单谷区间在右侧
end
max_iter--;
end
[val, idx] = min(abs(fourth_order_poly([-10:0.1:10])));
x谷 = -10 + idx*0.1; % 获取单谷点x
fprintf('单谷区间: [%f, %f]\n', a, b);
fprintf('单谷点x: %f\n', x谷);
% 黄金分割法 (Golden Section Search) 求极值
golden_ratio = (sqrt(5) - 1) / 2;
phi = golden_ratio;
x_prev = a; % 上一次搜索位置
for iter = 1:100
x_new = a + phi * (b - a); % 更新下一个搜索位置
if fourth_order_poly(x_new) < fourth_order_poly(x_prev)
b = x_new;
else
a = x_new;
end
x_prev = x_new;
阅读全文