7.MATLAB符号计算

符号对象:

% 符号对象的建立与运算:
% (符号对象的结果是一个精确的数学表达式,数值计算的结果是一个数值)

% 符号对象名=sym(A);     (定义单个符号对象)
% A可以是数值常量,数值矩阵或数值表达式(不加单引号);这时符号对象为一个符号常量
% A也可以是一个变量名(加单引号),这时符号对象为一个符号变量

% syms 符号变量名1 符号变量名2 ... 符号变量名n  (定义多个符号变量,不加单引号)
% eval(符号对象名)将符号表达式转化为数值结果

% 为符号对象设置值域
% assume(condition) 指定变量满足条件condition
% syms x; assume(x<0); abs(x)==x;
% assume(expr,set)  指定表达式expr属于集合set

% factor(s):对符号表达式s分解因式(将整数s分解为质因子//验证素数)
% expand(s):对符号表达式s进行展开
% collect(s):对符号表达式s合并同类项
% collect(s,v):对符号表达式s按变量v合并同类项


% 验证M19 、 M23 、 M29 、 M31是否为梅森素数。
syms p;
m=2^p-1;
p=19;
m19=eval(m)
factor(m19)
p=23;
m23=eval(m)
factor(m23)
p=29;
m29=eval(m)
factor(m29)
p=31;
m31=eval(m)
factor(m31)

 

% 其他运算
% [n.d]=numden(s)   提取有理分式的分子分母
% c=coeffs(s,x)     提取符号表达式s中x的系数(排列顺序由低次到高次)
% simplify(s)       符号表达式化简
% p=sym2oply(s)     符号多项式转换为多项式系数向量(必须为单符号变量)
% s=poly2sym(p)     向量 -> 多项式
% symvar(s,n)       查找符号表达式s中的n个符号变量(n=1时查找s主变量)

% 求方程ax^2+bx+c=0的根。
syms a b c x;
f=a*x^2+b*x+c;
g=coeffs(f,x)
g=g(end:-1:1);
roots(g)

% 符号矩阵
% 当λ取何值时,以下齐次线性方程组有非零解。
% 对于齐次线性方程组Ax=0,当rank(A)<n或|A|=0时x有非零解
syms lamda;
A=[1-lamda,-2,4;2,3-lamda,1;1,1,1-lamda];
D=det(A)
factor(D)

 

符号方程求解:

% 代数方程符号求解(可能出错,应用多种方法)
% solve(s,v)    求解符号表达式s的代数方程
% v为求解变量    (省略时为系统默认)
% solve(s1,s2,...sn,v1,v2,...,vn)
% 求解符号表达式s1,s2...sn组成的方程组,求解变量分别为v1...vn


% 解方程ax^2+bx+c=0
syms x y a b c; 
f1=solve(a*x^2+b*x+c==0)

f=a*x^2+b*x+c==0;
f2=solve(f)

f3=solve(a*x^2+b*x+c) %方程右端=0可以省略

f=a*x^2+b*x+c;
f4=solve(f)

% 常微分方程(组)求解

% dsolve(e,c,v)
% 求解常微分方程e在初值条件c下的特解。
% v是方程自变量,省略时按默认处理
% 若初值条件c省略,则求方程通解

% dsolve(e1,e2,...en,c1,c2,...,cn,v)
% 求解常微分方程组在初值条件c1,c2,...,cn下的特解
% 若无初值条件,求通解,若无自变量,采用默认自变量t

% MATLAB中,大写字母D表示导数
% Dy表示y',D2y表示y",Dy(0)=5表示y'(0)=5

% 求微分方程或方程组的解
syms x y t;
y=dsolve('Dy-(x^2+y^2)/x^2/2',x)
[x,y]=dsolve('Dx=4*x-2*y','Dy=2*x-y',t)
   

应用举例:


% 疾病传染问题
syms a b c y t;
f=dsolve('Dy=a*y*(1-y)-c*y', 'y(0)=b',t)
% 当a==c时
f=dsolve('Dy=a*y*(1-y)-a*y', 'y(0)=b',t)

 

符号微积分:

% 符号函数的极限
% limit(f,x,a);          求函数f关于变量x在a点的极限
% 若x省略,则采用系统默认的自变量;     a默认值为0;
% limit(f,x,a,'right');  limit(f,x,a,'left'); 单边极限

syms a m x n;
f=(x^(1/m)-a^(1/m))/(x-a);
limit(f,x,a)
g=(1+1/n)^n;
limit(g,n,inf)

% 符号函数的导数(多元即求偏导数)
% diff(f,x,n)           求函数f关于变量x的n阶导数
% x同limit(可缺省);          n默认为1

syms  x y z;
f=sqrt(1+exp(x));
diff(f)                 
g=x*exp(y)/y^2;
diff(g,x)
diff(g,y) 

% 符号函数的积分

% 不定积分
% int(f,x);         求函数f对变量x的不定积分
% x省略时,按默认规则
syms x t;
f=(3-x^2)^3;
int(f)
g=5*x*t/(1+x^2);
int(g,t)                 

% 定积分
% int(f,x,a,b);
% 当函数f关于变量x在闭区间[a,b]可积时,返回定积分结果
% 当a、b中有一个为inf时,返回广义积分
% 当a、b中有一个为符号表达式时,返回一个符号函数

syms x t;
int(abs(1-x),1,2)
int(1/(1+x^2),-inf,inf)
int(4*x/t,t,2,sin(x))
 

应用举例:

% 河道水流量的估算问题

xi=0:50:600; % 横坐标
yi=[4.4,4.5,4.6,4.8,4.9,5.1,5.4,5.2,5.5,5.2,4.9,4.8,4.7];
% 水流深度

% ①曲线拟合,拟合出河床曲线,进行定积分,计算河流横截面,即可估计流量
p=polyfit(xi,yi,3);
subplot(1,2,1);
plot(xi,yi,'o',xi,polyval(p,xi));
syms y x;
y=poly2sym(p,x);    % 将拟合曲线的多项式转化为符号表达式形式
s=int(y,x,0,600);   % 定积分计算横截面面积
v=s*0.6;            % 计算水流量
eval(v)             % 转化为数值形式

% ②根据河床曲线,计算导函数,判断相应范围内取值是否大于1:1.5
yn=-yi;             %要计算斜率,故需要将曲线倒过来。
p=polyfit(xi,yn,3); %重新拟合
subplot(1,2,2);
plot(xi,yn,'o',xi,polyval(p,xi));
syms y x yii;
y=poly2sym(p,x);    

%{
(另一种方法,polyval计算值,直接对值求导也可以)
x=50:60;
y=polyval(p,x);
k=diff(y)/1;
all(abs(k)<1/1.5)
%}
yii=diff(y,x);      %求导函数
x=50:60;            %函数在指定范围内              
k=eval(yii);        %计算并转换为数值形式  
all(abs(k)<1/1.5)   %最后比较斜率

 

级数:

% 级数求和
% symsum(s,v,n,m)
% s:符号表达式,表示级数通项;
% v:求和变量(省略时使用系统默认变量)
% n、m是求和变量v的初值和末值

syms n;
s1=symsum(n^2,1,100)
s2=symsum((-1)^(n-1)/n,1,inf)
s3=symsum((-1)^(n-1)/(2*n-1),n,1,inf)
hypergeom([-1/2, 1], 1/2, -1)     %超几何函数
eval(s3)*4

 

% 银行利率的计算问题

syms k r;
p2=symsum(50000*(1+0.045/k)^k,k,2,2);
eval(p2)
p4=symsum(50000*(1+0.045/k)^k,k,4,4);
eval(p4)
p12=symsum(50000*(1+0.045/k)^k,k,12,12);
eval(p12)
limit((1+r/k)^k,k,inf)
50000*exp(0.045)

% 泰勒级数
% taylor(f,v,a,Name,Value)
% 将函数f按变量v在a点展开为泰勒级数
% 除f外其余参数均可省略,v省略时按默认规则确定变量
% a默认为0,Name为选项名,Value为选项值
% Name/Value:
%  ①'ExpansionPoint' 指定展开点(标量或向量),Value默认为0
%  ②'Order' 指定截断参数(正整数),Value默认为6(即最高阶为5)
%  ③'OrderMode' 指定展开式采用绝对阶或相对阶
%  ('Absolute'或'Relative'),Value默认为'Absolute'

% 求函数f(x)在x=1处的5阶泰勒级数展开式。
syms x;
f=(1+x+x^2)/(1-x+x^2);
taylor(f,x,1,'Order',6)
expand(ans)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值