在学习matlab的时候记的一些笔记,随便写写,毫无逻辑,毫无顺序,佛系更新^_^。
多项式
求多项式的根
在MATLAB语言里,多项式由一个行向量表示,设为p,它的系数按降序排列,使用roots函数可以求出该多项式的根。其使用格式为roots(p)。
>> p=[1 0 3 12 -7]
p =
1 0 3 12 -7
>> roots(p)
ans =
0.7876 + 2.4351i
0.7876 - 2.4351i
-2.0872 + 0.0000i
0.5121 + 0.0000i
加法和减法
如果两个多项式的向量阶数相同,标准的数组加法有效。当两个多项式的向量阶数不同时,需要在低阶多项式的前边补0,使得它与相加的高阶多项式有相同的阶数。
>> a=[8 2 2 8]
a =
8 2 2 8
>> b=[6 1 6 1]
b =
6 1 6 1
>> c=a+b
c =
14 3 8 9
>> Y3=poly2sym(c)
Y3 =
14*x^3 + 3*x^2 + 8*x + 9
其本质是将矩阵相加然后使用矩阵来生成新的多项式
乘法
使用conv函数对多项式进行乘法运算。 格式为c=conv(a,b),其中a和b为两个多项式的系数向量,c为相乘所生成的多项式的系数向量。
>> a=[1 2 3 4]
a =
1 2 3 4
>> b=[5 6 7 8]
b =
5 6 7 8
>> Y1=poly2sym(a)
Y1 =
x^3 + 2*x^2 + 3*x + 4
>> Y2=poly2sym(b)
Y2 =
5*x^3 + 6*x^2 + 7*x + 8
>> c=conv(a, b)
c =
5 16 34 60 61 52 32
>> Y=poly2sym(c)
Y =
5*x^6 + 16*x^5 + 34*x^4 + 60*x^3 + 61*x^2 + 52*x + 32
和加减法相同,多项式的乘法也是先把矩阵中的数值转化成多项式的系数,再重新生成新的多项式。
除法
在数值计算中,经常需要用一个多项式去除另一个多项式。在MATLAB中,使用deconv函数来完成该项功能。
示例:首先生成参数a, b并计算他们对应的多项式的乘积的参数
>> a=[1 2 3 4]
a =
1 2 3 4
>> b=[5 6 7 8]
b =
5 6 7 8
>> c=conv(a, b)
c =
5 16 34 60 61 52 32
c就是a和b对应的多项式相乘后的参数
下面我们来验证c多项式除以a多项式是否等于b多项式,c多项式除以b多项式是否等于a多项式。
>> d=deconv(c, a)
d =
5 6 7 8
>> e=deconv(c, b)
e =
1.0000 2.0000 3.0000 4.0000
>> x=poly2sym(d)
x =
5*x^3 + 6*x^2 + 7*x + 8
>> y=poly2sym(e)
y =
x^3 + 2*x^2 + 3*x + 4
求导和积分
分别使用polyder函数和polyint函数来求多项式的导数与积分。
求导:
>> p=[3 1 8 8]
p =
3 1 8 8
>> poly2sym(p)
ans =
3*x^3 + x^2 + 8*x + 8
>> q=polyder(p)
q =
9 2 8
>> poly2sym(q)
ans =
9*x^2 + 2*x + 8
积分:
>> p1=polyint(q)
p1 =
3 1 8 0
>> poly2sym(p1)
ans =
3*x^3 + x^2 + 8*x
可以看到在对求导后的结果积分后,除了常数项之外其他项完全一致,这是因为求导后常数项为0。
字符串单元组和结构
字符串的设定
>> str='to all in one'
str =
to all in one
>> whos
Name Size Bytes Class Attributes
Y 1x1 112 sym
Y1 1x1 112 sym
Y2 1x1 112 sym
Y3 1x1 112 sym
a 1x4 32 double
ans 1x1 112 sym
b 1x4 32 double
c 1x7 56 double
d 1x4 32 double
e 1x4 32 double
p 1x4 32 double
p1 1x4 32 double
q 1x3 24 double
str 1x13 26 char
x 1x1 112 sym
y 1x1 112 sym
字符串的读取
读取和数组的读取一样,在C语言中字符串也被称为字符数组
>> str(1)
ans =
t