数模:符号计算,Taylor,常微分方程,函数求导

符号计算

sym函数
用于建立单个符号对象

符号对象名=sym(A)

其中,A可以是一个数值常量、数值矩阵、数值表达式(不加单引号)
此时符号对象为一个符号常量

A也可以是一个变量名(加单引号),
这时符号对象为一个符号变量

%%%%%%%符号常量%%%%%%%%
t=sym(2);
>> t
t =
2 
>> t+1/2
ans =
5/2
%%%另一例%%%
>> sin(sym(pi/3))
 
ans =
 
3^(1/2)/2
%%%%%%%%%%%%%%%%%%%%%
>> sin(pi/3)

ans =

    0.8660
%%%%%%%%%%%%符号变量%%%%%%%%%%%%%%
>> a=5;
   b=-8;
 x=sym('a');		%%%%%%%记得加单引号
 y=sym('b');
w=(a+b)*(a-b)
w =

   -39
>> s=(x+y)*(x-y)
 
s =
(a + b)*(a - b)
%%%%%%%%%因为本例中a,b已经赋值
所以要计算符号表达式的值
可以用eval(s)将符号表达式的值
转换成数学结果%%%%%%%%%%%%%%%%%

符号计算的结果是一个精确的数学表达式
数值计算的结果是一个数值

sym函数一次只能定义单个符号对象
-----------------------//------------------------------
syms函数
用于一次定义多个符号变量

syms 符号变量名1 符号变量名2 … 符号变量名n

其中,变量名不能加单引号,相互之间用空格隔开。
---------------------//-----------------------------------
在进行符号对象的运算前,可用 assume函数对符号对象设置值域,函数调用格式为:
assume(condition)
assume(expr,set)
第一种格式指定变量满足条件 condition,第二种格式指定表达式expr属集合set
----------------//-----------------------------------------

(1)四则运算
(2)关系运算
(3)逻辑运算
(4)因式分解与展开运算

MATLAB提供了对符号表达式进行因式分解、展开、合并的函数,函数的调用格式为:

1 factor(s):对符号表达式s分解因式。
2 expands):对符号表达式s进行展开。
3 collect(s):对符号表达式s合并同类项。
4 collect(s,v):对符号表达式s按变量v合并同类项。

>> syms a b;
>> s=a^3-b^3;
>> factor(s) 
ans =
 
[ a - b, a^2 + a*b + b^2]

>> factor(12)
ans =

     2     2     3

>> factor(24)
ans =

     2     2     2     3

(5)其他运算

1 提取有理分式的分子分母:[n,d]=numden(s)
2 提取符号表达式的系数:c=coeffs(s,x)
3 符号表达式化简: simplify(s)
(例如:将sin2+cos2化简为1)
4 符号多项式与多项式系数向量之间的转换:
符号多项式转换为多项式系数向量:p=sym2poly(s)
多项式系数向量转换为符号多项式:s=poly2sym( p)

求方程ax2+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)
%%%%%%%%结果%%%%%%%%%%
g =
 
[ c, b, a]
 
g =
 
[ a, b, c]
  
ans = 
 -(b + (b^2 - 4*a*c)^(1/2))/(2*a)
 -(b - (b^2 - 4*a*c)^(1/2))/(2*a)

(6)符号运算中变量的确定

①如果没有明确指定自变量,MATLAB将按以下原则确定主变量并对其进行相应运算:
1.寻找除i、j之外,在字母顺序上最接近x的小写字母。
2.若表达式中有两个符号变量与x的距离相等,则ASCII码大者优先。
②symvar( )函数可以用于查找一个符号表达式中的符号变量 ,函数的调用格式为:
symvar(s,n)
函数返回符号表达式s中的n个符号变量。因此,可以用symvar(s,1)查找表达式s的主变量。

当λ取何值时,以下齐次线性方程组有非0解

在这里插入图片描述

syms  lamda;
A=[1-lamda -2 4;2 3-lamda 1;1 1 1-lamda];
D=det(A);
factor(D)
%%%%%%%%%%%%%%结果%%%%%%%%%%%%
ans =
 
[ -1, lamda, lamda - 2, lamda - 3]
故当lamda为023时,该方程组有非零解

这里重温一下矩阵常用的几个函数
1.
det(A):求方阵A的行列式
2.
D = diag(v) 返回主对角线上为向量 v 的元素的对角矩阵。
D = diag(v,k) 将向量 v 的元素放置在第 k 条对角线上。k=0 表 示主对角线,k>0 位于主对角线上方,k<0 位于主对角线下方。
x = diag(A) 返回 矩阵A 的主对角线元素的列向量。
x = diag(A,k) 返回矩阵 A 的第 k 条对角线上元素的列向量。
3.
inv(X) 计算方阵X的逆矩阵
4.
求解线性方程组一般用反斜杠法而非inv(A)*b,反斜杠法计算速度更快而且误差更小
5.
k = rank(A) 返回矩阵 A 的秩。
6.
trace(A) 计算矩阵 A 的对角线元素之和

Taylor

%%%%%%%%求指数函数、正弦函数和余弦函数
五阶的麦克劳林级数展开式。
syms x
T1 = taylor(exp(x))
T2 = taylor(sin(x))
T3 = taylor(cos(x))
%%%%%%%输出结果%%%%%%%%
T1 = 
x^5/120 + x^4/24 + x^3/6 + x^2/2 + x + 1
T2 = 
x^5/120 - x^3/6 + x
T3 = 
x^4/24 - x^2/2 + 1
%%%%%%%%%%按升序显示多项式%%%%%%%
sympref('PolynomialDisplayStyle','ascend');
%%%%%%%%%%指定扩展点%%%%%%%%
taylor(acot(x), x, 1)     %%%%  1这点展开
%%%%%%展开到8%%%%%%%%
syms x
f = sin(x)/x;
T8 = taylor(f, x, 'Order', 8);%%使用Order控制截断顺序
syms x
fplot([sin(x) cos(x)])

结果:
在这里插入图片描述
b = mod(a,m) 返回 a 除以 m 后的余数,其中 a 是被除数,m 是除数
randn:正态分布的随机数

常微分方程数值求解

微分方程:
函数及其导数的关系式。未知函数是一元函数的微分方程称作常微分方程,未知函数是多元函数的微分方程称作偏微分方程。

对函数求导

对于数值计算,diff是求微分
对于符号计算
syms x
f(x)=asin(x)+x^2;
diff(f(x))
diff(f(x),3)        %求三阶导数
diff(f(x),x)         %求对x的偏导数
%%%%%%来看一下结果%%%%%%
ans =

2*x + 1/(1 - x^2)^(1/2)
ans =

(3*x^2)/(1 - x^2)^(5/2) + 1/(1 - x^2)^(3/2)
ans =

2*x + 1/(1 - x^2)^(1/2)

Matlab函数求导教程

dsolve函数

求解 微分方程:dy/dt=a*y

%%%%%%%求解一阶微分方程%%%%%%%
syms y(t) a     %%%这里注意一定要定义成y(t)的形式
%%%%%%%%%%不要分开定义y t%%%%%%
eqn = diff(y,t) == a*y;
S = dsolve(eqn)
%%%%%%结果%%%%%%%
S = 
C1*exp(a*t)

求解 微分方程:d2y/d t2=a*y

%%%%%%%求解二阶微分方程%%%%%%%
syms y(t)  a
eqn = diff(y,t,2) == a*y;
ySol(t) = dsolve(eqn)
%%%%%%%%结果%%%%%%%%%
ySol(t) =
C2*exp(a^(1/2)*t) + C3*exp(-a^(1/2)*t) 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值