n元一次不定方程的计算机解法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程来得复杂 " 特别是当未知数的个数较多时 " 计算量 急剧增加 " 用人工方法计算显然不大现实 # 因此 " 我 们给出了用计算机求解这类方程的算法及计算机程 序# 对于不定方程 %’ &" 首先我们不妨假设 "’&""& ’ +"! 全 不 为 零 # 其 次 " 如 果 ’ !$" 则 可 对 方wk.baidu.com程 %’ & 两 端 乘 以 2’ 得 到 一 个 与 方 程 %’ & 同 解 的 方 程 " 此 时 右 端 的 ’$$ # 再者 "如果某个 "-!$" 则可将 "- 反号 "从而是方 程中的 "- 全大于零 " 但反号后的方程与原方程一般 来说并不同解 " 因此 " 在求得新方程的解之后 " 要将 其还原成原来方程的解 # 鉴于以上的讨论 " 后边程序的关键是就 ’ $$+ "-"$ 求方程 %’ &的解 # 基于第一节的结论和上边的讨论 " 我们可以通 过对矩阵 # 施加列变换的方法求得不定方程 %’ & 的 解 # 这样便有了如下用 T urbo Pascal ! 语言编写的求 解程序 " 其大致的算法步骤如下 ! ",从键盘获得方程*’, 的诸系数与常数项 # ., 使方程 *’, 的常数项为正 " 得 到 一 个 与 方 程 *’, 等价的方程 # ’, 使 所 得 新 方 程 的 各 系 数 为 正 " 并 用 一 个 集 合 变量记录系数改变符号的情况 # 这时所得新方程与 原始方程不再等价 " 将来要把新方程的解还原为原 方程的解 # /, 对新方程构造定理 & 中的矩阵 ## 0, 对 矩 阵 # 不 断 施 加 定 理 0 中 的 列 变 换 !’ " !" "’ " !( 最 终 得 到 矩 阵 !# 1, 将定理 % 中对应于新方程的矩阵 ! 还原为对 应于原方程的矩阵 ! # 3, 根据定理 5 获得原方程的一个解 # 2, 计算原方程的任意一个特解 #
类或第三类列初等变换.&/所得到的矩阵 " !!)*’+$+ ’+$,
!!!!!!定理 ’ #)
! ! " "
!
设为分块矩阵 " 则存在如定理 0
中所述的矩阵 1 使得
#!)
!
’ $ ’ $ # !
"
%" &
## 此时显然有 !$! 定理 ( 设 ! 与 ! 如定理 & 所述 "%)*#’&#"& ’ +#!,)" &)**’+*"&’+*!,,"且 ’)!& "则 !’)’ 的充要条件是 *’)’ # 以上的结论我们在此均不证明 " 其推导可结合 .0/.&/ 文献 给出 # 我们把重点放在按照以上的结论给出 求解 ! 元一次不定方程的计算机程序上 #
# 源程序
constn=4; t ype arrt =array[1. . n+1, 1. . n]ofi nt eger; arrs=array[1. . n]ofi nt eger;
% 程序模块与算法步骤说明
收稿日期: 2005-02-25 !基金项目 !咸阳师范学院专项基金资助!编号"!"#$%&’!(# 作者简介:白鸿武!)(*+!$%男%陕西省佳县人%咸阳师范学院数学系副教授%西北工业大学理学院在读博士研究生%主要从事 ,-./ 的研究&
* ’ 西北工业大学理学院 " 陕西 西安 4’$$4"5 " 咸阳师范学院数学系 " 陕西 咸阳 4’"$$$,
摘 要!给出了用矩阵方法求解 ! 元一次不定方程的算法与计算机程序& 与其它方法相比% 本方法具有算法简单’易于实现以及通用性好等优点& 关键词!不定方程(解(矩阵(计算机程序 中图分类号!6’""7"5 810’0 文献标识码 ! 9 文章编号 !)*0"1"()+)"234$!+1!!!)1!5 !!!!!! 求解 ! 元一次不定方程比求解二元一次不定方
2005 年 8 月 第 "$ 卷 第 & 期
A ug!"#$% !"$ N o!& JournalofX i anyang N orm alU ni versi t y !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!V ol
咸阳师范学院学报
(元一次不定方程的计算机解法
白鸿武 )%"
! 预备
本文中所涉及的一切常量与变量均假定在整数 的范围之内 #
定理 !"#$ 方程 %’ & "’#’(""#"($"!#!)$ 有解的充要条件是*%’&""&’ +"!,-’# 定论 % 若 *"’&""& ’ +"!,)’ 则 方 程 %’ & 对 任 意 的 ’
均有整数解存在 #
定理 & ! )*"’&""& ’ +"!, 设为行向量 " 其中 "’&""& ’ + "! 全大于零且互素 " 则存在 ! 阶方阵 !)!’!"’ !(" 其 中 !’"!""’"!( 均是由 ! 阶单位阵 "! 经过一次第一
第!期
白鸿武 $! 元一次不定方程的计算机解法
%"%
fori : =1 t o n do i fk[1, i ]<0 t hen begi n k[1, i ]: =-k[1, i ]; j h: =j h+[i ] end; i ni (k); d: =gcd(k); i fctm od d<>0 t hen begi n w ri t el n(' N o sol ut i on!' ); exi t end; ct : =ctdi v d; fori : =1 t o n do k[1, i ]: =k[1, i ]di v d; w hi l e notl sn(k, fi x)do begi n i ffi x<>1 t hen m exc(k, 1, fi x); t rans(k) end; fori : =2 t o n+1 do i fi -1 i nj ht hen si g(k, i ); w ri t el n(' A speci alsol ut i on X 0 i s: ' ); fori : =1 t o n do begi n x0[i ]: =k[i +1, 1]*ct ; w ri t e(x0[i ]: 9) end; w ri t el n; w ri t el n(' T he generalsol ut i on X i s oft he form : ' ); w ri t el n(' X =X 0+D *T ' ); w ri t el n(' W here D i s oft he form ' ); show (k); w ri t el n(' A nd T i s oft he form ' ); w ri t e(' (' ); fori : =1 t o n-1 do w ri t e(' t ' , i , ' , ' ); w ri t el n(chr(8), ' )' ' ' ); w ri t e(' Pl ease i nputT : ' ); fori : =2 t o n do read(t [i ]); readl n; prod(dt ); sum (dt , x0); w ri t el n(' T he gi ven speci alsol ut i on X i s: ' ) fori : =1 t o n do w ri t e(dt [i ]: 9); w ri t el n EN D .
!!!
咸阳师范学院学报
第 20 卷
vari , ct , d, fi x: i nt eger; k: arrt ;j h: setof1. . n; x0, t , dt : arrs; procedure m c(vara: arrt ; i , t , j : i nt eger); vars: i nt eger; begi n fors: =1 t o n+1 do a[s, j ]: =a[s, j ]+a[s, i ]*t ; end; procedure m exc(vara: arrt ; i , j : i nt eger); vart , s: i nt eger; begi n fors: =1 t o n+1 do begi n t : =a[s, j ];a[s, j ]: =a[s, i ];a[s, i ]: =t ; end end; procedure i ni (vara: arrt ); vari , j : i nt eger; begi n fori : =2 t o n+1 do forj : =1 t o n do i fi =j +1 t hen a[i , j ]: =1 el se a[i , j ]: =0 end; procedure show (vara: arrt ); vari , j : i nt eger; begi n fori : =2 t o n+1 do begi n forj : =2 t o n do w ri t e(k[i , j ]: 9); w ri t el n end; w ri t el n end; funct i on l sn(vara: art ;varpos: i nt eger): bool ean; varfl ag: bool ean;s, mi n: i nt eger; begi n fl ag: =t rue;m i n: =a[1, 1];pos: =1; fors: =2 t o n do begi n i fa[1, s]<>0 t hen begi n fl ag: =fal se; i fa[1, s]<m i nt hen begi n mi n: =a[1, s];pos: =s end end end; l sn: =fl ag end; procedure t rans(vark: art ); varff, s, q: i nt eger; begi n
ff: =k[1, 1]; fors: =2 t o n do begi n q: =k[1, s]di v ff; m c(k, 1, -q, s) end end; funct i on gcd(k: arrt ): i nt eger; varfi x: i nt eger; begi n w hi l e notl sn(k, fi x)do begi n i ffi x<>1 t hen m exc(k, 1, fi x); t rans(k) end; gcd: =k[1, 1] end; procedure prod(vardt : arrs); vari , j : i nt eger; begi n fori : =1 t o n do begi n dt [i ]: =0; forj : =2 t o n do dt [i ]: =dt [i ]+k[i +1, j ]*t [j ] end end; procedure sum (vardt : arrs;x0: arrs); vari : i nt eger; begi n fori : =1 t o n do dt [i ]: = dt [i ]+x0[i ] end; procedure si g(vark: arrt ;i : i nt eger); varj : i nt eger; begi n forj : =1 t o n do k[i , j ]: =-k[i , j ] end; B E G IN w ri t el n(' T hi s program i s used t o fi nd t he sol ut i ons for' ); w ri t el n(' l i nearD i ophant i ne equat i ons i n' , n, ' unknow ns. ' ); w ri t e(' Input' , n, ' i nt egralcoeffi ci ent s: ' ); fori : =1 t o n do read(k[1, i ]);readl n; w ri t e(' Inputt he const antt erm : ' ); readl n(ct ); i fct <0 t hen begi n fori : =1 t o n do k[1, i ]: =-k[1, i ]; ct : =-ct ; end; j h=[];
相关文档
最新文档