MATLAB
12313013
1
MATLAB 的基础知识
1.1
MATLAB 的数值数据
整型、浮点型、复型(虚数单位用 i 或 j 表示)
real( ):求复数的实部
imag( ):求复数的虚部
format 命令
format long
输出小数点后 15 位
format
输出小数点后 4 位
1.2
常用数学函数
1.2.1 三角函数
sin( ):以弧度为单位
sind( ):以角度为单位,加’d’
1.2.2 绝对值函数
abs( ): 可以求绝对值、模和字符串的 ASCII 值
1.2.3 用于取整的函数
round( ): 四舍五入
ceil( ): 向上取整
floor( ): 向下取整
fix( ): 取靠近‘0’的整数
1.2.4 其他函数
exp( ): 以 e 为底的指数函数
sqrta( ):开平方根
log( ): 以 e 为底的对数函数
logm( ): 以 m 为底的对数函数
rem(a,b):a 除以 b 后的余数
isprime( ): 判断是否为素数,是返回‘1’,不是返回‘0’
1
sustech
1.3
12313013
变量管理
1.3.1 直接在工作区操作
1.3.2 内存变量文件
save命令:创建内存变量文件
save mydata x y
创建文件 mydata.mat 存储变量 x 和 y
load命令:装入内存变量文件
load mydata
从文件 mydata.mat 中导出变量 x 和 y
1.3.3 从 Excel 读取写入数据
xlsread()
data_1 = xlsread(’Excelname.xlsx’,’location’)
会自动去掉文字部分
[data_1 data_2] = xlsread(’Excelname.xlsx’,’location’)
会先后导入数据与标题
xlswrite()
xlswrite(’Excelname.xlsx’, 写入内容。第几页,’location‘)
1.4
MATLAB 矩阵的表示
1.4.1 将矩阵元素用中括号括起来,同一行用逗号隔开,不同行用分号隔开。
»A = [1,2,3;4,5,6;7,8,9]
输出:
A=
1
2
3
4
5
6
7
8
9
1.4.2 利用已有矩阵建立复数矩阵
B=[]
C=[]
A=B+i*C
1.4.3 用冒号表达式产生行向量:
e_1 : e_2 : e_3 : 以 e_1 为初始值,e_3 为终止值,产生一个以 e_2 为步长的行向量。
1.4.4 用linspace(a,b,n)表达式产生行向量:
a: 第一个元素
b:最后一个元素
n:元素的总数
2
sustech
12313013
1.4.5 用reshape(A,m,n)改变矩阵形状
只改变矩阵形状,不改变存储顺序。
存储顺序:元素 A(i,j) 的序号为 (j-1)*m+i
1.4.6 用A(:)将 A 矩阵变成一个列向量
A(:) 等价于 reshape(A,6,1)
MATLAB 的基本运算
1.5
1.5.1 特殊矩阵
eye(n)
n 阶 identity matrix
zeros(n)
diag()
n 阶 0 矩阵
ones(n)
rand()
对角线矩阵
n 阶 1 矩阵
随机数矩阵
1.5.2 算术运算
+加
−减
∗乘
/ 右除
\左除
∧ 乘方
prod(n) 所有元素的乘积
若 A 矩阵是非奇异矩阵,那么 A\B = B * inv(A), B/A = inv(A) * B
结果小数位
1.5.3
format band
2 位小数
format short
4 位小数
format long
15 位小数
format rat
近似为分数
MATLAB 的基本运算操作
1.6
clc
清空命令区
clear
清理工作区
who
显示变量
whos
显示变量及其性质
1.7
流程控制
1.7.1
if elseif else
if condition1
statement1
elseif condition2
statement2
else
statement3
end
3
sustech
1.7.2
12313013
switch
switch expression
case value1
statement1
case value2
statement2
otherwise
statement3
end
1.7.3
while
while expression
statement
end
1.7.4
for
for valuable = start : increment : end
commands
end
1.8
定义函数
1.8.1 用function函数
function y = function_ name(n)
x = 与 n 有关的计算
生成函数:function_ name()
1.8.2 直接设置
function_ name = @(变量)
expression
变量范围
一个操作
例如:
g = @(y) sin(y);
y = 0:0.1:10;
plot(y,g(y));
4
sustech
12313013
图 1: function
2
画图
2.1
plot()
plot(x,y)
以 x 为横轴,y 为纵轴画图
在代码前加hold on,结尾加hold off,可以将多个图画在一起。
plot(x,y,’str’)
后面的字符串可以用来改变图画的样式:
图 2: plot1
5
sustech
12313013
图 3: plot2
图 4: plot3
例如:
6
sustech
12313013
hold on;
plot(sin(0:pi/20:2*pi),’r+-.’);
plot(cos(0:pi/20:2*pi),’bp–’);
hold off
图 5: figurep
2.2
图上的标注
legend()
title()
给图中的曲线标上图例
标题
xlable()
2.3
ylable()
zlable()
坐标轴
图像上标注数学公式
用 latex 语言打数学公式,xr,yr 是标注出现的位置
text(xr,yr, 公式代码,’Interpreter’,’latex’)
annotation(’arraw’,’X’,[x 位置],’Y’,[y 位置])
积分:
标注的箭头
∫ 2
x2 sin(x)dx
0
2.4
图的数目
用 hold on 与 hold off 可以把多个曲线放在一个图上
7
sustech
12313013
用 figure, plot(x,y1); figure, plot(x,y2) 可以画出多个图
subplot(m,n,1);plot(x,y);
subplot(m,n,2);plot(x,y);....
可以将图摆成 m*n,subplot(行,列,图的序号)。
2.5
对数图
plot(x,y)
x,y 都是线性坐标
similogx(x,y)
x 是对数坐标
loglog(x,y)
x,y 都是对数坐标
similogy(x,y)
y 是对数坐标
图 6: log
2.6
两个 y 轴图
plotyy(x,y1,x,y2)
会在左右两边有两个 y 轴
2.6.1 其他图
以后再说
3
微积分
3.1 多项式
3.1.1 多项式的表示
f(x) = 7x3 + 3x2 + 9x + 1
p = [7,3,9,1];
8
sustech
12313013
f = polyval(p,x);
3.1.2 多项式的微分
polyder(p)
多项式的微分
polyval(polyder(p),x0 )
多项式在 x=x0 处的导数
3.1.3 多项式的积分
polyint(p,C)
多项式积分,不定积分常数为 C
polyval(polyint(p,C),x0 )
3.2
多项式在 x=x0 处的积分
数值微积分
x0;
x = [x0 x0+h];
y = [f(x0), f(x0+h)];
slope = diff(y)./diff(x);
disp(slope);
可以得出在 x0 点的数值微分
数值拟合求积分:
∫ 2
4 ∗ x3 dx
0
h = 0.0001;
x = 0 : h : 2;
f = 4 ∗ x.3 ;
sum(h ∗ f )
ans = 16.0016
直接求原函数
syms x
声明变量
f = sin(x);
int(f,x);
求积分
ans = -cos(x)
用integral()求数值积分
y = @(x) 表达式;
integral(y, 下限, 上限)
积分一次
integral2(y, 下限 1, 上限 1, 下限 2, 上限 2)
积分两次
integral(y, 下限 1, 上限 1, 下限 2, 上限 2, 下限 3, 上限 3)
9
积分三次
sustech
4
12313013
求方程式的根
solve()函数:
syms x
y = x.*sin(x) - x;
solve(y,x);
解方程 y = 0
ans = 0 and π/2
二元一次方程
syms x y;
eq1 = x - 2*y -5;
eq2 = x + y - 6;
solve(eq1,eq2,x,y)
用字母表示求解:
syms x a b c;
solve(a ∗ x ∧ 2 + b ∗ x + c,x)
ans = −(b + (b ∧ 2 − 4 ∗ a ∗ c) ∧ (1/2))/(2 ∗ a);
diff()函数求微分:
syms x;
y 关于 x 的表达式;
diff(y)
int()函数求积分:
syms x;
y 关于 x 的表达式;
z = int(y) ;
z = z - subs(z,x,0)
subs(z,x,0)
表示将 0 带入 x
z(0) = 0
fsolve()函数:
f = @(x) 表达式;
fsolve(f, 初始值猜想)
roots()函数求多项式的跟:
p = [多项式系数]
roots(p)
5 线性代数
5.1
高斯消元
有 Ax = b
10
−(b − (b ∧ 2 − 4 ∗ a ∗ c) ∧ (1/2))/(2 ∗ a)
sustech
12313013
R = rref([A b])
5.2
LU 分解
[L , U , P] = lu(A)
5.3
左除直接求解
x=A\b
mldivide(A,b)
5.4
逆矩阵直接求解
x = inv(A).* b
det(A)
求 A 的行列式
[v , d] = eig(p)
计算 p 的特征值与特征向量
dx
1
= √
dt
b x2 + 1
) t
√
x√ 2
1 (
x + 1 + ln x + x2 + 1 = + C
2
2
b
b·
dx √ 2
· x +1=1
dt
(
x(t) = sinh
11
t
+C
b
)