MATLAB编程代码集结4.docx
- 文档编号:29662858
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:21
- 大小:63.16KB
MATLAB编程代码集结4.docx
《MATLAB编程代码集结4.docx》由会员分享,可在线阅读,更多相关《MATLAB编程代码集结4.docx(21页珍藏版)》请在冰豆网上搜索。
MATLAB编程代码集结4
第三章MATLAB符号运算(区别于数值运算其对象主要为非数值的字符串)
sym函数将数值类型转换为符号类型的变量
s=sym(A,flag)
s=sym(‘A’,flag)
上述表达式是由A建立一个符号对象或者符号表达式s,
不带单引号的A是一个数字,数值矩阵或者数值表达式,其输出是将数值对象转换成符号对象或者符号表达式。
带单引号的A是一个字符串,输出是将字符串转换成的符号对象或者符号表达式
3.1.2符号对象的创建
符号常量的创建
将数值常亮作为sym函数的输入参量,建立一个符号常量。
例如s=sym(2*5);
s1=s+2
class(s1)
产生结果s=
10
s1=
12
ans=
Sym
S和s1虽然是数字形式,但是他们是按照符号形式存储的
符号变量的创建
x=sym('a');
y=sym('b');
a=class(x)
b=class(y)
a=
sym
b=
Sym
symsab
a=class(a)
b=class(b)
利用sym创建矩阵
符号矩阵的创建利用sym创建矩阵的时候元素可以使任何不带等号的符号表达式,各元素字符串之间长度可以不相等,符号矩阵内的元素之间使用逗号或者空格键隔开,各行之间使用分号隔开。
s=sym([a*bexp(a);cos(x)^21/(3+x^2)]’)
产生结果如下
s=
[a*b,exp(a)]
[cos(x)^2,1/(3+x^2)]
直接输入法创建矩阵
要求每一行用中括号括起来,并且使用分号隔开,个元素之间使用逗号隔开。
同事要保证同一列上的各行字符长度相同,不够时候用空格填补。
s1=['[(a+b),sin(b),exp(a)]';'[a*b,log(b),b]']
产生的结果如下
s1=
[(a+b),sin(b),exp(a)]
[a*b,log(b),b]
将数值矩阵转换为符号矩阵
数值矩阵不能直接参与符号运算,因此在符号运算中需要先将数值矩阵转换为符号矩阵,用sym函数可以实现将数值矩阵转换为符号矩阵。
s2=[2/3,sqrt
(2);5.2,log(3)]
s3=sym(s2)
s2=[2/3,sqrt
(2);5.2,log(3)]
s3=sym(s2)
产生的结果为
s2=
0.66671.4142
5.20001.0986
s3=
[2/3,sqrt
(2)]
[26/5,4947709893870346*2^(-52)]
符号表达式的创建
使用syms建立符号函数
symsxyz;
f1=2*x*y/z
f2=sin(x)*x+y^2+cos(z)
f3=f1/f2
f1=
2*x*y/z
f2=
sin(x)*x+y^2+cos(z)
f3=
2*x*y/z/(sin(x)*x+y^2+cos(z))
使用sym建立符号函数
e1=sym('x^2+b*x+c')
e2=sym('sin(x)^2+2*cos(x)^2=1')
e3=sym('dy-5=x')
e1=
x^2+b*x+c
e2=
sin(x)^2+2*cos(x)^2=1
e3=
dy-5=x
符号运算中的运算符
符号表达式中自变量的确定
findsym确定表达式的自变量
findsym(f,n);按数学常规函数中确定符号函数f中的n个自变量,当n=1时候,说明有一个自变量,于是从字母之中寻找与x最接近的字母,如果两个字母都与x距离相等则选取较后的一个,当n为默认状态时候,findsym函数会给出符号函数f中所有的符号变量。
findsym(e,n):
该表达式确定符号方程中的n个变量
f=sym(‘m^2+8*z+n*m’);
findsym(f,1)
ans=
z
f=sym(‘w*y+y^2+w*z’);
findsym(f,1)
e=sym('2*a+c*b+d=0');
findsym(e,1)
findsym(e)
ans=
d
ans=
a,b,c,d
默认时候findsym函数给出了符号方程中的所有变量
3.2符号表达式的运算
(1)提取分子和分母
要求符号函数表达式是一个有理式(两个多项式比的形式)
Numden函数的具体用法如下
[n,d]=number(f):
f指的要进行提取的有理式,n指的是提取后的有理式,d指的是提取后的分母。
提取函数
的分子和分母,在命令中输入如下语句:
f=sym(‘x^2/(2*y+1)’)
[n,d]=numden(f)
f=
x^2/(2*y+1)
n=
x^2
d=
2*y+1
提取函数
的分子和分母
f=sym('2/3*x^2+1/2*x+5')
[n,d]=numden(f)
f=
2/3*x^2+1/2*x+5
n=
4*x^2+3*x+3
d=
6
(2)标准代数运算
m=sym('x^3+2*x^2')
n=sym('x^2-3*x')
a=m+n
b=m/n
c=m*n
m=
x^3+2*x^2
n=
x^2-3*x
a=
x^3+3*x^2-3*x
b=
(x^3+2*x^2)/(x^2-3*x)
(3)复合符号函数的运算
fg=compose(f,g,v,w,t):
compose函数是在w=t时候对f(v)和v=g(x)求复合函数,fg=f(g(w)),vw分别是函数f和g的自变量,t是复合函数的自变量
f=
(4)数值转换
Logical
Char
Int81632uint32singledoublecellstruct
例如
x=5.78;
f=sym(‘2*x+x^2’);
m=eval(f)
int8(m)
Logical(m)
m=
44.9684
ans=
45
Warning:
Valuesotherthan0or1convertedtological1
ans=
1
(5)Sym2poly函数将符号表达式转换为数值多项式的系数向量,并且系数从高到低依次排列。
f=sym('7+3*x+5*x^2');
sym2poly(f)
ans=
537
(6)Poly2sym函数将数值多项式的系数向量转换为符号表达式,作用于sym2poly相反
a=[537];
poly2sym(a)
ans=
7+3*x+5*x^2
(7)eval函数
f=sym('x+y');
x=sym('2');
y=sym('5');
p=eval(f)
class(p)
p=
7
ans=
sym
(8)变量替换
(9)Subs(S,old,new):
用new来替换s中的old变量,且old必须是符号变量,new可以使符号变量符号常亮数值和数组等。
Subs(S,new)用new来替换s中的自变量
Subs(s)
symsamnw;
f=1+5*a;
subs(f,'a','m^2+5*n')
ans=
1+5*(m^2+5*n)
(10)利用factor实现因式分解
f=sym('x^2+5*x+4');
factor(f)
ans=
(x+4)*(x+1)
使用factor函数对符号矩阵表达式进行因式分解
symsmxn
m=1:
10
(11)Collect实现合并同类项
Collect(s),collect(s,v)合并s中v相同次幂的表达式
>>f=sym('(x^3+2*x)*(x+1)');
collect(f)
ans=
x^4+x^3+2*x^2+2*x
(12)Horner形成嵌套形式
(13)expand展开
e=sym('(x+y)^3');
expand(e)
ans=
x^3+3*x^2*y+3*x*y^2+y^3
(14)Simplify可以综合化简
y=sym('sin(x)^2-2*sin(x)*cos(x)+cos(x)^2');
simplify(y)
ans=
-2*sin(x)*cos(x)+1
(15)Simple功能强大可以将表达式转换为最简单形式
[r,how]=simple(S)其中r为最简单的符号表达式,how是一个描述简化方法的字符串。
r=simple(S)
Simple可以执行collectfactorexpandsimplifyradsimpconvertcombine
y=sym('sin(x)^2-2*sin(x)*cos(x)+cos(x)^2');
simplify(y)
ans=
-2*sin(x)*cos(x)+1
>>f=sym('2*cos(x)*sin(x)');
simple(f)
simplify:
2*sin(x)*cos(x)
radsimp:
2*sin(x)*cos(x)
combine(trig):
sin(2*x)
factor:
2*sin(x)*cos(x)
expand:
2*sin(x)*cos(x)
combine:
sin(2*x)
convert(exp):
-i*(exp(i*x)-1/exp(i*x))*(1/2*exp(i*x)+1/2/exp(i*x))
convert(sincos):
2*sin(x)*cos(x)
>s=sym('(x^2-1)*(x+2)/(x+1)');
[r,how]=simple(s)
simple(s)
r=
x^2+x-2
how=
combine(trig)
simplify:
(x+2)*(x-1)
radsimp:
(x+2)*(x-1)
combine(trig):
x^2+x-2
factor:
(x+2)*(x-1)
expand:
1/(x+1)*x^3+2/(x+1)*x^2-1/(x+1)*x-2/(x+1)
combine:
(x^2-1)*(x+2)/(x+1)
矩阵符号计算
A=sym('[a,2*b;3*a,0]')
B=sym('[2*x3*b;n+md+8]')
A+B
A=
[a,2*b]
[3*a,0]
B=
[2*x,3*b]
[n+m,d+8]
ans=
[a+2*x,5*b]
[3*a+n+m,d+8]
计算矩阵的二次方
A=sym('[816;264;352]');
A^2
ans=
[84,44,64]
[40,58,44]
[40,43,42]
线性代数运算
Inv函数计算符号矩阵的逆inv(A)
A=sym('[816;264;352]');
inv(A)
ans=
[1/13,-7/26,4/13]
[-1/13,1/52,5/26]
[1/13,37/104,-23/52]
Det函数计算矩阵行列式det(A)
A=sym('[816;264;352]');
det(A)
ans=
-104
triu和tril实现对角元素分别为矩阵上三角部分和下三角部分
diag对角矩阵
Rank求秩
Null函数计算零空间正交基
科学计算
(1)符号极限的运算
Limit(f,x,a)表示当x无线趋近于a时候,函数f(x)的极限值。
Limit(f,a)当x无线趋近于a时候计算符号函数的极限值,没有指定变量的情况下按照findsystem函数指示的默认变量确定函数的变量
(2)Limit(f,x,a,’left’)和limit(f,x,a,’right’)
计算
的极限
symsx
f=cos(x);
limit(f,x,1)
ans=
cos
(1)
(3)符号微分计算
Diff(s)没有指定情况下系统默认对函数s自变量求解
Diff(s,’V’)对函数s变量v求解
Diff(s,n)
Diff(s,’v’,n)
计算f=ax^2+bx+c
f=sym('a*x^2+b*x^3+c*x')
diff(f,'x',2)
f=
a*x^2+b*x^3+c*x
ans=
2*a+6*b*x
(4)符号函数积分运算
Int(s,v)以v为自变量对s积分
Int(s,v,a,b)a和b分别为积分函数的上下限
计算f=cos(x)^2的积分
f=sym('cos(x)^2');
int(f,x,1,9)
ans=
1/2*cos(9)*sin(9)+4-1/2*cos
(1)*sin
(1)
计算广义积分
的值
symsx
f=1/(x^2+4*x+9);
int(f,-inf,+inf)
ans=
1/5*pi*5^(1/2)
(5)符号表达式转换fourier(f)(傅里叶变换)和ifourier(f)(傅里叶反变换)
(6)同理拉氏变换laplace(f)和ilaplace(f)
3.6符号函数图形变换
Ezplot(f)绘制图线区间[-2pi,2pi];绘制隐函数f(x,y)=0在区间-2pi Ezplot(f,[min,max])、ezplot(f,[xmin,xmax,ymin,ymax,])ezplot(x,y,[tmin,tmax])第一种指的是函数f在指定区间[min,max]的二维曲线,第二种指的是min symsxy f=x^2-y^3 ezplot(f) symsxyt x=2*sin(t); y=t*cos(t); ezplot(x,y) grid title('参数方程') 三维曲线的绘制 symst x=sin(t); y=cos(t); z=t; ezplot3(x,y,z,[0,20]); grid title('三维曲线') 等值线的绘画 Ezcontour(f)绘制f(x,y)在默认区域内的等值线 Ezcontour(f,domain),绘制二元函数在指定区域内的等值线 Ezcontour(…,n,),绘制等值线并规定数目 symsxy f=3*(1-x)^2*exp(-(x^2)-(y+1)^2); ezcontour(f) 符号函数的曲面及其表面的绘制采用 Ezmesh三维曲面图ezmeshcezmeshc带等值线的三维曲面图ezsurf三维表面图ezsurfc带等值线的三维曲面图 三维表面图形 用法ezmesh(f) Ezmesh(f,domain) Ezmensh(x,y,z) Ezmensh(x,y,z,[smin,smax,tmin,tmax])或者ezmensh(x,y,z,[min,max]) symsxy subplot(2,2,1) ezmesh(x*exp(-x^2-y^2),[-2.5,2.5]) title('三维曲面图') subplot(2,2,2) ezsurf(x*exp(-x^2-y^2),[-2.5,2.5]) title('三维曲表面图') subplot(2,2,3) ezmeshc(x*exp(-x^2-y^2),[-2.5,2.5]) title('带等值线三维曲面图') subplot(2,2,4) ezsurfc(x*exp(-x^2-y^2),[-2.5,2.5]) title('带等值线三维表面图') 符号方程的求解 Solve函数 G=solve(eq)其中eq是符号表达式或字符串,该方程求解的是eq=0 G=solve(eq,var),求解方程eq=0,其中自变量有参数var决定 例如 Symsxabc x=solve(‘4*a*x^2+b*x-c’) 返回值x是所有解构成的列向量 symsabcx b=solve('a*x^2+b*x+3*c','b') b= -(a*x^2+3*c)/x 求解方程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 编程 代码 集结
![提示](https://static.bdocx.com/images/bang_tan.gif)