MatLab4.docx
- 文档编号:2776124
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:21
- 大小:109.38KB
MatLab4.docx
《MatLab4.docx》由会员分享,可在线阅读,更多相关《MatLab4.docx(21页珍藏版)》请在冰豆网上搜索。
MatLab4
MatLab&数学建模
授课:
唐静波(九江学院理学院)
第四讲数值计算
符号数学工具箱
符号表达式的运算
numeric
符号到数值的转换
pretty
显示悦目的符号输出
subs
替代子表达式
sym
建立符号矩阵或表达式
symadd
符号加法
symdiv
符号除法
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')%solvefortherootsoftheeqution
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')%solveforb
ans=
-(a*x^2+c)/x
带有等号的符号方程也可以求解。
>>f=solve('cos(x)=sin(x)')%solveforx
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
如何处理中小学典型的代数问题?
黛安娜(Diane)想去看电影,她从小猪存钱罐倒出硬币并清点,她发现:
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')
pennies=
16
nickles=
8
dimes=
3
quarters=
15
所以,黛安娜有16枚1美分的硬币,8枚5美分的硬币,3枚10美分的硬币,15枚25美分的硬币,这就意味着
>>money=.01*16+.05*8+.10*3+.25*15
money=
4.6100
她就有足够的钱去买电影票,爆米花和糖棒并剩余11美分。
【例】求解二元函数方程组
的零点。
(0)从三维坐标初步观察两函数图形相交情况
x=-2:
0.05:
2;y=x;[X,Y]=meshgrid(x,y);%产生x-y平面上网点坐标
F1=sin(X-Y);F2=cos(X+Y);
F0=zeros(size(X));
surf(X,Y,F1),
xlabel('x'),ylabel('y'),
view([-31,62]),holdon,
surf(X,Y,F2),surf(X,Y,F0),
shadinginterp,
holdoff
图5.6.3-0两函数的三维相交图
(1)在某区域观察两函数0等位线的交点情况
clear;
x=-2:
0.5:
2;y=x;[X,Y]=meshgrid(x,y);%产生x-y平面上网点坐标
F1=sin(X-Y);F2=cos(X+Y);
v=[-0.2,0,0.2];%指定三个等位值,是为了更可靠地判断0等位线的存在。
contour(X,Y,F1,v)%画F1的三条等位线。
holdon,contour(X,Y,F2,v),holdoff%画F2的三条等位线。
图5.6.3-1两个二元函数0等位线的交点图
(2)从图形获取零点的初始近似值
在图5.6.3-1中,用ginput获取两个函数0等位线(即三线组中间那条线)交点的坐标。
[x0,y0]=ginput
(2);%在图上取两个点的坐标
disp([x0,y0])
-0.7926-0.7843
0.79260.7843
(3)利用fsolve求精确解。
以求(0.7926,7843)附近的解为例。
本例直接用字符串表达被解函数。
注意:
在此,自变量必须写成x
(1),x
(2)。
假如写成xy
(1),xy
(2),指令运行将出错。
fun='[sin(x
(1)-x
(2)),cos(x
(1)+x
(2))]';%<12>
xy=fsolve(fun,[x0
(2),y0
(2)])%<13>
xy=
0.78540.7854
(4)检验
fxy1=sin(xy
(1)-xy
(2));fxy2=cos(xy
(1)+xy
(2));disp([fxy1,fxy2])
1.0e-006*
-0.09940.2019
〖说明〗
●指令<12><13>可用以下任何一组指令取代。
(A)内联函数形式指令
fun=inline('[sin(x
(1)-x
(2)),cos(x
(1)+x
(2))]','x');%项'x'必须有。
xy=fsolve(fun,[x0
(2),y0
(2)]);
(B)M函数文件形式及指令
先用如下fun.m表示被解函数(并在搜索路径上)
[fun.m]
functionff=fun(x)
ff
(1)=sin(x
(1)-x
(2));
ff
(2)=cos(x
(1)+x
(2));
然后运行指令xy=fsolve('fun',[x0
(2),y0
(2)])。
●第四步检验中的结果表明:
所找零点处的函数值小于
,是一个十分接近零的小数。
该精度由options.TolFun控制。
options.TolFun的缺省值是1.0000e-006。
它可以用下列指令看到
options=optimset('fsolve');
options.TolFun
ans=
1.0000e-006
线性方程求解
a=[721-2
9153-2
-2-2115
13213]
b=[47-10]'
x=a\b
x=
0.4979
0.1445
0.0629
-0.0813
单个微分方程
常微分方程有时很难求解,MATLAB提供了功能强大的工具,可以帮助求解微分方程。
函数dsovle计算常微分方程的符号解。
因为我们要求解微分方程,就需要用一种方法将微分包含在表达式中。
所以,dsovle句法与大多数其它函数有一些不同,用字母D来表示求微分,D2,D3等等表示重复求微分,并以此来设定方程。
任何D后所跟的字母为因变量。
MATLAB解常微分方程式的语法是dsolve('equation','condition'),其中equation代表常微分方程式即y'=g(x,y),且须以Dy代表一阶微分项y' D2y代表二阶微分项y'' ,condition则为初始条件。
方程
=0用符号表达式D2y=0来表示。
独立变量可以指定或由symvar规则选定为缺省。
例如,一阶方程dy/dx=1+y2的通解为:
>>dsolve('Dy=1+y^2')%findthegeneralsolution
ans=
-tan(-x+C1)
其中,C1是积分常数。
求解初值y(0)=1的同一个方程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MatLab4
![提示](https://static.bdocx.com/images/bang_tan.gif)