关于二元不定方程整数解的MATLAB解法
2020-01-17张志恒
张志恒
(郑州财税金融职业学院,郑州 450048)
0 引言
不定式的方程是指由多个未知数组成且未知数取值为整数的方程,本研究的主要目标是二元不定式,即方程中含有两个未知数。定数方程的定义式为:xn+yn=zn,n≥2。现阶段,不定式方程并没有一个统一的解题方法,需根据不定式的基本原则对不定式方程进行求解,然后再根据这一原则利用高等数学、初等数学中所学的知识进行解题。本研究将以二元不定方程整数解的MATLAB解法为例来介绍如何通过MATLAB软件求取不等式的解。
1 基本定义介绍
1.1 二元不定方程定义
形如xn-Dy2=c的方程为二元n(n≥2)次不等式,其中D是一个不等于0的正整数,c是一个不等于0的整数。需要注意的是,当出现n=2,c=±1时,此方程式就为二元一次不定式。
1.2 MATLAB相关编程定义
MATLAB软件是由美国MathWork公司研发而成的一款数学软件,该软件主要用于数据的可视化、数据分析、数学运算等,是一款高级计算语言软件。该软件的产生为科学研究者、工程设计者带来了很多方便,为他们提供了更加全面的问题解决方案,MATLAB软件的研发出品具有非常重要的意义。
MATLAB与Mathematica、Maple并称为三大数学软件,其中MATLAB的基本数据单位与Mathematica、Maple的基本数据单位截然不同,其基本数据单位为矩阵,因此它的数学运算能力更加突出。①for循环:for循环是指对循环的结果进行输出,for循环主要包括以下几个单词:index、increment、endvalue。它们在for循环语句中所代表的含义:index是指循环变量;increment是指增量;endvalue是指对运行的循环进行中止判断。②if与 else或elseif的连用:if与else或elseif的连用是对前面逻辑问题的选择,如果对前面的逻辑条件选择认同,那么就使用if else语句。如果对前面的逻辑条件选择否认,那么就使用if elseif。③函数floor(x):函数floor(x)是指x向左进行整数取值。例如:floor(-2.6) =-3,floor(3.7)=3。④函数sqrt(x):函数sqrt(x)是指进行x平方根的取值。例如:sqrt(16)=4。⑤函数power(x,1/n):函数power(x,1/n)是指进行x的n次方根的取值。例如:power(9,1/2)=3。⑥“==”表示当对两个式子进行计算时,如果两个式子的值相等,那么程序将自动返回到1进行运算。如果两个式子的值不相等,那么程序将自动返回到0进行运算。
2 编程求解二元不定方程整数解的MATLAB设计思路
step1:对x0、y0这两个重要变量进行定义,然后对y取值范围进行设定,本程序对于y的取值范围规定为y≤50 000。
step2:确定本程序循环的表达式以及需要执行的次数,并将“s”定义为不定式整数解的个数。
step3:确定本程序循环中for循环的语句,然后根据不定式整数解的算法过程确定for循环执行的次数,并对循环次数x、y进行定义。
step4:对于不定式的求解过程使用if语句来实现,并对整数解进行输出,完成输出后结束整个程序。
3 编程求解二元不定方程整数解的MATLAB设计程序
利用MATLAB软件来求取二元不定方程整数解,本研究针对这个问题进行了编程设计,具体程序如下:
(1)进行二元二次不定式方程x2+Dy2=c(y≤50 000)的求解程序为:
x0=▯;y0=▯;
y=1∶50 000;x1=floor(sqrt(D*50 000^2+c));
x=1∶x1;s=0;
for y=1∶1∶50 000;for x=1∶1∶x1;
if x^2-D*y^2==c;
s=s+1;x0(s)=x;y0(s)=y;
end
end
end
(2)推广:二元n次不定式方程xn+yn=c(y≤50 000)的求整数解程序为:
x0=▯;y0=▯;
y=1∶50 000;x1=floor(sqrt(D*50 000^n+c));
x=1∶x1;s=0;
for y=1∶1∶50 000;for x=1∶1∶x1;
if x^n-D*y^n==c;
s=s+1;x0(s)=x;y0(s)=y;
end
end
end
4 用MATLAB程序解二元不定方程的应用
例1:求以下二元二次不定方程x2-43y2=-3(y≤50 000)的整数解。
解:将以上二元二次不定式方程所给出的已知条件带入到以下的MATLAB程序中:
x0=▯;y0=▯;
y=1∶50 000;x1=floor(sqrt(43*50 000^2+1-3),1/1);
x=1∶x1;s=0;
for y=1∶1∶50 000;for x=1∶1∶x1;
if x^2-43*y^2==-3;
s=s+1;x0(s)=x;y0(s)=y;
end
end
end
通过以上的程序运算,得出此二元二次不定式的整数解为:
x0=[13,400,90 932];y0=[2,61,13 867];S=3
例2:求取下面二元三次不定式x3-26y2=1(y≤50 000)的整数解。
解:将以上二元三次方程中的已知条件带入到MATLAB程序中:
x0=▯;y0=▯;
y=1∶50 000;x1=floor(power(26*50 000^2+1,1/3));
x=1∶x1;s=0;
for y=1∶1∶50 000;for x=1∶1∶x1;
if x^3-26*y^2==1;
s=s+1;x0(s)=x;y0(s)=y;
end
end
end
通过MATLAB程序的运算能够快速求得x3-26y2=1(y≤50 000)的整数解,即x0=[3,313];y0=[1,1 086];S=2。