matlab数值计算
-
创建矩阵的方法规则:
- 矩阵元素必须用[ ]扩起来 如a = [1,2,3]
- 矩阵元素必须用逗号或空格分隔 如 b = [4,5,6]
- 在括号[ ]内矩阵的行与行之间必须用逗号分隔如v = [1,2,3;4,5,6]
-
矩阵元素
- 矩阵元素可以是数,也可以是表达式例如a = [1,2,3;4,3,4] 、x = [2 pi/2 ;sqrt(3) 3+4]
-
符号的作用
1、逗号和分号的作用 * 逗号和分号可以作为指令间的分隔符,matlab允许多条语句在同一行出现 *分号如果出现在指令后,屏幕上将不显示结果 *当一个指令太长时可以用...续行 2、冒号的作用 *用于生成等间距的向量,默认间隔是1,你可以自定义向量的间隔例:a = [1:0.1:4] 结果是长度为40间隔为0.1的向量 * 用于选出矩阵指定行、列及元素 例如:a = [1 2 3;4 5 6;7 8 9] a(1,:)表示取出第一行所有元素 a(:,2)表示取出第二列所有元素 a(:)表示取出所有的元素,并组织成一个列向量 a(2:3)表示将a所有元素排列成列向量取2、3两元素 *用于表示一定的范围 a = [1 2 3;4 5 6;7 8 9] a(1:2,3)表示取出一到二行的第三个元素 *生成等差数列 a = 1:2:9 %% 1 3 5 7 9 *循环语句 sum1 = 0 for i = 1:0.1:5 sum1 += i end
用matlab函数创建矩阵
* 空矩阵a = [ ] * rand()---随机矩阵(元素0~1) rand(n)生成一个nxn的随机矩阵 * eye()---单位矩阵 * zeros()---全部元素都为0的矩阵 * ones()---全部元素都为1的矩阵
matlab 严格区分大小写 matlab 函数名必须小写
矩阵的修改
1、通过指令修改 a = [1,2,3;4,5,6;7,8,9] a(3,3) = 10
数据的保存与获取
-
save ——将工作空间的所有变量存到文件
-
save date——将工作空间中的所有变量存到文件中
-
save date a b ——将工作空间中的a 和 b 变量存到文件中
-
再次需要使用时用load指令调用已经生成的mat文件、
注意:save 和 load配合使用 有函数和命令方式调用 函数方式必须带括号和引号
-
矩阵的运算
1、矩阵加减法的运算法则
* 相加减的矩阵必须是相同大小的(允许其一时标量:数字) 且为对应位置元素大小相加减
2、矩阵的乘法运算
* A 矩阵的列必须和B矩阵的行数相同
* 标量(数字)可以与任何矩阵相乘
3、矩阵的其他运算
inv()——矩阵求逆
det()——行列式的值
eig()——矩阵的特征值
diag(x,n)——对角矩阵(取对角矩阵上某个对角上的数据)x是要去的矩阵对象,n是第几条对角线
()’——矩阵转置
sqrt()——矩阵开方 相当与每个元素开方
4、矩阵的特殊操作
* 矩阵的变维 a = [1:12];b = reshape(a,3,4) c =zeros(3,4);c(:) = a(:)
* 矩阵的变向
rot90:旋转(默认逆时针)
rot90(x,n),其中x表示一个矩阵,n为正整数,默认功能:将矩阵x逆时针旋转90*n度,形成新矩阵,x本身不变。
fliplr:上翻
flipud:下翻
*矩阵的抽取 diag:抽取主对角线; tril:抽取主下三角; triu:抽取主上三角
* 矩阵的扩展
矩阵运算符
* 数组加减(.+ .- )
对应元素相加减(与矩阵加减等效)
*数组乘除(.* ./ .\)
.\ 表示和面的除以前面的
使用上述运算符必须保证两个数组的大小相当
* 矩阵除(\,/)运算
\左除 /右除
A\B 为方程AX = B的解
B/A 为方程XA = B的解(小技巧,A在前面方程中就在前面、在后面方程中就在后面)
A\B = inv(A)*B
而B/A = B*inv(A)
B/A = (A’\B’)’
* 数组乘方.^
对应元素相乘方
a =
1 1 1
2 2 2
3 3 3
b = a .^ a
1 1 1
4 4 4
27 27 27
* 矩阵的次幂^
a =
1 2 3
4 5 6
7 8 8
a^2 =
30 36 39
66 81 90
95 118 133
矩阵标识和子矩阵
B =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
B1 = B(1:2,[1 3 5])
17 1 15
23 7 16
B2 = B([3 1],:)
4 6 13 20 22
17 24 1 8 15
B([1 3],[2 4]) = zeros(2)%替换B中指定位置的数值
17 0 1 0 15
23 5 7 14 16
4 0 13 0 22
10 12 19 21 3
11 18 25 2 9
matlab多项式
matlab 把多项式表达成一个行向量 其中的元素是按照降幂的方式排列的
f(x) = anxn + an-1xn-1 + an-2xn-2 + ……. a1x1 + a0x0
可用行向量p = [an an-1 an-2 an-3…….. a1 a0] 表示
poly——产生特征多项式系数向量
- 特征多项式一定是n+1维度的
- 特征多项式第一个元素一定是1
特殊的应用矩阵
-
约当阵——将状态空间模型转换为约当标准型
[V,J] = jordan(a) J为约当标准型,V为相似变换阵
语法:jordan()
-
伴随矩阵——将状态空间模型转换为可控标准型
语法:compan()
常用的矩阵函数
* det(A) 方阵A的行列式
* eig(A) 方阵A的特征值和特征向量
* rank(A) 矩阵A的秩
* trace(A) 矩阵A的迹
* expm(A) 矩阵的指数e^A
* sqrtm(A) 矩阵的平方根
* funm(A,'fun') 求一般的方阵函数
a =
0.1000 0.2000 0.3000
0.4000 0.5000 0.6000
0.7000 0.8000 0.9000
funm(a,'sin')
0.0315 0.1157 0.1999
0.2446 0.3091 0.3735
0.4577 0.5024 0.5471
- conv 、convs多项式相乘
- deconv 多项式相除
- 有理多项式求导
-
多项式的展开与组合
矩阵的加减法
-
只有大小相同的两个矩阵才能相加
function[poly] = polyadd(poly1,poly2) if length(poly1) < length(poly2) short = poly1; long = poly2; else short = poly2; long = poly1; end mz = length(long) - length(short); if mz > 0 poly = [zeros(1,mz),short] + long;%将前后两个矩阵大小变成一样 else poly = long + short; end
求多项式在某点的值polyval
求区间均匀分布的函数 linspace(左区间,右区间,均匀分布的个数)
多项式求根roots()函数
将特征向量表示成多项式 “poly2str(特征多项式,‘自变量’)”
>> a = [1 2 3 4];
>> b = poly2str(a,'x')
b =
' x^3 + 2 x^2 + 3 x + 4'
将特征向量表示成多项式 “poly2sym(特征多项式)”
a = 1 2 3 4
>> c = poly2sym(a) %默认自变量为x
c =
x^3 + 2*x^2 + 3*x + 4
利用多项式的根构造多项式poly(填写根)
函数总结
多项式差值函数(interpl1)
yi = interp1(x,y,xi,method) 其中想x和y是原已知数据,xi是需要差值的位置点,yi是差值点的值。
method是差值方法可以设置的差值方法有:
*nearest(寻找最近数据节点):执行速度最快,输送出结果为直角转折
* linear(线性差值):默认,在样本点上斜率变化很大
* spline(样条差值):最耗时,但输出结果最平滑
* cubic(三次方程式差值):也比较耗时,输出结果与spline接近
多项式拟合函数polyfit
调用方法有两种
* p = polyfit(x,y,n)
* [p s] = polyfit(x,y,n)
其中x,y为已知的数据组,n为要拟合的多项式的阶次,向量p返回要拟合多项式的系数相量,向量s为调用函数polyfit或得的错误预估计值
最小二乘法拟合
数值积分
- 计算两个相邻点的差值函数diff(对多项式求导)
- diff(x)——返回x对预设独立变量的一次微分值
- diff(x)——返回x对独立变量t 的一次微分值
- diff(x,n)——返回x对预设变量的n次微分值
- diff(x,’t‘,n)——返回x对独立变量t 的n 次微分值
subplot函数
使用方法:subplot(m,n,p)或者subplot(m n p)。
subplot是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果m=2就是表示2行图。p表示图所在的位置,p=1表示从左到右从上到下的第一个位置。
牛顿-科茨系列积分公式
-
cumsum()函数
* cumsum是matlab中一个函数,通常用于计算一个数组各行的累加值,函数用法是B = cumsum(A,dim),或B = cumsum(A)。 如果A是一个向量, cumsum(A) 返回一个向量,该向量中第m行的元素是A中第1行到第m行的所有元素累加和; 如果A是一个矩阵, cumsum(A) 返回一个和A同行同列的矩阵,矩阵中第m行第n列元素是A中第1行到第m行的所有第n列元素的累加和;
-
trapz() 梯形积分
-
quad() 辛普森积分
-
quad8() 科茨积分——高精度积分 注意式中的.*、./
-
线性方程组的数值解
- 自接法
- 迭代法
- jacobi雅可比迭代法
- Gauss-seidel 迭代法
- SOR(超松弛)迭代法
稀疏矩阵
-
sparse 创建稀疏矩阵
- 以spdiags创建对角稀疏矩阵
常微分方程的数值解
- 欧拉法