用octave实验任务: 下表中,X是华氏温度,Y是一分钟内一只蟋蟀的鸣叫次数,试用线性拟合(不利于polyfit()函数)和二次多项式模型拟合这些数据,并画出拟合曲线,其中一半数据作为拟合数据,另一半作为预测数据,并分别求出这两种预测的相对误差的平均值及最值? 观测 1 2 3 4 5 6 7 8 9 10 序号 X 46 49 51 52 54 56 57 58 59 60 Y 40 50 55 63 72 70 77 73 90 93 观测11 12 13 14 15 16 17 18 19 20 序号 X 61 62 63 64 66 67 68 71 72 71 Y 96 88 99 110 113 120 127 137 132 137
在Octave中完成这个实验任务,我们可以按照以下步骤进行: 1. 准备数据 ```octave X = [46 49 51 52 54 56 57 58 59 60 61 62 63 64 66 67 68 71 72 71]'; Y = [40 50 55 63 72 70 77 73 90 93 96 88 99 110 113 120 127 137 132 137]'; ``` 2. 分割数据为拟合集和预测集 ```octave train_idx = 1:2:20; % 奇数索引作为训练集 test_idx = 2:2:20; % 偶数索引作为测试集 X_train = X(train_idx); Y_train = Y(train_idx); X_test = X(test_idx); Y_test = Y(test_idx); ``` 3. 线性拟合(不使用polyfit) ```octave % 构建设计矩阵 A_linear = [ones(size(X_train)), X_train]; % 最小二乘法求解 theta_linear = (A_linear' * A_linear) \ (A_linear' * Y_train); % 计算预测值 Y_pred_linear_train = A_linear * theta_linear; Y_pred_linear_test = [ones(size(X_test)), X_test] * theta_linear; ``` 4. 二次多项式拟合 ```octave % 构建设计矩阵 A_quad = [ones(size(X_train)), X_train, X_train.^2]; % 最小二乘法求解 theta_quad = (A_quad' * A_quad) \ (A_quad' * Y_train); % 计算预测值 Y_pred_quad_train = A_quad * theta_quad; Y_pred_quad_test = [ones(size(X_test)), X_test, X_test.^2] * theta_quad; ``` 5. 计算相对误差 ```octave % 线性模型 rel_err_linear = abs(Y_test - Y_pred_linear_test) ./ Y_test; avg_rel_err_linear = mean(rel_err_linear); max_rel_err_linear = max(rel_err_linear); min_rel_err_linear = min(rel_err_linear); % 二次模型 rel_err_quad = abs(Y_test - Y_pred_quad_test) ./ Y_test; avg_rel_err_quad = mean(rel_err_quad); max_rel_err_quad = max(rel_err_quad); min_rel_err_quad = min(rel_err_quad); ``` 6. 绘制结果 ```octave % 生成平滑曲线用的X值 X_plot = linspace(min(X), max(X), 100)'; % 准备预测值 Y_plot_linear = [ones(size(X_plot)), X_plot] * theta_linear; Y_plot_quad = [ones(size(X_plot)), X_plot, X_plot.^2] * theta_quad; % 绘制图形 figure; hold on; scatter(X_train, Y_train, 'b', 'filled'); % 训练数据 scatter(X_test, Y_test, 'r', 'filled'); % 测试数据 plot(X_plot, Y_plot_linear, 'g-', 'LineWidth', 2); % 线性拟合 plot(X_plot, Y_plot_quad, 'm-', 'LineWidth', 2); % 二次拟合 legend('训练数据', '测试数据', '线性拟合', '二次拟合'); xlabel('华氏温度'); ylabel('鸣叫次数'); title('蟋蟀鸣叫次数与温度关系拟合'); hold off; ``` 7. 显示误差结果 ```octave printf('线性模型:\n'); printf('平均相对误差: %.2f%%\n', avg_rel_err_linear*100); printf('最大相对误差: %.2f%%\n', max_rel_err_linear*100); printf('最小相对误差: %.2f%%\n\n', min_rel_err_linear*100); printf('二次模型:\n'); printf('平均相对误差: %.2f%%\n', avg_rel_err_quad*100); printf('最大相对误差: %.2f%%\n', max_rel_err_quad*100); printf('最小相对误差: %.2f%%\n', min_rel_err_quad*100); ``` 运行这段代码后,你将得到: 1. 拟合曲线图,显示训练数据、测试数据以及两种拟合曲线 2. 两种模型的预测相对误差的平均值、最大值和最小值 从结果可以看出,二次多项式模型通常会比线性模型有更好的拟合效果,但也要注意过拟合的可能性。相对误差的统计量可以帮助评估模型的预测性能。 [2025-04-06 09:01:47 | AI问答 | 1030点数解答]
- [DeepSeek] 用octave实验任务: 下表中,X是华氏温度,Y是一分钟内一只蟋蟀的鸣叫次数,试用线性拟合(不利于polyfit()函数)和二次多项式模型拟合这些数据,并画出拟合曲线,其中一半数据作为拟合数据,另一半作为预测数据,并分别求出这两种预测的相对误差的平均值及最值? 观测 1 2 3 4 5 6 7 8 9 10 序号 X 46 49 51 52 54 56 57 58 59 60 Y 40 50 55 63 72 70 77 73 90 93 观测11 12 13 14 15 16 17 18 19 20 序号 X 61 62 63 64 66 67 68 71 72 71 Y 96 88 99 110 113 120 127 137 132 137(1030点数解答 | 2025-04-06 09:01:47)261
- [字节豆包] 实验任务: 下表中,X是华氏温度,Y是一分钟内一只蟋蟀的鸣叫次数,试用线性拟合(不利于polyfit()函数)和二次多项式模型拟合这些数据,并画出拟合曲线,其中一半数据作为拟合数据,另一半作为预测数据,并分别求出这两种预测的相对误差的平均值及最值 X 46 49 51 52 54 56 57 58 59 60 Y 40 50 55 63 72 70 77 73 90 93 X 61 62 63 64 66 67 68 71 72 71 Y 96 88 99 110 113 120 127 137 132 137(697点数解答 | 2025-04-06 09:06:10)216
- [字节豆包] ========[sample.out]========= Expected | Yours 32: | 33: !| 34: "| 35: #| 36: $| | 32: | 33: !| 34: "| 35: #| 36: $| 37: %| 38: &| 39: '| 40: (| 41: )| | 37: %| 38: &| 39: '| 40: (| 41: )| 42: *| 43: +| 44: ,| 45: -| 46: .| | 42: *| 43: +| 44: ,| 45: -| 46: .| 47: /| 48: 0| 49: 1| 50: 2| 51: 3| | 47: /| 48: 0| 49: 1| 50: 2| 51: 3| 52: 4| 53: 5| 54: 6| 55: 7| 56: 8| | 52: 4| 53: 5| 54: 6| 55: 7| 56: 8| 57: 9| 58: :| 59: ;| 60: <| 61: =| | 57: 9| 58: :| 59: ;| 60: <| 61: =| 62: >| 63: ?| 64: @| 65(543点数解答 | 2025-12-07 13:05:15)43
- [字节豆包] 题目描述 循环打印ASCII码值在区间[32,122]的字符。 按照样例格式:每行打印5个,数字与字符右对齐占3格输出,并且由'|'分割。 样例输出 复制 32: | 33: !| 34: "| 35: #| 36: $| 37: %| 38: &| 39: '| 40: (| 41: )| 42: *| 43: +| 44: ,| 45: -| 46: .| 47: /| 48: 0| 49: 1| 50: 2| 51: 3| 52: 4| 53: 5| 54: 6| 55: 7| 56: 8| 57: 9| 58: :| 59: ;| 60: <| 61: =| 62: >| 63: ?| 64: @| 65: A| 66: B| 67: C| 68: D| 69: E| 70: F| 71: G| 72: H| 73: I| 74: J| 75: K| 76: L| 77: M| 78: N| 79: O| 80: P| 81: Q| 82: R| 83:(143点数解答 | 2025-12-07 13:00:21)59
- [字节豆包] 题目描述 循环打印ASCII码值在区间[32,122]的字符。 按照样例格式:每行打印5个,数字与字符右对齐占3格输出,并且由'|'分割。 样例输出 复制 32: | 33: !| 34: "| 35: #| 36: $| 37: %| 38: &| 39: '| 40: (| 41: )| 42: *| 43: +| 44: ,| 45: -| 46: .| 47: /| 48: 0| 49: 1| 50: 2| 51: 3| 52: 4| 53: 5| 54: 6| 55: 7| 56: 8| 57: 9| 58: :| 59: ;| 60: <| 61: =| 62: >| 63: ?| 64: @| 65: A| 66: B| 67: C| 68: D| 69: E| 70: F| 71: G| 72: H| 73: I| 74: J| 75: K| 76: L| 77: M| 78: N| 79: O| 80: P| 81: Q| 82: R| 8(349点数解答 | 2025-12-07 13:01:26)39
- [字节豆包] 题目描述 循环打印ASCII码值在区间[32,122]的字符。 按照样例格式:每行打印5个,数字与字符右对齐占3格输出,并且由'|'分割。 样例输出 复制 32: | 33: !| 34: "| 35: #| 36: $| 37: %| 38: &| 39: '| 40: (| 41: )| 42: *| 43: +| 44: ,| 45: -| 46: .| 47: /| 48: 0| 49: 1| 50: 2| 51: 3| 52: 4| 53: 5| 54: 6| 55: 7| 56: 8| 57: 9| 58: :| 59: ;| 60: <| 61: =| 62: >| 63: ?| 64: @| 65: A| 66: B| 67: C| 68: D| 69: E| 70: F| 71: G| 72: H| 73: I| 74: J| 75: K| 76: L| 77: M| 78: N| 79: O| 80: P| 81: Q| 82: R| 8(348点数解答 | 2025-12-07 13:02:32)46
- [字节豆包] 题目描述 循环打印ASCII码值在区间[32,122]的字符。 按照样例格式:每行打印5个,数字与字符右对齐占3格输出,并且由'|'分割。 样例输出 复制 32: | 33: !| 34: "| 35: #| 36: $| 37: %| 38: &| 39: '| 40: (| 41: )| 42: *| 43: +| 44: ,| 45: -| 46: .| 47: /| 48: 0| 49: 1| 50: 2| 51: 3| 52: 4| 53: 5| 54: 6| 55: 7| 56: 8| 57: 9| 58: :| 59: ;| 60: <| 61: =| 62: >| 63: ?| 64: @| 65: A| 66: B| 67: C| 68: D| 69: E| 70: F| 71: G| 72: H| 73: I| 74: J| 75: K| 76: L| 77: M| 78: N| 79: O| 80: P| 81: Q| 82: R| 8(152点数解答 | 2025-12-07 13:05:36)55
- [字节豆包] 题目描述 循环打印ASCII码值在区间[32,122]的字符。 按照样例格式:每行打印5个,数字与字符右对齐占3格输出,并且由'|'分割。 样例输出 复制 32: | 33: !| 34: "| 35: #| 36: $| 37: %| 38: &| 39: '| 40: (| 41: )| 42: *| 43: +| 44: ,| 45: -| 46: .| 47: /| 48: 0| 49: 1| 50: 2| 51: 3| 52: 4| 53: 5| 54: 6| 55: 7| 56: 8| 57: 9| 58: :| 59: ;| 60: <| 61: =| 62: >| 63: ?| 64: @| 65: A| 66: B| 67: C| 68: D| 69: E| 70: F| 71: G| 72: H| 73: I| 74: J| 75: K| 76: L| 77: M| 78: N| 79: O| 80: P| 81: Q| 82: R| 8(577点数解答 | 2025-12-07 13:07:21)38
- [字节豆包] 循环打印ASCII码值在区间[32,122]的字符。 按照样例格式:每行打印5个,数字与字符右对齐占3格输出,并且由'|'分割。 样例输出 复制 32: | 33: !| 34: "| 35: #| 36: $| 37: %| 38: &| 39: '| 40: (| 41: )| 42: *| 43: +| 44: ,| 45: -| 46: .| 47: /| 48: 0| 49: 1| 50: 2| 51: 3| 52: 4| 53: 5| 54: 6| 55: 7| 56: 8| 57: 9| 58: :| 59: ;| 60: <| 61: =| 62: >| 63: ?| 64: @| 65: A| 66: B| 67: C| 68: D| 69: E| 70: F| 71: G| 72: H| 73: I| 74: J| 75: K| 76: L| 77: M| 78: N| 79: O| 80: P| 81: Q| 82: R| 83: S| (447点数解答 | 2025-12-07 17:41:10)53
- [字节豆包] 循环打印ASCII码值在区间[32,122]的字符。 按照样例格式:每行打印5个,数字与字符右对齐占3格输出,并且由'|'分割。 样例输出 复制 32: | 33: !| 34: "| 35: #| 36: $| 37: %| 38: &| 39: '| 40: (| 41: )| 42: *| 43: +| 44: ,| 45: -| 46: .| 47: /| 48: 0| 49: 1| 50: 2| 51: 3| 52: 4| 53: 5| 54: 6| 55: 7| 56: 8| 57: 9| 58: :| 59: ;| 60: <| 61: =| 62: >| 63: ?| 64: @| 65: A| 66: B| 67: C| 68: D| 69: E| 70: F| 71: G| 72: H| 73: I| 74: J| 75: K| 76: L| 77: M| 78: N| 79: O| 80: P| 81: Q| 82: R| 83: S(609点数解答 | 2025-12-07 17:42:08)36
- [字节豆包] 循环打印ASCII码值在区间[32,122]的字符。 按照样例格式:每行打印5个,数字与字符右对齐占3格输出,并且由'|'分割。 样例输出 复制 32: | 33: !| 34: "| 35: #| 36: $| 37: %| 38: &| 39: '| 40: (| 41: )| 42: *| 43: +| 44: ,| 45: -| 46: .| 47: /| 48: 0| 49: 1| 50: 2| 51: 3| 52: 4| 53: 5| 54: 6| 55: 7| 56: 8| 57: 9| 58: :| 59: ;| 60: <| 61: =| 62: >| 63: ?| 64: @| 65: A| 66: B| 67: C| 68: D| 69: E| 70: F| 71: G| 72: H| 73: I| 74: J| 75: K| 76: L| 77: M| 78: N| 79: O| 80: P| 81: Q| 82: R| 83: S(416点数解答 | 2025-12-09 12:11:48)42
- [字节豆包] 循环打印ASCII码值在区间[32,122]的字符。 按照样例格式:每行打印5个,数字与字符右对齐占3格输出,并且由'|'分割。 样例输出 复制 32: | 33: !| 34: "| 35: #| 36: $| 37: %| 38: &| 39: '| 40: (| 41: )| 42: *| 43: +| 44: ,| 45: -| 46: .| 47: /| 48: 0| 49: 1| 50: 2| 51: 3| 52: 4| 53: 5| 54: 6| 55: 7| 56: 8| 57: 9| 58: :| 59: ;| 60: <| 61: =| 62: >| 63: ?| 64: @| 65: A| 66: B| 67: C| 68: D| 69: E| 70: F| 71: G| 72: H| 73: I| 74: J| 75: K| 76: L| 77: M| 78: N| 79: O| 80: P| 81: Q| 82: R| 83: S(169点数解答 | 2025-12-09 20:42:46)50