MatLab & 数学建模
第四讲 数值计算
符号数学工具箱
符号表达式的运算 | |
numeric | 符号到数值的转换 |
pretty | 显示悦目的符号输出 |
subs | 替代子表达式 |
sym | 建立符号矩阵或表达式 |
symadd | 符号加法 |
symdiv | matlab求导 符号除法 |
symmul | 符号乘法 |
symop | 符号运算 |
sympow | 符号表达式的幂运算 |
symrat | 有理近似 |
symsub | 符号减法 |
symvar | 求符号变量 |
符号表达式的简化 | |
collect | 合并同类项 |
expand | 展开 |
factor | 因式 |
simple | 求解最简形式 |
simplify | 简化 |
symsum | 和级数 |
符号多项式 | |
charpoly | 特征多项式 |
horner | 嵌套多项式表示 |
numden | 分子或分母的提取 |
poly2sym | 多项式向量到符号的转换 |
sym2poly | 符号到多项式向量的转换 |
符号微积分 | |
diff | 微分 |
int | 积分 |
jordan | 约当标准形 |
taylor | 泰勒级数展开 |
符号可变精度算术 | |
digits | 设置可变精度 |
vpa | 可变精度计算 |
求解符号方程 | |
compose | 函数的复合 |
dsolve | 微分方程的求解 |
finverse | 函数逆 |
linsolve | 齐次线性方程组的求解 |
solve | 代数方程的求解 |
符号线性代数 | |
charploy | 特征多项式 |
determ | 矩阵行列式的值 |
eigensys | 特征值和特征向量 |
inverse | 矩阵逆 |
jordan | 约当标准形 |
linsolve | 齐次线性方程组的解 |
transpose | 矩阵的转置 |
一、 方程求解
求解单个代数方程
MATLAB具有求解符号表达式的工具,如果表达式不是一个方程式(不含等号),则在求解之前函数solve将表达式置成等于0。
>> solve( ' a*x^2+b*x+c ' ) % solve for the roots of the eqution
ans=
[1/2/a*(-b+(b^2-4*a*c)^1/2)]
[1/2/a*(-b-(b^2-4*a*c)^1/2)]
结果是符号向量,其元素是方程的2个解。如果想对非缺省x变量求解,solve必须指定变量。
>> solve( ' a*x^2+b*x+c ' , ' b ' ) % solve for b
ans=
-(a*x^2+c)/x
带有等号的符号方程也可以求解。
>> f=solve( ' cos(x)=sin(x) ' ) % solve for x
f=
1/4*pi
>> t=solve( ' tan(2*x)=sin(x) ' )
t=
[ 0]
[acos(1/2+1/2*3^(1/2))]
[acos(1/2=1/2*3^(1/2))]
并得到数值解。
>> numeric(f)
ans=
0.7854
>> numeric(t)
ans=
0
0 + 0.8314i
1.9455
注意在求解周期函数方程时,有无穷多的解。在这种情况下,solve对解的搜索范围限制在接近于零的有限范围,并返回非唯一的解的子集。
如果不能求得符号解,就计算可变精度解。
>> x=solve( ' exp(x)=tan(x) ' )
x=
1.306326940423079
代数方程组求解
可以同时求解若干代数方程,语句solve(s1,s2,.....,sn)对缺省变量求解n个方程,语句solve(s1,s2,...,sn,' v1,v2,...,vn ')对n个' v1,v2,...vn '的未知数求解n个方程。
solve(f) 解符号方程式f。
solve(f1,…,fn) 解由f1,…,fn组成的联立方程式。
我们先定义以下的方程式:
>>eq1 = 'x-3=4'; % 注意也可写成'eq1=x-7'
>>eq2 = 'x*2-x-6=0'; % 注意也可写成'eq2=x*2-x-6'
>>eq3 = 'x2+2*x+4=0';
>>eq4 = '3*x+2*y-z=10';
>>eq5 = '-x+3*y+2*z=5';
>>eq6 = 'x-y-z=-1';
>>solve(eq1)
ans=
7
>>solve(eq2)
ans=
[[3],[-2]]' % 原方程式有二个根3, -2
>>solve(eq3)
ans=
[[-1+i*3^(1/2)],[-1-i*3^(1/2)]]' % 注意实根和虚根的表示式
>>solve(eq4,eq5,eq6) % 解三个联立方程式
ans=
x = -2, y = 5, z = -6
如何处理中小学典型的代数问题?
10美分的硬币数加上5美分的硬币总数的一半等于25美分的硬币数。
1美分的硬币数比5美分、10美分以及25美分的硬币总数多10。
25美分和10美分的硬币总数等于1美分的硬币数加上1/4的5美分的硬币数
25美分的硬币数和1美分的硬币数比5美分的硬币数加上8倍的10美分的硬币数多1。
如果电影票价为3.00美元,爆米花为1.00美元,糖棒为50美分,她有足够的钱去买这三样东西?
首先,根据以上给出的信息列出一组线性方程,假如p,n,d和q分别表示1美分,5美分,10美分,和25美分的硬币数
然后,建立MATLAB符号方程并对变量求解。
>> eq1= ' d+(n+p)/2=q ' ;
>> eq2= ' p=n+d+q-10 ' ;
>> eq3= ' q+d=p+n/4 ' ;
>> eq4= ' q+p=n+8*d-1 ' ;
>>[pennies,nickles,dimes,quarters]=solve(equ1,equ2,equ3,equ4,' p,n,d,q ' )
发布评论