酷代码 AI
菜单
全部AI  /  AI问答
服务商

用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点数解答]

热门AI查看更多
“AI写代码神器”擅长各种语言编程、解释代码、注解补充。 在这里填写你的问题。如:写出java冒泡排序算法。
一个入口掌握所有。 在这输入任何问题,或者要AI输出的内容。
将阿拉伯数字转为人明币大写,如:数字1000转换为壹仟。
AI生成爆文标题,能够快速创作出极具吸引力的标题,促使短视频、自媒体文章的点击率与阅读量迅猛攀升。 此处填写一个原始标题,如:一般人怎样打理自身的社交圈?
AI生成新闻评论。 在这里填入新闻内容。
AI生成内容摘要。 在此处填入需要生成摘要的内容,还可以输入4000字。
AI生成主持词,擅长团建、年会、婚礼、节日等场合的主持词编写。 在这里填入主持场景,如:运动会
AI快速生成周报、月报、日报、年终总结等各类总结报告。 在这里简单输入工作目标、指标、成果,没有任何格式或特殊需求。如:计划年销售业绩1000万,实际完成800万。
输入一个字,显示以这个字开头的歇后语
输入一个字,显示以这个字开头的成语
极速在线生成证件照
极速更换证件照红、蓝、白底色
实用工具查看更多
数独游戏 [娱乐类]
数独(Sudoku)是经典的9x9数字逻辑谜题。在有81个小格的九宫格内,玩家依据初始数字推理填入1 - 9的数字,要保证每行、每列以及每个3x3宫格中的数字都不重复。这款在线数独游戏有多难度可选,没有头绪时,可以点开答案看一下哦^_^
3D魔方 [娱乐类]
基于three.js的小游戏,锻炼玩家的眼力和反应力,非常不错
经典推箱子 [娱乐类]
基于H5的经典推箱子小游戏,锻炼玩家的眼力和反应力,非常不错
摸鱼五子棋 [娱乐类]
基于H5的五子棋人机对练,锻炼玩家的眼力和反应力,非常不错
速度打字机 [娱乐类]
打字速度挑战游戏可以训练玩家的打字速度与准确率。玩家要在给定时间内输入尽量多的单词或句子,从而在规定时间里争取获得最高分。
键盘打字 [娱乐类]
基于H5的键盘打字小游戏,锻炼玩家的眼力和反应力,非常不错
扫雷 [娱乐类]
基于H5的小游戏,锻炼玩家的眼力和反应力,非常不错
2048 [娱乐类]
H5版2048小游戏,锻炼玩家的前瞻力,非常不错
36万 进入2048
相关提问