计算机代数系统第4章-方程求解(2)

2019-03-28 08:52

eqns := {y???x2???5,x2???y2???25}

> vars:={x,y};

vars := {x,y}

> solve(eqns,vars);

{x???0,y???-5},{x???0,y???-5},{y???4,x???3},{y???4,x???-3} 也可用下面的语句一步求出:

> solve({x^2+y^2=25,y=x^2-5},{x,y});

这个问题非常简单, 但通常遇到的非线性问题却不是这么简单, 例如要求解方程组:x?y?1,x?y?x?y > eqns:={x^2+y^2=1,sqrt(x+y)=x-y}; vars:={x,y}; eqns := {x???y???1,x???y???x???y} vars := {x,y}

> sols:=solve(eqns,vars);

{x???0,y???-5},{x???0,y???-5},{y???4,x???3},{y???4,x???-3}2222sols := {y???RootOf(2_Z2???4_Z???3,-1.000000000???.7071067812I),x????RootOf(2_Z2???4_Z???3,-1.000000000???.7071067812I)???2},{x???1,y???0}- 105 -

可以看出, 方程解的形式是以集合的序列给出的, 序列中的每一个集合是方程的一组解, 这样就很利于我们用subs把解代入原方程组进行检验: > subs(sols[2],eqns);

{1???1}

> sols2:=allvalues(sols[1]); 11sols2 := {x????1???I2,y????1???I2} 22> simplify(subs(sols2,eqns)); {I2???I2,1???1} 1.2 其他求解工具

1.2.1 数值求解

对于求代数方程的数值解问题, Maple提供了函数fsolve, fsolve的使用方法和solve很相似:

fsolve(eqns, vars, options);

其中, eqns表示一个方程、方程组或者一个程序, vars表示一个未知量或者未知量集合, options控制解的参数(诸如:complex: 复根; maxsols=n:只找

- 106 -

到n阶最小根; intervals:在给定闭区间内求根, 等). > fsolve(x^5-x+1,x);

-1.167303978

> fsolve(x^5-x+1,x,complex);

> fsolve(x^3-3*x+1,x,0..1);

.3472963553

对于多项式方程, fsolve在默认情况下以给出所有的实数解, 如果附加参数complex, 就可以给出所有的解. 但对于更一般的其他形式的方程, fsolve却往往只满足于得到一个解: > eqn:=sin(x)=x/2; 1eqn := sin(x)???x 2-1.167303978,-.1812324445???1.083954101I,-.1812324445???1.083954101I,.7648844336???.3524715460I,.7648844336???.3524715460I> fsolve(eqn); > fsolve(eqn,x,0.1..infinity);

0.1.895494267- 107 -

> fsolve(eqn,x,-infinity..-0.1);

-1.895494267

函数fsolve主要基于两个算法, 通常使用牛顿法, 如果牛顿法无效, 它就改而使用切线法. 为了使fsolve可以求得所有的实根, 我们通常需要确定这些根所在的区间. 对于单变量多项式, 函数realroot可以获得多项式的所有实根所在的区间.

> 4+6*x+x^2-x^3-4*x^5-2*x^6+x^7;

4???6x???x???x???4x???2x???x

23567> realroot(%);

函数realroot还有一个可选参数, 它是用来限制区间的最大长度的, 为了保证使用数值求解方法时收敛, 我们可以用它限制区间的最大长度: > realroot(%%,1/1000); ??1195,299?,?3313,1657?,?-633,-1265?? ????1024256????1024512????5121024????????????[[0,2],[2,4],[-2,-1]]求解方程或方程组的整数解时使用函数isolve, 它常常被用来求解不定- 108 -

方程. 例如著名的“百钱买百鸡”问题的求解过程为: > isolve({x+y+z=100,5*x+3*y+z/3=100});

{z???75???3_Z1,x???4_Z1,y???25???7_Z1}

据此可得满足该问题的三组解为:

{x, y, z}={4, 18, 78}, {x, y, z}={8, 11, 81}, {x, y, z}={12, 4, 84}

1.2.2 整数环中的方程(组)求解

利用Maple中的函数msolve(eqns, vars, n), 可以在模n的整数环中求解方程(组)eqns.

例:在Z7中求解Pell方程y?x?28 > msolve(y^7=x^3-28,7);

{x???3,y???6},{x???4,y???1},{y???0,x???0},{x???1,y???1},{y???6,x???6}, {x???2,y???1},{y???6,x???5}再如下例:

> msolve(y^4=x^3+32,5);

{x???2,y???0},{x???4,y???1},{x???4,y???2},{x???4,y???3},{x???4,y???4}

73?

?

百钱买百鸡问题:用100元钱买100只鸡, 大公鸡5元钱1只, 大母鸡3元钱1只, 小鸡1元钱3只, 问如何买法?

- 109 -


计算机代数系统第4章-方程求解(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:应用现代汉语

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: