Octave实战:函数极值求解、定积分计算与微分方程数值解
1. 求函数f(x)=x^(2/3)(x²-8)的极值 ```octave % 定义函数 f = @(x) x.^(2/3) .* (x.^2 - 8); % 求导 syms x df = diff(x^(2/3)*(x^2-8), x); critical_points = solve(df == 0, x); % 转换为数值 cp_numeric = double(critical_points); % 验证极值 d2f = diff(df, x); for i = 1:length(cp_numeric) x_val = cp_numeric(i); if isreal(x_val) second_deriv = double(subs(d2f, x, x_val)); if second_deriv > 0 disp(['在 x = ', num2str(x_val), ' 处有极小值']); elseif second_deriv < 0 disp(['在 x = ', num2str(x_val), ' 处有极大值']); else disp(['在 x = ', num2str(x_val), ' 处二阶导数为零,需要进一步分析']); end end end % 绘制函数图像 x_vals = linspace(-3, 3, 1000); plot(x_vals, f(x_vals)); title('函数 f(x) = x^{2/3}(x^2-8)'); xlabel('x'); ylabel('f(x)'); grid on; ``` 2. 计算定积分 ∫₀^{π/4} 1/(1-sinx) dx ```octave % 精确值 exact_value = sqrt(2); % 定义被积函数 f = @(x) 1./(1-sin(x)); % 积分区间 a = 0; b = pi/4; % 矩形法 n = 1000; h = (b-a)/n; x = linspace(a, b, n+1); rectangular = h * sum(f(x(1:end-1))); error_rect = abs(rectangular - exact_value); % 梯形法 trapezoidal = h * (sum(f(x)) - (f(a)+f(b))/2); error_trap = abs(trapezoidal - exact_value); % Simpson法 if mod(n,2) == 1 n = n+1; end h = (b-a)/n; x = a:h:b; simpson = h/3 * (f(a) + 4*sum(f(x(2:2:end-1))) + 2*sum(f(x(3:2:end-2))) + f(b)); error_simp = abs(simpson - exact_value); % 输出结果 disp(['精确值: ', num2str(exact_value)]); disp(['矩形法: ', num2str(rectangular), ' 误差: ', num2str(error_rect)]); disp(['梯形法: ', num2str(trapezoidal), ' 误差: ', num2str(error_trap)]); disp(['Simpson法: ', num2str(simpson), ' 误差: ', num2str(error_simp)]); ``` 3. 求解微分方程 y'' - y' + y = 3cos(t) ```octave % 定义微分方程 ode = @(t, y) [y(2); y(2) - y(1) + 3*cos(t)]; % 时间范围 tspan = [0, 2*pi]; % 初始条件 y0 = [0; 0]; % 使用不同方法求解 [t_euler, y_euler] = euler_method(ode, tspan, y0, 1000); [t_rk4, y_rk4] = ode45(ode, tspan, y0); [t_ode23, y_ode23] = ode23(ode, tspan, y0); % 绘制结果 figure; plot(t_euler, y_euler(:,1), 'r-', 'LineWidth', 1.5); hold on; plot(t_rk4, y_rk4(:,1), 'b--', 'LineWidth', 1.5); plot(t_ode23, y_ode23(:,1), 'g:', 'LineWidth', 2); title('微分方程 y'''' - y'' + y = 3cos(t) 的解'); xlabel('t'); ylabel('y(t)'); legend('欧拉法', 'RK4', 'ode23'); grid on; % 欧拉方法实现 function [t, y] = euler_method(ode, tspan, y0, n) t = linspace(tspan(1), tspan(2), n+1)'; h = (tspan(2)-tspan(1))/n; y = zeros(n+1, length(y0)); y(1,:) = y0'; for i = 1:n y(i+1,:) = y(i,:) + h * ode(t(i), y(i,:))'; end end ``` 说明: 1. 极值问题:通过符号计算求导并找到临界点,然后使用二阶导数测试确定极值性质。 2. 数值积分:比较了矩形法、梯形法和Simpson法,并计算了与精确值的误差。 3. 微分方程:实现了欧拉方法并与内置的ode45和ode23比较,使用不同线型和颜色绘制结果。 ######[AI问答 | 1214点数解答 | 2025-04-03 19:09:50]
- C 语言实现链表操作:创建、输出、删除及插入功能详解(字节豆包 | 534点数解答 | 2024-12-09 21:33:48)359
- C语言实现链表创建、输出、删除与插入操作的完整代码及注意要点(字节豆包 | 609点数解答 | 2024-12-18 12:18:21)376
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)369
- 基于逻辑回归的乳腺癌数据分类预测:分析威斯康星乳腺肿瘤数据集(阿里通义 | 889点数解答 | 2025-06-19 12:02:10)213
- 新员工7月业绩冲刺计划书:15天填补28000元缺口,附Word转换指南!(DeepSeek | 233点数解答 | 2025-07-16 18:48:05)119
- 新员工业绩达标计划书:完善方案待店长审批,多维度优化冲刺7月目标!(字节豆包 | 500点数解答 | 2025-07-16 18:50:16)110
- C++ 代码实现自定义运算 x@y = x² + y² - xy 及 x@(x+y) 计算(DeepSeek | 215点数解答 | 2025-12-13 15:08:14)91
- C++ 实现根据输入正整数奇偶性计算偶数和或约数和(字节豆包 | 838点数解答 | 2026-02-28 20:23:59)50
- JavaScript开发必备:深入解析isNaN()函数及使用示例(阿里通义 | 217点数解答 | 2023-11-09 01:03:12)261
- JavaScript开发:手把手教你实现一个 call 函数!(阿里通义 | 361点数解答 | 2023-11-09 01:51:10)251
- JS开发:手把手教你实现一个简单的bind函数!(阿里通义 | 276点数解答 | 2023-11-09 01:51:16)286
- PHP开发必知:func_num_args()函数获取函数参数数量的用法及示例(百度文心 | 286点数解答 | 2023-11-09 17:57:51)212