第四章 方程求解.doc

上传人:壹****1 文档编号:554857072 上传时间:2023-10-14 格式:DOC 页数:17 大小:1.04MB
返回 下载 相关 举报
第四章 方程求解.doc_第1页
第1页 / 共17页
第四章 方程求解.doc_第2页
第2页 / 共17页
第四章 方程求解.doc_第3页
第3页 / 共17页
第四章 方程求解.doc_第4页
第4页 / 共17页
第四章 方程求解.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《第四章 方程求解.doc》由会员分享,可在线阅读,更多相关《第四章 方程求解.doc(17页珍藏版)》请在金锄头文库上搜索。

1、第四章 方程求解教学目的:学习并掌握计算机代数系统Maple下进行代数方程和微分方程求解的方法和技巧,并了解其在方程求解中的缺限。 教学目标:掌握代数方程和微分方程求解的方法和技巧,并尝试应用所学数学基础解决Maple下关于方程求解的缺陷问题。 重点内容:代数方程求解,微分方程求解。 难点内容:高次代数方程求解,非线性微分方程求解。1 代数方程(组)求解1.1 常用求解工具solve 求解代数方程或代数方程组, 使用Maple中的solve函数. 求解关于x的方程eqn=0的命令格式为: solve(eqn, x); 求解关于变量组vars的方程组eqns的命令为: solve(eqns, v

2、ars); eqn:=(x2+x+2)*(x-1); solve(eqn,x); 当然, solve也可以求解含有未知参数的方程: eqn:=2*x2-5*a*x=1; solve(eqn,x); solve函数的第一个参数是有待求解的方程或方程的集合, 当然也可以是单个表达式或者表达式的集合, 如下例: solve(a+ln(x-3)-ln(x),x);对于第二个参数, Maple的标准形式是未知变量或者变量集合, 当其被省略时, 函数indets自动获取未知变量. 但当方程中含有参数时, 则会出现一些意想不到的情况: solve(a+ln(x-3)-ln(x);很多情况下, 我们知道一类方

3、程或方程组有解, 但却没有解决这类方程的一般解法, 或者说没有解析解.比如,一般的五次或五次以上的多项式,其解不能写成解析表达式.Maple具备用所有一般算法尝试所遇到的问题,在找不到解的时候, Maple会用RootOf给出形式解. x7-2*x6-4*x5-x3+x2+6*x+4; solve(%); solve(cos(x)=x,x);但是, 有时候, Maple甚至对一些“显而易见”的结果置之不理, 如: solve(sin(x)=3*x/Pi,x); 此方程的解为0 ,6, 但Maple却对这个超越方程无能为力, 即便使用allvalues求解也只有下述结果: allvalues(%

4、); 另外一个问题是, Maple在求解方程之前,会对所有的方程或表达式进行化简, 而不管表达式的类型, 由此而产生一些低级的错误: (x-1)2/(x2-1); solve(%);1 但是, 大量实验表明, solve的确是一个实用的方程求解工具, 但是也不可盲目相信它给出的一切结果, 特别是对于非线性方程而言, 对于给出的结果需要加以验证. 下面通过几个例子说明在Maple中非线性方程组的求解问题. 例:求解方程组: eqns:=x2+y2=25,y=x2-5; vars:=x,y; solve(eqns,vars);也可用下面的语句一步求出: solve(x2+y2=25,y=x2-5,

5、x,y); 这个问题非常简单, 但通常遇到的非线性问题却不是这么简单, 例如要求解方程组: eqns:=x2+y2=1,sqrt(x+y)=x-y; vars:=x,y; sols:=solve(eqns,vars); 可以看出, 方程解的形式是以集合的序列给出的, 序列中的每一个集合是方程的一组解, 这样就很利于我们用subs把解代入原方程组进行检验: subs(sols2,eqns); sols2:=allvalues(sols1); simplify(subs(sols2,eqns);1.2 其他求解工具1.2.1 数值求解对于求代数方程的数值解问题, Maple提供了函数fsolve,

6、 fsolve的使用方法和solve很相似: fsolve(eqns, vars, options); 其中, eqns表示一个方程、方程组或者一个程序, vars表示一个未知量或者未知量集合, options控制解的参数(诸如:complex: 复根; maxsols=n:只找到n阶最小根; intervals:在给定闭区间内求根, 等)。 fsolve(x5-x+1,x);1.167303978 fsolve(x5-x+1,x,complex); fsolve(x3-3*x+1,x,0.1);.3472963553 对于多项式方程, fsolve在默认情况下以给出所有的实数解,如果附加参数

7、complex, 就可以给出所有的解。但对于更一般的其他形式的方程, fsolve却往往只满足于得到一个解: eqn:=sin(x)=x/2; fsolve(eqn);0. fsolve(eqn,x,0.1.infinity); 1.895494267 fsolve(eqn,x,-infinity.-0.1); 1.895494267函数fsolve主要基于两个算法, 通常使用牛顿法,如果牛顿法无效, 它就改而使用切线法。为了使fsolve可以求得所有的实根,我们通常需要确定这些根所在的区间. 对于单变量多项式,函数realroot可以获得多项式的所有实根所在的区间. 4+6*x+x2-x3-

8、4*x5-2*x6+x7; realroot(%);函数realroot还有一个可选参数, 它是用来限制区间的最大长度的, 为了保证使用数值求解方法时收敛, 我们可以用它限制区间的最大长度: realroot(%,1/1000);求解方程或方程组的整数解时使用函数isolve, 它常常被用来求解不定方程. 例如著名的“百钱买百鸡”问题的求解过程为: isolve(x+y+z=100,5*x+3*y+z/3=100);当_Z1=1,2,3时,据此可得满足该问题的三组解为: x, y, z=4, 18, 78, x, y, z=8, 11, 81, x, y, z=12, 4, 84 1.2.2

9、整数环中的方程(组)求解利用Maple中的函数msolve(eqns, vars, n), 可以在模n的整数环中求解方程(组)eqns. 例:在Z7中求解Pell方程 msolve(y7=x3-28,7); 再如下例: msolve(y4=x3+32,5); 1.2.3 递归方程的求解在Maple中, 可以求解有限差分方程(也称递归方程), 所需调用的函数是rsolve, 该函数使用的是一些比较通用的方法, 例如产生函数法、z变换法以及一些基于变量替换和特征方程的方法. 作为例子, 求解Fibonacci多项式: eq:=f(n)=f(n-1)+2*f(n-2); rsolve(eq,f(0)

10、=1,f(1)=1,f(n); 当然, 并不是所有的递归形式的函数方程的解可以写成解析形式, 如果不能, Maple将保留原来的调用形式。此时,可用asympt函数获得它的渐进表达式, 也就是1/n的级数解。例如,对于一个具有超越形式的递归函数方程, 仍然可以得到解的渐进形式: rsolve(u(n+1)=ln(u(n)+1),u(n); asympt(%,n,5); 1.2.4 不等式(组)求解求解一元不等式方程(组)使用命令solve: solve(x-1)*(x-2)*(x-3) solve(x-1+a)*(x-2+a)*(x-3+a) solve(exp(x)x+1); solve(x

11、2*y2=0,x-y=1,x0); 对于由不等式方程组约束的最优问题的求解使用“线性规划”工具包simplex: with(simplex): cnsts:=3*x+4*y-3*z=23, 5*x-4*y-3*z=10,7*x+4*y+11*z obj:=-x+y+2*z; maximize(obj,cnsts union x=0,y=0,z=0); 但是,客观地讲,Maple中求解不等式(组)是一个薄弱环节,尤其对非线性不等式组几乎无能为力。2 常微分方程求解微分方程求解是数学研究与应用的一个重点和难点。Maple能够显式或隐式地解析地求解许多微分方程求解。在常微分方程求解器dsolve中使

12、用了一些传统的技术例如laplace变换和积分因子法等,函数pdesolve则使用诸如特征根法等经典方法求解偏微分方程。此外,Maple还提供了可作摄动解的所有工具,例如Poincare-Lindstedt法和高阶多重尺度法。帮助处理常微分方程(组)的各类函数存于Detools软件包中,函数种类主要有:可视化类的函数,处理宠加莱动态系统的函数,调整微分方程的函数,处理积分因子、李对称法和常微分方程分类的函数,微分算子的函数,利用可积性与微分消去的方法简化微分方程的函数,以及构造封闭解的函数等。更重要的是其提供的强大的图形绘制命令Deplot能够帮助我们解决一些较为复杂的问题。 2.1 常微分方

13、程的解析解求解常微分方程最简单的方法是利用求解函数dsolve. 命令格式为: dsolve(ODE); dsolve(ODE, y(x), extra_args); dsolve(ODE, ICs, y(x), extra_args); dsolve(sysODE, ICs, funcs,extra_args); 其中,ODE常微分方程,y(x)单变量的任意变量函数,Ics初始条件,sysODEODE方程组的集合,funcs变量函数的集合,extra_args依赖于要求解的问题类型。 例如,对于一阶常微分方程(可用dsolve直接求得解析解: ODE:=x*diff(y(x),x)=y(x)

14、*ln(x*y(x)-y(x); dsolve(ODE,y(x); 可以看出,dsolve的第一个参数是待求的微分方程,第二个参数是未知函数。需要注意的是,无论在方程中还是作为第二个参数,未知函数必须用函数的形式给出(即:必须加括号, 并在其中明确自变量),这一规定是必须的,否则Maple将无法区分方程中的函数、自变量和参变量,这一点和我们平时的书写习惯不一致。为了使其与我们的习惯一致,可用alias将函数用别称表示: alias(y=y(x); ODE:=x*diff(y,x)=y*ln(x*y)-y; dsolve(ODE,y); 函数dsolve给出的是微分方程的通解, 其中的任意常数是用下划线起始的内部变量表示的. 在Maple中, 微分方程的解是很容易验证的, 只需要将解代入到原方程并化简就可以了. subs(%,ODE); assume(x,real): assume(_C1,real):simplify(%); evalb(%);evalb函数的目的是对一个包含关系型运算符的表达式使用三值逻辑系统求值,返回的值是true, false和FAIL。如果无法求值,则返回一个未求值的表达式。通常包含关

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号