跳到正文
TranquilYu's Blog
返回

MATLAB基础作业其一

约 8 分钟 · 1,179 字
笔记
文章目录10 节
  1. 一、基础巩固题(每题8 分,共4 题,满分32 分)
  2. 1. 温度转换计算
  3. 2. 简单表达式求值
  4. 3. 矩阵创建与输出
  5. 4. 矩阵基本运算
  6. 二、能力提升题(每题17 分,共4 题,满分68 分)
  7. 1. 矩阵条件筛选
  8. 2. 线性代数方程组求解
  9. 3. 描述性统计分析
  10. 4. 线性规划问题求解
文章目录10 节

MATLAB 基础第一次作业

一、基础巩固题(每题8 分,共4 题,满分32 分)

目标:熟练掌握MATLAB 的基本运算规则、变量赋值及简单函数使用。

1. 温度转换计算

编写代码将25 摄氏度转换为华氏度,转换公式为F = C × 9/5 + 32。要求:定义变量C 存储摄氏度数值,计算后输出结果(保留1 位小数)。

MATLAB代码:

% 定义摄氏度变量
C = 25;

% 根据公式计算华氏度
F = C * 9/5 + 32;

% 输出结果,保留1位小数
fprintf('25摄氏度转换为华氏度是: %.1f°F\n', F);

运行结果截图:

命令行输出:

>> h1_1

25摄氏度转换为华氏度是: 77.0°F

2. 简单表达式求值

计算表达式16+log10(1000)sin(π2)235\frac{\sqrt{16} + \log_{10}(1000) - \sin(\frac{\pi}{2})}{2^3 - 5}的值。要求:使用MATLAB 内置函数(sqrt、log10、sin、pi)计算,直接输出结果。

MATLAB代码:

% 计算分子部分
numerator = sqrt(16) + log10(1000) - sin(pi/2);

% 计算分母部分
denominator = 2^3 - 5;

% 计算整个表达式的值
result = numerator / denominator;

% 输出结果
disp(result);

运行结果截图:

命令行输出:

>> h1_2

​ 2

3. 矩阵创建与输出

创建一个3×3 的矩阵A,元素为1-9 的递增整数(第一行1-3,第二行4-6,第三行7-9),再创建一个3×1 的列向量B(元素为[2;4;6]),最后分别输出矩阵A 和向量B。

MATLAB代码:

% 创建 3×3 矩阵 A
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];

% 创建 3×1 列向量 B
B = [2; 4; 6];

% 输出矩阵 A
disp('矩阵 A:');
disp(A);

% 输出向量 B
disp('列向量 B:');
disp(B);

运行结果截图:

命令行输出:

>> h1_3

矩阵 A: 1 2 3 4 5 6 7 8 9

列向量 B: 2 4 6

4. 矩阵基本运算

基于第3 题中的矩阵A 和向量B,计算以下结果并输出:(1)A 的转置矩阵;(2)A 与B 的乘法(A*B);(3)A 中所有元素的平均值。

MATLAB代码:

% 矩阵A和列向量B
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
B = [2; 4; 6];

% 计算A的转置矩阵
A_transpose = A';
disp('A的转置矩阵:');
disp(A_transpose);

% 计算A与B的乘法(A*B)
AB_product = A * B;
disp('A与B的乘法结果:');
disp(AB_product);

% 计算A中所有元素的平均值
A_mean = mean(A(:));
disp('A中所有元素的平均值:');
disp(A_mean);

运行结果截图:

命令行输出:

>> h1_4

A的转置矩阵: 1 4 7 2 5 8 3 6 9

A与B的乘法结果: 28 64 100

A中所有元素的平均值: 5

二、能力提升题(每题17 分,共4 题,满分68 分)

目标:结合多个知识点,实现复杂逻辑与数据处理。

1. 矩阵条件筛选

创建一个4×4 的随机矩阵(元素范围0-10,使用randi 函数),筛选出矩阵中大于5 的元素并输出这些元素的位置(行号和列号)及具体数值。

MATLAB代码:

% 创建 4×4 的随机矩阵,元素范围 0 - 10
A = randi([0, 10], 4, 4);

% 输出原始矩阵
disp('原始矩阵 A:');
disp(A);

% 筛选出大于 5 的元素的行和列索引
[row, col] = find(A > 5);

% 筛选出大于 5 的元素值
values = A(A > 5);

% 输出大于 5 的元素的位置(行号和列号)及具体数值
disp('矩阵中大于 5 的元素:');
for i = 1:length(row)
    fprintf('行号:%d,列号:%d,数值:%d\n', row(i), col(i), values(i));
end

运行结果截图:

命令行输出:

>> h2_1

原始矩阵 A: 8 6 10 10 9 1 10 5 1 3 1 8 10 6 10 1

矩阵中大于 5 的元素: 行号:1,列号:1,数值:8 行号:2,列号:1,数值:9 行号:4,列号:1,数值:10 行号:1,列号:2,数值:6 行号:4,列号:2,数值:6 行号:1,列号:3,数值:10 行号:2,列号:3,数值:10 行号:4,列号:3,数值:10 行号:1,列号:4,数值:10 行号:3,列号:4,数值:8

2. 线性代数方程组求解

已知线性方程组:

{2x1+3x2x3=10x12x2+4x3=53x1+x22x3=12\begin{cases} 2x_1 + 3x_2 - x_3 = 10 \\ x_1 - 2x_2 + 4x_3 = -5 \\ 3x_1 + x_2 - 2x_3 = 12 \end{cases}

将其表示为Ax = b 的形式(其中A 为系数矩阵,b 为常数项向量),使用MATLAB 求解x,并验证A ∗ x 是否等于b。

MATLAB代码:

% 定义系数矩阵 A
A = [2, 3, -1; 1, -2, 4; 3, 1, -2];
% 定义常数项向量 b
b = [10; -5; 12];
% 求解线性方程组 Ax = b
x = A \ b;
% 验证 A*x 是否等于 b
verify = A * x;

% 输出结果
disp('方程组的解 x:');
disp(x);
disp('验证 A*x 的结果:');
disp(verify);
disp('常数项向量 b:');
disp(b);

运行结果截图:

命令行输出:

>> h2_2

方程组的解 x: 2.7143 1.0571 -1.4000

验证 A*x 的结果: 10 -5 12

常数项向量 b: 10 -5 12

3. 描述性统计分析

生成一个包含50 个随机数的向量(服从均值为10、标准差为2 的正态分布,使用normrnd 函数),计算该向量的描述性统计量:均值、中位数、标准差、方差、极差(最大值减最小值),并将结果以表格形式输出。

MATLAB代码:

% 生成服从均值为 10、标准差为 2 的正态分布的 50 个随机数向量

x = normrnd(10, 2, 1, 50);

% 计算描述性统计量
mean_val = mean(x);          % 均值
median_val = median(x);      % 中位数
std_val = std(x);            % 标准差
var_val = var(x);            % 方差
range_val = range(x);        % 极差(最大值减最小值)

% 以表格形式输出结果
stats_table = table(mean_val, median_val, std_val, var_val, range_val, ...
    'VariableNames', {'均值', '中位数', '标准差', '方差', '极差'});
disp(stats_table);

运行结果截图:

命令行输出:

>> h2_3

​ 均值 中位数 标准差 方差 极差


​ 10.568 10.644 2.5251 6.3759 13.045

4. 线性规划问题求解

使用 linprog 函数求解线性规划问题。目标函数:minf(x)=2x1+3x2\min f(x) = 2x_1 + 3x_2;约束条件:x1+x22x_1 + x_2 \geq 2x12x21x_1 - 2x_2 \leq 1x10x_1 \geq 0x20x_2 \geq 0。要求:正确设置目标函数系数 f、不等式约束矩阵 A 和向量 b、变量上下界 lb,输出最优解 x 及对应的目标函数最小值。(提示:linprog 默认求解 min\min 问题,不等式约束需转换为 AxbA\mathbf{x} \leq \mathbf{b} 形式)

MATLAB代码:

% 目标函数系数(对应 min f(x) = 2x1 + 3x2)
f = [2; 3];

% 不等式约束转换为 A*x ≤ b 形式
% 原约束 x1 + x2 ≥ 2 转换为 -x1 - x2 ≤ -2
% 原约束 x1 - 2x2 ≤ 1 保持不变
A = [-1, -1;
      1, -2];
b = [-2;
      1];

% 变量下界(x1 ≥ 0, x2 ≥ 0)
lb = [0; 0];

% 调用 linprog 求解
options = optimoptions('linprog', 'Display', 'iter'); % 显示迭代过程
[x, fval] = linprog(f, A, b, [], [], lb, [], options);

% 输出结果
disp('最优解 x:');
disp(x);
disp('目标函数最小值 fval:');
disp(fval);

运行结果截图:

命令行输出:

>> h2_4

Running HiGHS 1.7.1: Copyright (c) 2024 HiGHS under MIT licence terms Coefficient ranges: Matrix [1e+00, 2e+00] Cost [2e+00, 3e+00] Bound [0e+00, 0e+00] RHS [1e+00, 2e+00] Presolving model 2 rows, 2 cols, 4 nonzeros 0s 2 rows, 2 cols, 4 nonzeros 0s Presolve : Reductions: rows 2(-0); columns 2(-0); elements 4(-0) - Not reduced Problem not reduced by presolve: solving the LP Using EKK dual simplex solver - serial Iteration Objective Infeasibilities num(sum) 0 0.0000000000e+00 Pr: 1(2) 0s 2 4.3333333333e+00 Pr: 0(0) 0s Model status : Optimal Simplex iterations: 2 Objective value : 4.3333333333e+00 HiGHS run time : 0.01

找到最优解。

最优解 x: 1.6667 0.3333

目标函数最小值 fval: 4.3333


分享文章:

  1. Python学习笔记其一笔记 · for与while的实战
  2. 英语口语测试备考笔记 · 大英能不能放过我一次——申请加入义和团
  3. 数学建模方法0001笔记 · 数学建模方法0001
上一篇
2025.10.28 C语言程序设计上机实习二
下一篇
【论文阅读 | TCSVT 2024 | MMI-Det:探索可见光与红外目标检测的多模态融合】