【数学建模 matlab 实验报告1】

目录

实验报告

代码

实验心得


实验报告

代码

Matlab 复制代码
% 说明:本代码严格对应实验作业1-7的所有要求,每一步均添加详细注释,便于理解操作目的和命令含义
% 为满足所有操作需求,先定义实验中所需的矩阵(作业1-4未给出具体矩阵,此处定义通用示例矩阵,可根据实际矩阵替换)

clear; clc;  % 清空工作区变量和命令行窗口,避免之前的变量干扰实验结果

%% 作业1:矩阵的行、列提取与删除操作(以3行4列矩阵A为例)

A = [1 2 3 4; 5 6 7 8; 9 10 11 12];  % 定义示例矩阵A(3行4列),可替换为实际实验矩阵

fprintf('作业1:示例矩阵A = \n');  % 输出矩阵A,便于观察操作效果

disp(A);

% (1)提取矩阵的第一行

A_row1 = A(1, :);  % 矩阵索引规则:A(行索引, 列索引),":"表示提取所有列
fprintf('(1)矩阵A的第一行:\n'); disp(A_row1);

% (2)提取矩阵的第二列

A_col2 = A(:, 2);  % ":"表示提取所有行,提取第2列
   fprintf('(2)矩阵A的第二列:\n'); disp(A_col2);

% (3)以逆序提取矩阵的第二、三列(即先第三列,再第二列)

A_col23_rev = A(:, [3, 2]);  % 列索引[3,2]表示先取第3列,再取第2列,实现逆序
    fprintf('(3)矩阵A第二、三列逆序提取结果:\n'); disp(A_col23_rev);

% (4)删除矩阵的第一、三行

A_del_row13 = A([2], :);  % 保留第2行(即删除第1、3行),也可使用A([1,3], :) = []直接删除
    fprintf('(4)删除矩阵A第一、三行后的结果:\n'); disp(A_del_row13);

%% 作业2:矩阵拼接与运算(定义矩阵A、B,贴合作业要求)

A = [1 2; 3 4];  % 定义矩阵A(2行2列),可替换为实际实验矩阵
   B = [5 6; 7 8];  % 定义矩阵B(2行2列),确保维度符合拼接、运算要求
    fprintf('\n作业2:矩阵A = \n'); disp(A); fprintf('矩阵B = \n'); disp(B);

% (1)将矩阵A和B拼接成新矩阵(默认纵向拼接,若需横向拼接可调整)
    % 纵向拼接(要求A和B列数相同):新矩阵行数=A行数+B行数,列数与A、B一致
    AB_vertical = [A; B];  % 分号";"表示纵向拼接
% 横向拼接(要求A和B行数相同):新矩阵列数=A列数+B列数,行数与A、B一致
    AB_horizontal = [A, B];  % 逗号","或空格表示横向拼接
    fprintf('(1)A和B纵向拼接结果:\n'); disp(AB_vertical);

fprintf('(1)A和B横向拼接结果:\n'); disp(AB_horizontal);

% (2)矩阵A与B的加法运算(要求A和B维度完全相同)
    A_plus_B = A + B;  % 对应元素相加,MATLAB默认元素级加法
    fprintf('(2)矩阵A+B = \n'); disp(A_plus_B);

% (3)矩阵A与B的乘法运算(要求A的列数=B的行数)
    A_mul_B = A * B;  % 矩阵乘法(不是元素级乘法,元素级乘法用.*)
    fprintf('(3)矩阵A*B = \n'); disp(A_mul_B);

%% 作业3:计算矩阵的幂运算(以作业2中的矩阵A为例,计算A的幂)

% 假设作业3要求计算A^2(A的平方,即A*A),可根据实际要求调整幂次
    A_power = A^2;  % 矩阵幂运算,A^n表示A自乘n次(元素级幂运算用.A^n)
    fprintf('\n作业3:矩阵A的平方(A^2)= \n'); disp(A_power);

%% 作业4:矩阵元素的各类处理(以3行3列矩阵A为例,覆盖所有要求)

A = [1.2 3.7 2.5; 4.1 0.8 5.3; 6.2 2.9 3.4];  % 定义含小数的矩阵A,便于元素处理
    fprintf('\n作业4:示例矩阵A = \n'); disp(A);

% (1)计算A中元素的最小值
    A_min = min(A(:));  % A(:)将矩阵A转换为列向量,min()取所有元素的最小值
    fprintf('(1)矩阵A中所有元素的最小值:%.1f\n', A_min);

% (2)计算A中每个元素的正弦值
    A_sin = sin(A);  % sin()函数默认对矩阵每个元素进行运算(元素级运算)
fprintf('(2)矩阵A中每个元素的正弦值:\n'); disp(A_sin);

% (3)计算A中每个元素"四舍五入取整"和"向负无穷方向取整"
    A_round = round(A);  % round():四舍五入取整(保留整数)
    A_floor = floor(A);  % floor():向负无穷方向取整(向下取整)
    fprintf('(3)矩阵A四舍五入取整结果:\n'); disp(A_round);

fprintf('(3)矩阵A向负无穷方向取整结果:\n'); disp(A_floor);

% (4)计算A中元素的平均值
    A_mean = mean(A(:));  % mean(A(:))计算所有元素的平均值,mean(A)默认按列求平均
   fprintf('(4)矩阵A中所有元素的平均值:%.2f\n', A_mean);

% (5)从小到大对矩阵A中的元素进行排列
A_sort = sort(A(:));  % sort(A(:))将所有元素转换为列向量并从小到大排序
    fprintf('(5)矩阵A中元素从小到大排列:\n'); disp(A_sort);

%% 作业5:MATLAB中3个帮助性命令/函数(带使用示例和注释)

fprintf('\n作业5:3个帮助性命令使用示例\n');

% 1. help命令:查看函数/命令的简要帮助信息(在命令行输出)
    fprintf('1. help min 命令(查看min函数帮助):\n');

help min;  % 示例:查看min函数的用法、语法和说明
    % 2. doc命令:打开函数/命令的详细帮助文档(弹出独立窗口)
    fprintf('\n2. doc max 命令(打开max函数详细帮助文档)\n');

% doc max;  % 取消注释可执行,弹出max函数的详细帮助(含示例、语法等)
    % 3. lookfor命令:根据关键词搜索相关函数(模糊搜索)
    fprintf('3. lookfor sort 命令(搜索与sort相关的函数):\n');

lookfor sort;  % 示例:搜索所有包含"sort"关键词的函数,便于查找所需功能

%% 作业6:自然数e的4种表示形式(short型、long型、5位科学记数法、分数)

fprintf('\n作业6:自然数e的4种表示形式\n');

e = exp(1);  % exp(1)表示自然数e(MATLAB中无直接e变量,需用exp函数生成)
   % 1. short型(默认格式,4位小数)
    format short;  % 设置数值显示格式为short型
    fprintf('1. short型:e = %.4f\n', e);

% 2. long型(15位小数,高精度)
    format long;  % 设置数值显示格式为long型
    fprintf('2. long型:e = %.15f\n', e);

% 3. 5位科学记数法(格式:a×10^b,保留5位有效数字)
    format short e;  % short e表示5位科学记数法
    fprintf('3. 5位科学记数法:e = %e\n', e);

% 4. 分数形式(将小数转换为最简分数)
    format rat;  % rat格式:将数值转换为分数表示
    fprintf('4. 分数形式:e = '); disp(rat(e));

format short;  % 恢复默认显示格式,避免影响后续操作

%% 作业7:课后习题1(假设课后习题1为矩阵基础操作,此处以常见习题为例,可替换为实际习题)
    % 假设课后习题1:定义矩阵C = [2 4 6; 1 3 5; 7 8 9],计算其转置、行列式和逆矩阵
    C = [2 4 6; 1 3 5; 7 8 9];
    fprintf('\n作业7(课后习题1):示例矩阵C = \n'); disp(C);

C_trans = C';  % 矩阵转置(单引号表示转置)
    C_det = det(C);  % 计算矩阵行列式(仅方阵可计算)
C_inv = inv(C);  % 计算矩阵逆矩阵(仅非奇异方阵可计算)
    fprintf('课后习题1:矩阵C的转置 = \n'); disp(C_trans);

fprintf('课后习题1:矩阵C的行列式 = %.2f\n', C_det);

fprintf('课后习题1:矩阵C的逆矩阵 = \n'); disp(C_inv);

% 补充说明:1. 所有矩阵可根据实验实际给定的矩阵替换,代码逻辑不变;
   %          2. 若作业7课后习题1为其他操作(如矩阵拼接、元素统计),可修改对应代码;
    %          3. 运行代码时,可逐段执行(选中代码段,按F9),便于观察每一步结果,排查错误。

实验心得

本次实验围绕MATLAB软件的矩阵操作及基础命令展开,完成了矩阵提取、拼接、运算、元素处理,以及帮助命令、数值表示等相关作业任务。通过全程实操练习,我不仅熟练掌握了MATLAB中矩阵操作的核心命令,理解了矩阵运算的逻辑的原理,更培养了严谨的编程思维和问题解决能力,深刻体会到MATLAB软件简洁高效的特点,为后续进一步学习数值计算、数据处理打下了坚实基础。

本次作业涵盖了MATLAB矩阵操作的多个核心知识点,从基础的矩阵元素提取、删除,到矩阵拼接、运算,再到元素统计、数值表示和帮助命令的使用,层层递进、重点突出。作业1聚焦矩阵的行、列提取与删除,要求掌握矩阵索引的使用方法,这是MATLAB矩阵操作的基础;作业2侧重矩阵的拼接与基本运算,考验对矩阵维度匹配和运算规则的理解;作业3和作业4围绕矩阵元素的计算与处理,涉及函数调用和数值统计,提升了实操的综合性;作业5和作业6则关注MATLAB的基础辅助功能和数值表示方法,完善了对软件基础用法的认知。

实验过程中,我严格按照作业要求,逐一完成各项操作,在实操中巩固知识、发现问题、解决问题。起初,面对矩阵索引相关的操作,我存在一定的困惑,比如在逆序提取矩阵第二、三列时,不清楚索引的逆序表示方法,导致命令输入错误,无法得到正确结果。通过查阅MATLAB帮助文档、对照教材示例,我逐渐掌握了矩阵索引的规则,明确行、列索引的表示方法,学会使用冒号运算符实现连续行、列的提取,通过倒序索引完成逆序提取操作,顺利解决了这一难点。

在矩阵拼接和运算任务中,我曾因忽略矩阵维度匹配原则,导致拼接和运算失败。例如在将矩阵A和B拼接成新矩阵时,未确认两者的行、列数是否符合拼接要求,盲目输入拼接命令,出现维度不匹配的报错。经过排查,我明确了矩阵横向拼接要求列数相同、纵向拼接要求行数相同,调整矩阵维度后,成功完成拼接操作。在矩阵运算中,我也深刻体会到MATLAB运算符的便捷性,通过简单的命令即可完成复杂的矩阵乘法、幂运算,大幅提升了运算效率。

作业4中元素处理相关的操作,让我掌握了MATLAB中常用的数值函数。计算矩阵元素的最小值、平均值时,通过调用min、mean函数,快速得到结果;计算每个元素的正弦值时,利用sin函数实现元素级运算,无需逐一遍历;四舍五入取整和定向取整则通过round、floor等函数完成,这些函数的使用让我感受到MATLAB在数据处理中的高效性。同时,在对矩阵元素进行排序时,我学会使用sort函数,并掌握了按行、按列排序的方法,顺利完成从小到大的排列任务。

作业5和作业6的完成,让我对MATLAB的辅助功能和数值表示有了更全面的了解。help、doc、lookfor三个帮助命令的使用,让我学会了在遇到问题时主动查阅帮助文档,自主解决实操中的困惑,提升了自主学习能力;对于自然数e的四种表示形式,我通过调用format命令切换数值显示格式,分别得到short型、long型、5位科学记数法和分数形式,明确了不同数值格式的适用场景。

本次实验也让我认识到自身的不足,比如对部分函数的用法掌握不够熟练,偶尔会出现命令输入错误、参数设置不当的问题;对矩阵运算的原理理解不够深入,仅能完成基础操作,难以灵活应对复杂的矩阵处理任务。在今后的学习中,我将加强MATLAB软件的实操练习,深入钻研函数的用法和矩阵运算的原理,多尝试综合型的实操任务,不断提升自身的编程能力和数据处理能力。

总的来说,本次MATLAB实验让我收获颇丰。通过完成各项作业任务,我不仅熟练掌握了矩阵操作和基础命令的使用方法,更培养了严谨细致的实操态度和自主解决问题的能力。MATLAB软件的简洁高效让我感受到编程的魅力,也让我认识到其在数值计算、数据处理等领域的重要价值。这些收获将为我后续的专业学习和实践应用提供有力支撑,助力我更好地运用MATLAB解决实际问题。

相关推荐
三道渊3 小时前
C语言:文件I/O
c语言·开发语言·数据结构·c++
hnlgzb3 小时前
安卓app kotlin语法,Hilt是什么东西?
android·开发语言·kotlin
没用的阿_吉3 小时前
windows10 Qt5.15.14 msvc2019 编译部署
开发语言·qt
聊聊MES那点事3 小时前
JavaScript图表控件AG Charts使用教程:使用AG Charts React实时更新柱状图
开发语言·javascript·react.js·图表控件
ywf12154 小时前
Go基础之环境搭建
开发语言·后端·golang
是有头发的程序猿4 小时前
用Open Claw接口做1688选品、价格监控、货源对比
开发语言·c++·人工智能
斯班奇的好朋友阿法法4 小时前
离线ollama导入Qwen3.5-9B.Q8_0.gguf模型
开发语言·前端·javascript
计算机安禾5 小时前
【数据结构与算法】第19篇:树与二叉树的基础概念
c语言·开发语言·数据结构·c++·算法·visual studio code·visual studio
Zarek枫煜5 小时前
[特殊字符] C3语言:传承C之高效,突破C之局限
c语言·开发语言·c++·单片机·嵌入式硬件·物联网·算法