MATLAB基础作业其一

MATLAB 基础第一次作业

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

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

1. 温度转换计算

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

MATLAB代码:

1
2
3
4
5
6
7
8
% 定义摄氏度变量
C = 25;

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

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

运行结果截图:

image-20251018131426548

命令行输出:

>> 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代码:

1
2
3
4
5
6
7
8
9
10
11
% 计算分子部分
numerator = sqrt(16) + log10(1000) - sin(pi/2);

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

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

% 输出结果
disp(result);

运行结果截图:

image-20251018131827586

命令行输出:

>> h1_2

​ 2

3. 矩阵创建与输出

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

MATLAB代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
% 创建 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);

运行结果截图:

image-20251018132020159

命令行输出:

>> 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代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
% 矩阵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);

运行结果截图:

image-20251018132310167

命令行输出:

>> 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代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
% 创建 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

运行结果截图:

image-20251018132717474

命令行输出:

>> 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代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
% 定义系数矩阵 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);

运行结果截图:

image-20251018132958993

命令行输出:

>> h2_2

方程组的解 x:
2.7143
1.0571
-1.4000

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

常数项向量 b:
10
-5
12

3. 描述性统计分析

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

MATLAB代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
% 生成服从均值为 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);

运行结果截图:

image-20251018133420352

命令行输出:

>> 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代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
% 目标函数系数(对应 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);

运行结果截图:

image-20251018133842761

命令行输出:

>> 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