MATLAB编程代码集结4.docx

上传人:b****8 文档编号:29662858 上传时间:2023-07-26 格式:DOCX 页数:21 大小:63.16KB
下载 相关 举报
MATLAB编程代码集结4.docx_第1页
第1页 / 共21页
MATLAB编程代码集结4.docx_第2页
第2页 / 共21页
MATLAB编程代码集结4.docx_第3页
第3页 / 共21页
MATLAB编程代码集结4.docx_第4页
第4页 / 共21页
MATLAB编程代码集结4.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

MATLAB编程代码集结4.docx

《MATLAB编程代码集结4.docx》由会员分享,可在线阅读,更多相关《MATLAB编程代码集结4.docx(21页珍藏版)》请在冰豆网上搜索。

MATLAB编程代码集结4.docx

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

求解方程

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1