MATLAB
Content
Chapter 1 Introduction to MATLAB
1.变量、函数名命名规则
必须以字母开头,可以包含数字、字母、下划线
Chapter 2 Basic Knowledge of Programming
1.创建矩阵
A = [1; 4; 7] % 列矩阵
B = [1 4 7] % 行矩阵
N = zeros(4) % 全 0 矩阵 4 × 4
X = ones(4) % 全 1 矩阵 4 × 4
Y = eye(4) % 单位矩阵 4 × 4
Z = rand(3,4) % 随机矩阵 3 × 4 (每个数都在 0 到 1 之间)
n = [1 3 4 6]
D = diag(n) % 生成对角矩阵,结果如下
n =
1 3 4 6
D =
1 0 0 0
0 3 0 0
0 0 4 0
0 0 0 6
2.获取矩阵元素
X(2, 3) % 获取第二行第三列元素
A([1 2], [2 3] % 获取矩阵 A 的一二行的二三列元素
Y(2, 3) = 3 % 给矩阵第二行第三列的元素赋值为 3
3.矩阵的合并
A = [1 2; 2 1]
B = [2 3; 3 2]
C = [A B] % 行合并
D = [A; B] % 列合并
结果
C =
1 2 2 3
2 1 3 2
D =
1 2
2 1
2 3
3 2
4.矩阵的算术运算
X = [1 5 -2; 3 0 7]
Y = [6 0 6; 2 2 1]
Z = X + Y % 加法,对应元素相加
A = X - Y
B = X.*Y
C = X./Y % 右除 X 的元素除以 Y 的元素
D = X.\Y % 左除 Y 的元素除以 X 的元素
加法结果
Z =
7 5 4
5 2 8
5.线性代数中的矩阵运算
① 矩阵乘
注:第一个矩阵的列数和第二个矩阵的行数必须相同 如下不能计算 Y*X
X = [1 2 3;4 5 6; 6 1 1; 0 1 -3]
Y = [2 -2; 3 8; 7 4]
Z = X*Y
结果
Z =
29 26
65 56
22 0
-18 -4
② 矩阵除
D = A/B % 右除
N = A\B % 左除
除法可以用求除数的逆阵与被除数矩阵相乘的方法替代,学过线性代数都应该知道,不再赘述
③ 矩阵转置
H = [1 2 3; 4 5 6]
G = H' % ' 为求转置符号
结果
G =
1 4
2 5
3 6
④ 矩阵求逆
原理 : AB = BA = E
A = [1 0 1; 2 1 2; 0 4 6]
B = inv(A) % B 为 A 的逆阵
结果
B =
-0.3333 0.6667 -0.1667
-2.0000 1.0000 0
1.3333 -0.6667 0.1667
再计算 A*B 得以下结果
1.0000 0 0
0 1.0000 0
0 0 1.0000
6.字符串的运算
S1 = 'Go home'
S2 = 'It''s time for dinner' % 注意这句,字符串里面有 ' 的话,要多加一 '
S3 = [S1 '.' S2]
结果
S3 =
'Go home.It's time for dinner'
size(S1) % 结果为 1 7 (结果展示维度)
length(S1) % 结果为 7 (结果展示字符或元素个数
补充 : 冒号运算符 两边有数字代表从左边数字到右边数字的范围,如果只有冒号则代表全部该有的有效范围
findstr(S,‘substring’) 返回字串 ‘substring’ 在 S 中的所有开始位置
Chapter 3 MATLAB Numeric Computation
1.多项式的创建、求值和求根
① 创建
T = [1 3 -15 -2 9]
F = poly2sym(T)
结果
F =
x^4 + 3x^3 - 15x^2 - 2*x + 9
② 求值
polyval(T,0) % 注意 当后面给出的变量是矩阵时,结果也为矩阵
% 且调用函数变为 polyvalm(T,X), X为矩阵
ans =
9
③ 求根
p = [1 3 -12 -2 8]
roots (p)
结果
-5.1833
2.1706
-0.8369
0.8496
2.插值的常用方法
x = 0:10; y = cos(x); % 已知数据点
xi = 0:.25: 10; % 待插入数据点的自变量值
y0 = cos(xi); % 待插入数据点的自变量对应的真实值
y1 = interp1(x,y,xi); % 缺省为线性插值
y2 = interp1(x,y,xi,'PCHIP'); % 三次方程式插值
y3 = interp1(x,y,xi,'spline'); % 三次样条插值
plot(xi, y0, 'go-', xi, y1, 'r*-', xi, y2, 'b-.', xi, y3, 'kv-'); % 图形显示
结果
3.多项式拟合
x = [2 3 4 5 7 8 10 11 14 15 16 18 19];
y = [106.42 108.26 109.58 109.5 110 109.93 110.49 110.59 110.6 110.9 110.76 111 111.2];
v = polyfit(x, y, 3); % v 是拟合多项式的系数向量,第三个数字代表几次方拟合
t = 1:0.5:19; % 待测试数据点,用来画拟合曲线
u = polyval(v,t); % 待测试数据点对应的多项式值,用来画拟合曲线
plot(t, u, x, y, '*') %图形显示
三次拟合的图像
4.数值微分
A = [2,4,5; -1, 0, 2; 9,3,4];
D = diff(A) % 列后面的数对齐减前面的数
结果
D =
-3 -4 -3
10 3 2
5.数值积分
Question:求 sin(x) 在 [0, pi] 上的数值积分
矩形积分
x = linspace(0,pi,100);
y =sin(x);
T = cumsum(y)*pi/(100-1);
I = T(100)
结果
I =
1.9998
梯形积分
x = linspace(0,pi,100);
y =sin(x);
t = trapz(x,y)
结果
t =
1.9998
Chapter 4 Structure Array and Cell Array
1.结构数组的创建
>> student.number='20050731001';
>> student.name='Jack';
>> student(2).number='20050731002';
>> student(2).name ='Lucy';
或者用 struct 函数创建。
>> student = struct('number',{ '001', '002'},'name',{ 'Jack', 'Lucy'});
2.结构数组的操作
>> student(1).subject=[] %添加 subject 域并赋予空值
>> student(1).sorce=[]
>> student
>> fieldnames(student)
>> getfield(student,{2},'name')
>> student=rmfield(student, 'subject') %删除 subject 域
>> student=setfield(student,{1},'sorce',90);
>> student(2).sorce=88; %比较和上一条语句是否效果一样
3.细胞数组的创建
>> A={'How are you!',ones(3);[1 2;3 4],{'cell'}}; %直接创建
>> B(1,1)={'Hello world'}; %由各个细胞元素创建
>>> B(1,2)={magic(3)};
>> B(2,1)={[ 1 2 3 4]};
或者用 cell 函数先创建空的细胞数组,然后再给各个元素赋值。
>> C=cell(1,2); %创建 1×2 的细胞数组
>> C(1,1)={'Hello world'};
>> C(1,2)={magic(3)};
>> C(1,3)={[ 1 2 3 4]};
4.细胞数组的操作
>> ans1=A(1,1)
>> ans2=A{1,1} %注意圆括号和花括号的区别,ans1 和 ans2 的数据类型
>> whos ans1 ans2
>> elldisp(A) %显示细胞数组的所有元素
>> a1=A{2,1}(1,2) %取出 A 的第 2 行第 1 列细胞元素的矩阵第 1 行第 2 列内容
>> [a2 a3]=deal(A{1:2}) %取出 A 的第 1 和第 2 个细胞元素的内容赋给 a2、a3
Chapter 5 MATLAB Symbol Computation
1.符号变量和表达式的定义
syms x y % 定义符号变量
y = str2sym('sin(x) + y + cos(x)') % 定义表达式
2.利用符号运算求极限
limit(F, x, a) %返回符号对象 F 当 x→a 时的极限
limit(F, a) %返回符号对象 F 当独立变量*→a 时的极限
limit(F) %返回符号对象 F 当独立变量→0(a=0)时的极限
limit(F, x, a, ’right’) %返回符号对象 F 当 x→a 时的右极限
limit(F, x, a, ’left’) %返回符号对象 F 当 x→a 时的左极限
y = str2sym('sin(x)/x');
limit(y) % x → 0 的极限,结果为 1
3.利用符号运算求微分
diff(F) %求符号对象 F 关于默认变量的微分
diff(F, v) %求符号对象 F 关于指定变量 v 的微分
diff(F, n) %求符号对象 F 关于默认变量的 n 次微分,n 为自然数 1、2、3…
diff(F, v, n) %求符号对象 F 关于指定变量 v 的 n 次微分
y = str2sym('sin(x)')
y1 = diff(y)
结果
y1 =
cos(x)
4.利用符号运算求积分
int(F) %求符号对象 F 关于默认变量的不定积分
int(F, v) %求符号对象 F 关于指定变量 v 的不定积分
int(F, a, b) %求符号对象 F 关于默认变量的从 a 到 b 的定积分
int(F, v, a, b) %求符号对象 F 关于指定变量 v 的从 a 到 b 的定积分
y = str2sym('sin(x)');
D = int(y,0,pi) % 定积分
结果
D =
2
Chapter 6 Programming with MATLAB
1.函数的定义
以下是有效的函数定义方式
2.选择和循环结构
选择
if
...
else
...
end
switch 变量
case 变量取值
...
case 变量取值
...
end
循环
for n = 1 : 10
...
end
for n = 10 : -1: 5 % 很好理解
...
end
while i < 100 % 判断语句
...
end
3.输入和输出
input('请输入:') % 输入
fprintf('结果是:%s\n',str) %输出
4.对于给定问题写函数
一个棋盘,从第一个格子开始,第一个格子放一粒米,依次放后面的格子,后一格的数量为前一格的两倍,求一共需要多少粒米?
function sum = func
i = 1;
sum = 0;
while i <= 64
sum = sum + 2^i;
i = i + 1;
end
Chapter 7 MATLAB Visualization
1.二维图形绘制
1.plot
x = [-2*pi:0.1:2*pi];
y1 = sin(x); y2 = cos(x);
plot(x, y1, 'g-*', x, y2, 'r-+');
xlabel('x'); ylabel('sin(x)&cos(x)')
hl = legend('sin(x)', 'cos(x)');
set(hl, 'Orientation', 'vertical');
grid on;
运行结果
2.hist
attri = rand(1,100)*99+1;
hist(attri,10);
xlabel('random number');
ylabel('Count');
运行结果
3.pie chart
consumption = [589, 200, 654, 245];
explode = [0,0,0,0];
labels = {'1st quarter ', '2nd quarter', '3rd quarter', '4th quarter'};
pie(consumption, explode, labels);
运行结果
4.subplot
subplot(2,2,1); % 在一个界面里的四分之一的第一个区域画图
plot(x,sin(x));
xlabel('x');
ylabel('y');
title('sin(x)');
运行结果
2.三维曲线及曲面的绘制
1.plot3
t = 0:0.05:20;
x = sin(t); y = cos(t);
plot3(x,y,t,'*'); // plot3 画曲线
grid
text(0,0,0,'0');
title('Three dimension');
xlabel('sin(t)'),ylabel('cos(t)'),zlabel('t');
运行结果
2.meshgrid 和 surf
[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
surf(X,Y,Z);
xlabel('x'), ylabel('y'), zlabel('z');
title('SURF')
运行结果:
Chapter 8 Simulink
一会儿给您上