張志恒
(鄭州財稅金融職業學院,鄭州 450048)
不定式的方程是指由多個未知數組成且未知數取值為整數的方程,本研究的主要目標是二元不定式,即方程中含有兩個未知數。定數方程的定義式為:xn+yn=zn,n≥2。現階段,不定式方程并沒有一個統一的解題方法,需根據不定式的基本原則對不定式方程進行求解,然后再根據這一原則利用高等數學、初等數學中所學的知識進行解題。本研究將以二元不定方程整數解的MATLAB解法為例來介紹如何通過MATLAB軟件求取不等式的解。
形如xn-Dy2=c的方程為二元n(n≥2)次不等式,其中D是一個不等于0的正整數,c是一個不等于0的整數。需要注意的是,當出現n=2,c=±1時,此方程式就為二元一次不定式。
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進行運算。
step1:對x0、y0這兩個重要變量進行定義,然后對y取值范圍進行設定,本程序對于y的取值范圍規定為y≤50 000。
step2:確定本程序循環的表達式以及需要執行的次數,并將“s”定義為不定式整數解的個數。
step3:確定本程序循環中for循環的語句,然后根據不定式整數解的算法過程確定for循環執行的次數,并對循環次數x、y進行定義。
step4:對于不定式的求解過程使用if語句來實現,并對整數解進行輸出,完成輸出后結束整個程序。
利用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
例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。