ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:125.10KB ,
资源ID:25908812      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25908812.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(matlab在函数的求解方法 1.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

matlab在函数的求解方法 1.docx

1、matlab在函数的求解方法 1 MatLab & 数学建模 第四讲 数值计算符号数学工具箱符号表达式的运算numeric符号到数值的转换pretty显示悦目的符号输出subs替代子表达式sym建立符号矩阵或表达式symadd符号加法symdiv符号除法symmul符号乘法symop符号运算sympow符号表达式的幂运算symrat有理近似symsub符号减法symvar求符号变量符号表达式的简化collect合并同类项expand展开factor因式simple求解最简形式simplify简化symsum和级数符号多项式charpoly特征多项式horner嵌套多项式表示numden分子或分

2、母的提取poly2sym多项式向量到符号的转换sym2poly符号到多项式向量的转换符号微积分diff微分int积分jordan约当标准形taylor泰勒级数展开符号可变精度算术digits设置可变精度vpa可变精度计算求解符号方程compose函数的复合dsolve微分方程的求解finverse函数逆linsolve齐次线性方程组的求解solve代数方程的求解符号线性代数charploy特征多项式determ矩阵行列式的值eigensys特征值和特征向量inverse矩阵逆jordan约当标准形linsolve齐次线性方程组的解transpose矩阵的转置一、方程求解 求解单个代数方程MAT

3、LAB具有求解符号表达式的工具,如果表达式不是一个方程式(不含等号),则在求解之前函数solve将表达式置成等于0。 solve( a*x2+b*x+c ) % solve for the roots of the equtionans= 1/2/a*(-b+(b2-4*a*c)1/2) 1/2/a*(-b-(b2-4*a*c)1/2)结果是符号向量,其元素是方程的2个解。如果想对非缺省x变量求解,solve必须指定变量。 solve( a*x2+b*x+c , b ) % solve for bans= -(a*x2+c)/x带有等号的符号方程也可以求解。 f=solve( cos(x)=s

4、in(x) ) % solve for xf= 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代数方程组求

5、解可以同时求解若干代数方程,语句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=-

6、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美分的硬币总数等于

7、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

8、,equ2,equ3,equ4, p,n,d,q )pennies= 16nickles= 8dimes= 3quarters= 15所以,黛安娜有16枚1美分的硬币,8枚5美分的硬币,3枚10美分的硬币,15枚25美分的硬币,这就意味着 money=.01*16+.05*8+.10*3+.25*15money= 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);

9、F0=zeros(size(X);surf(X,Y,F1),xlabel(x),ylabel(y),view(-31,62),hold on,surf(X,Y,F2),surf(X,Y,F0),shading interp, %(间隔补齐)hold off 图 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,

10、F1,v) %画F1的三条等位线。hold on,contour(X,Y,F2,v),hold off %画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.7926 0.7843 (3)利用fsolve求精确解。以求(0.7926,7843)附近的解为例。 本例直接用字符串表达被解函数。注意:在此,自变量必须写成x(1), x(2)。假如

11、写成xy(1), xy(2),指令运行将出错。fun=sin(x(1)-x(2),cos(x(1)+x(2); %xy=fsolve(fun,x0(2),y0(2) % xy = 0.7854 0.7854 (4)检验fxy1=sin(xy(1)-xy(2);fxy2=cos(xy(1)+xy(2);disp(fxy1,fxy2) 1.0e-006 * -0.0994 0.2019 说明指令可用以下任何一组指令取代。(A)内联函数形式指令fun=inline(sin(x(1)-x(2), cos(x(1)+x(2), x); %项x必须有。xy=fsolve(fun,x0(2), y0(2);

12、(B)M函数文件形式及指令 先用如下fun.m表示被解函数(并在搜索路径上)fun.mfunction ff=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=

13、 7 2 1 -2 9 15 3 -2 -2 -2 11 5 1 3 2 13b=4 7 -1 0x=abx = 0.4979 0.1445 0.0629 -0.0813单个微分方程常微分方程有时很难求解,MATLAB提供了功能强大的工具,可以帮助求解微分方程。函数dsovle计算常微分方程的符号解。因为我们要求解微分方程,就需要用一种方法将微分包含在表达式中。所以,dsovle句法与大多数其它函数有一些不同,用字母D来表示求微分,D2,D3等等表示重复求微分,并以此来设定方程。任何D后所跟的字母为因变量。MATLAB解常微分方程式的语法是dsolve(equation,condition),

14、其中equation代表常微分方程式即y=g(x,y),且须 以Dy代表一阶微分项yD2y代表二阶微分项y,condition则为初始条件。方程=0用符号表达式D2y=0来表示。独立变量可以指定或由symvar规则选定为缺省。例如,一阶方程dy/dx=1+y2的通解为: dsolve( Dy=1+y2 ) % find the general solutionans= -tan(-x+C1)其中,C1是积分常数。求解初值y(0)=1的同一个方程就可产生: dsolve( Dy=1+y2 , y(0)=1 ) % add an initial conditiony= tan(x+1/4*pi)独

15、立变量可用如下形式指定: dsolve( Dy=1+y2 , y(0)=1 , v ) % find solution to dy/dvans= tan(v+1/4*pi)让我们举一个二阶微分方程的例子,该方程有两个初始条件: =cos(2x)-y (0)=0 y(0)=1 y=dsolve( D2y=cos(2*x)-y , Dy(0)=0 , y(0)=1 )y= -2/3*cos(x)2+1/3+4/3*cos(x) y=simple(y) % y looks like it can be simplifiedy= -1/3*cos(2*x)+4/3*cos(x)通常,要求解的微分方程含

16、有一阶以上的项,并以下述的形式表示:-2-3y=0通解为: y=solve( D2y-2Dy-3*y=0 )y= C1*exp(-x)+C2*exp(3*x)加上初始条件:y(0)=0和y(1)=1可得到: y=solve( D2y-2Dy-3*y=0 , y(0)=0,y(1)=1 )y= 1/(exp(-1)-exp(3)*exp(-x)-1/(exp(-1)-exp(3)*exp(3*x) y=simple(y) % this looks like a candidate for simplificationy= -(exp(-x)-exp(3*x)/(exp(3)-exp(-1) pr

17、etty(y) % pretty it up exp(-x)-exp(3 x) - - exp(3) -exp(-1)现在来绘制感兴趣的区域内的结果。 ezplot(y,-6 2)例:假设有以下三个一阶常微分方程式和其初始条件 y=3x2, y(2)=0.5 y=2.x.cos(y)2, y(0)=0.25 y=3y+exp(2x), y(0)=3 对应上述常微分方程式的符号运算式为: soln_1 = dsolve(Dy = 3*x2,y(2)=0.5) ans= x3-7.500000000000000 ezplot(soln_1,2,4) % 看看这个函数的长相 soln_2 = dso

18、lve(Dy = 2*x*cos(y)2,y(0) = pi/4) ans= atan(x2+1) soln_3 = dsolve(Dy = 3*y + exp(2*x), y(0) = 3) ans= -exp(2*x)+4*exp(3*x)微分方程组函数dsolve也可同时处理若干个微分方程式,下面有两个线性一阶方程。 =3f+4g =-4f+3g 通解为: f,g=dsolve( Df=3*f+4*g , Dg=-4*f+3*g )f= C1*exp(3*x)*sin(4*x)+C2*exp(3*x)*cos(4*x)g= -C2*exp(3*x)*sin(4*x)+C1*exp(3*x

19、)*cos(4*x)加上初始条件:f(0)=0和g(0)=1,我们可以得到: f,g=dsolve( Df=3*f+4*g , Dg=-4*f+3*g , f(0)=0,g(0)=1 )f= exp(3*x)*sin(4*x)g= exp(3*x)*cos(4*x)微分和积分微分和积分是微积分学研究和应用的核心,并广泛地用在许多工程学科。MATLAB符号工具能帮助解决许多这类问题。微分符号表达式的微分以四种形式利用函数diff: f= a*x3+x2-b*x-c % define a symbolic expressionf= a*x3+x2-b*x-c diff(f) % different

20、iate with respect to the default variable xans= 3*a*x2+2*x-b diff(f,a ) % differentiate with respect to aans= x3 diff(f,2) % differentiate twice with respect to xans= 6*a*x+2 diff(f, a ,2) % differentiate twice with respect to aans= 0函数diff也可对数组进行运算。如果F是符号向量或数组,diff(F)对数组内的各个元素进行微分。 F=sym( a*x, b*x2

21、; c*x3, d*s ) % create a symbolic arrayF= a*x, b*x2 c*x3, d*s diff(F) % differentiate the element with respect to xans= a,2*b*x 3*c*x2, 0注意函数diff也用在MATLAB,计算数值向量或矩阵的数值差分。对于一个数值向量或矩阵M,diff(M)计算M(2: m,: )-M(1: m-1,: )的数值差分,如下所示: m=(1: 8).2) % create a vectorM= 1 4 9 16 25 36 49 64 diff(M) % find the d

22、ifferences between elementsans= 3 5 7 9 11 13 15 如果diff的表达式或可变参量是数值,MATLAB就非常巧妙地计算其数值差分;如果参量是符号字符串或变量,MATLAB就对其表达式进行微分。积分积分函数int(f),其中f是一符号表达式,它力图求出另一符号表达式F使diff(F)=f。正如从研究微分学所了解的,积分比微分复杂得多。积分或逆求导不一定是以封闭形式存在,或许存在但软件也许找不到,或者软件可明显地求解,但超过内存或时间限制。当MATLAB不能找到逆导数时,它将返回未经计算的命令。 int( log(x)/exp(x2) ) % atte

23、mpt to integrateans= log(x)/exp(x2)同微分一样,积分函数有多种形式。形式int(f)相对于缺省的独立变量求逆导数;形式(f, s )相对于符号变量s积分;形式int(f,a,b)和int(f, s ,a,b),a,b是数值,求解符号表达式从a到b的定积分;形式int(f, m , n )和形式int(f, s , m , n ),其中m,n是符号变量,求解符号表达式从m到n的定积分。 f= sin(s+2*x) % crate a symbolic functionf= sin(s+2*x) int(f) % integrate with respect to

24、 xans= -1/2*cos(s+2*x) int(f, s ) % integrate with respect to sans= -cos(s+2*x) int(f,pi/2,pi) % integrate with respect to x from /2 to ans= -cos(x) int(f, s ,pi/2,pi) % integrate with respect to s from /2 to ans= cos(2*x)-sin(2*x) int(f, m , n ) % integrate with respect to x from m to nans= -1/2*co

25、s(s+2*n)+1/2*cos(s+2*m)正如函数diff一样,积分函数int对符号数组的每一个元素进行运算。 F=sym( a*x,b*x2;c*x3,d*s ) % create a symbolic arrayF= a*x,b*x2 c*x3, d*s diff(F) % ubtegrate the array elements with respect to xans= 1/2*a*x2,1/3*b*x3 1/4*c*x4, d*s*xdiff函数用以演算一函数的微分项,相关的函数语法有下列4个: diff(f) 传回f对预设独立变数的一次微分值 diff(f,t) 传回f对独立变

26、数t的一次微分值 diff(f,n) 传回f对预设独立变数的n次微分值 diff(f,t,n) 传回f对独立变数t的n次微分值 先定义下列三个方程式,接著再演算其微分项: S1 = 6*x3-4*x2+b*x-5; S2 = sin(a); S3 = (1 - t3)/(1 + t4); diff(S1) ans= 18*x2-8*x+b diff(S1,2) ans= 36*x-8 diff(S1,b) ans= x diff(S2) ans= cos(a) diff(S3) ans= -3*t2/(1+t4)-4*(1-t3)/(1+t4)2*t3 simplify(diff(S3) an

27、s= t2*(-3+t4-4*t)/(1+t4)2int函数用以演算一函数的积分项, 这个函数要找出一符号式 F 使得diff(F)=f。如果积分式的解析式 (analytical form, closed form) 不存在的话或是MATLAB无法找到,则 int 传回原输入的符号式。相关的函数语法有下列 4个: int(f) 传回f对预设独立变数的积分值 int(f,t) 传回f对独立变数t的积分值 int(f,a,b) 传回f对预设独立变数的积分值,积分区间为a,b,a和b为数值式 int(f,t,a,b) 传回f对独立变数t的积分值,积分区间为a,b,a和b为数值式 int(f,m,n) 传回f对预设变数的积分值,积分区间为m,n,m和n为符号式 我们示范几个例子: S1 = 6*x3-4*x2+b*x-5; S2 = sin(a); S3 = sqrt(x); int(S1) ans= 3/2*x4-4/3*x3+1/2*b*x2-5*x int(S2) ans= -cos(a) int(S3) ans= 2/3*x(3/2) int(S3,a,b) ans= 2/3*b(3/2)- 2/3*a(3/2) int(S3,0.5,0.6) ans= 2/25*15(1/2)-1/6*2(1/2)

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

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