以下內(nèi)容為盧朓老師在B站進(jìn)行的分享,可以作為學(xué)習(xí)參考:
多項(xiàng)式長(zhǎng)除法與偽除法:算法解析與區(qū)別
在多項(xiàng)式運(yùn)算中,長(zhǎng)除法與偽除法是兩種常用的方法,用于求解多項(xiàng)式除法問(wèn)題。盡管它們的目的相似,即找到一個(gè)商多項(xiàng)式和余數(shù)多項(xiàng)式,使得被除多項(xiàng)式可以表示為除多項(xiàng)式與商多項(xiàng)式的乘積加上余數(shù)多項(xiàng)式的形式,但它們?cè)谒惴▽?shí)現(xiàn)和結(jié)果解釋上存在一些關(guān)鍵差異。
一、多項(xiàng)式長(zhǎng)除法
多項(xiàng)式長(zhǎng)除法是一種直接且直觀的方法,類似于整數(shù)長(zhǎng)除法。它逐步將除多項(xiàng)式的最高次項(xiàng)與被除多項(xiàng)式的相應(yīng)項(xiàng)對(duì)齊,然后逐項(xiàng)相減,直到得到余數(shù)多項(xiàng)式為止。
算法步驟:
將被除多項(xiàng)式和除多項(xiàng)式按降冪排列。
初始化商多項(xiàng)式和余數(shù)多項(xiàng)式。
從被除多項(xiàng)式的最高次項(xiàng)開(kāi)始,逐項(xiàng)進(jìn)行除法運(yùn)算,計(jì)算當(dāng)前的商,并更新余數(shù)多項(xiàng)式。
重復(fù)上述步驟,直到余數(shù)多項(xiàng)式的次數(shù)低于除多項(xiàng)式的次數(shù)。
特點(diǎn):
長(zhǎng)除法得到的商多項(xiàng)式和余數(shù)多項(xiàng)式是唯一確定的。
余數(shù)多項(xiàng)式的次數(shù)一定低于除多項(xiàng)式的次數(shù)。
長(zhǎng)除法適用于任何次數(shù)的多項(xiàng)式除法問(wèn)題。
二、多項(xiàng)式偽除法
多項(xiàng)式偽除法是一種特殊的多項(xiàng)式除法方法,它引入了一個(gè)乘數(shù)m,使得被除多項(xiàng)式乘以m后可以更容易地進(jìn)行除法運(yùn)算。乘數(shù)m是除多項(xiàng)式最高次項(xiàng)系數(shù)的某個(gè)冪次,這個(gè)冪次與被除多項(xiàng)式和除多項(xiàng)式的次數(shù)差有關(guān)。
算法步驟:
計(jì)算乘數(shù)m。
將被除多項(xiàng)式乘以m,得到新的被除多項(xiàng)式。
初始化偽商多項(xiàng)式和偽余數(shù)多項(xiàng)式。
從新的被除多項(xiàng)式的最高次項(xiàng)開(kāi)始,逐項(xiàng)進(jìn)行除法運(yùn)算,計(jì)算當(dāng)前的商,并更新偽余數(shù)多項(xiàng)式。
重復(fù)上述步驟,直到偽余數(shù)多項(xiàng)式的次數(shù)低于除多項(xiàng)式的次數(shù)。
特點(diǎn):
偽除法得到的偽商多項(xiàng)式和偽余數(shù)多項(xiàng)式不是唯一確定的,因?yàn)樗鼈円蕾囉诔藬?shù)m的選擇。
偽余數(shù)多項(xiàng)式的次數(shù)也一定低于除多項(xiàng)式的次數(shù)。
偽除法在某些特定情況下(如求解多項(xiàng)式的最大公因式或進(jìn)行多項(xiàng)式因式分解時(shí))可能更為方便或有效。
三、長(zhǎng)除法與偽除法的區(qū)別
乘數(shù)m的引入:長(zhǎng)除法不需要引入乘數(shù)m,而偽除法則需要根據(jù)除多項(xiàng)式的最高次項(xiàng)系數(shù)和次數(shù)差來(lái)計(jì)算乘數(shù)m。
結(jié)果唯一性:長(zhǎng)除法得到的商多項(xiàng)式和余數(shù)多項(xiàng)式是唯一確定的,而偽除法得到的偽商多項(xiàng)式和偽余數(shù)多項(xiàng)式則不是唯一確定的,因?yàn)樗鼈円蕾囉诔藬?shù)m的選擇。
應(yīng)用場(chǎng)景:長(zhǎng)除法適用于任何次數(shù)的多項(xiàng)式除法問(wèn)題,而偽除法在某些特定情況下可能更為方便或有效,如求解多項(xiàng)式的最大公因式或進(jìn)行多項(xiàng)式因式分解時(shí)。
算法復(fù)雜度:從算法復(fù)雜度的角度來(lái)看,長(zhǎng)除法和偽除法的計(jì)算量大致相當(dāng),都需要進(jìn)行多次的乘法和減法運(yùn)算。然而,由于偽除法需要計(jì)算乘數(shù)m并乘以被除多項(xiàng)式,因此在某些情況下可能會(huì)引入額外的計(jì)算量。
綜上所述,多項(xiàng)式長(zhǎng)除法和偽除法是兩種不同的多項(xiàng)式除法方法,它們各有特點(diǎn)和應(yīng)用場(chǎng)景。在實(shí)際應(yīng)用中,我們可以根據(jù)具體問(wèn)題的需求選擇合適的方法來(lái)進(jìn)行多項(xiàng)式除法運(yùn)算。
北太天元代碼:
% 示例使用 P = [1 0 2]; % 被除多項(xiàng)式 x^2 + 0*x +2 Q = [2 sqrt(2)]; % 除多項(xiàng)式 2x+sqrt(2) [quotient, remainder] = longDivision(P, Q); disp('Quotient:'); disp(quotient); disp('Remainder:'); disp(remainder); % Example usage: P = [1 0 2]; % 被除多項(xiàng)式 x^2 + 0*x +2 Q = [2 sqrt(2)]; % 除多項(xiàng)式 2x+sqrt(2) %pseudo division 會(huì)得到 2 (x^2 +3 ) = (2*x+1) [m, quotientCoefficients, remainderCoefficient] = pseudoDivision(P, Q); % Display the results disp('m:'); disp(m); disp('Quotient Coefficients:'); disp(quotientCoefficients); disp('Remainder Coefficient:'); disp(remainderCoefficient); function [quotient, remainder] = longDivision(P, Q) % 確保P和Q是行向量 P = P(:)'; Q = Q(:)'; % 獲取多項(xiàng)式的度數(shù) degP = length(P) - 1; degQ = length(Q) - 1; % 初始化商多項(xiàng)式和余多項(xiàng)式 quotient = zeros(1, degP - degQ + 1); remainder = P; % 實(shí)際上是一般多項(xiàng)式除法迭代過(guò)程 for i = degP :-1: degQ % 計(jì)算當(dāng)前的商,使用整個(gè)除多項(xiàng)式Q %quotient的系數(shù)也要降冪排列 % i-degQ 次 應(yīng)該排 (degP-degQ+1)-(i-degQ) = quotient(degP - i + 1) = remainder(1) / Q(1); % 更新余多項(xiàng)式 for j = 1 : degQ+1 remainder(j) = remainder(j) - quotient(degP - i + 1) * Q(j); end % 更新余數(shù)(不移除首項(xiàng),因?yàn)榭赡懿皇?) remainder = remainder(2:end); end % 如果余多項(xiàng)式為空,則設(shè)置為零向量 if isempty(remainder) remainder = zeros(1, 1); end end %偽除法命令用于對(duì)多元多項(xiàng)式P和Q關(guān)于變量x進(jìn)行偽除法運(yùn)算。 %它返回一個(gè)偽余數(shù)r,使得關(guān)系式mP=Qq+r成立,其中m是乘數(shù),q是偽商。r和q都是關(guān)于x的多項(xiàng)式,且 % r關(guān)于x的次數(shù)小于Q關(guān)于x的次數(shù)。乘數(shù)m定義為Q關(guān)于x的最高次項(xiàng)項(xiàng)系數(shù)的(a關(guān)于x的次數(shù)減去b關(guān)于x的次數(shù)再加1)次冪,并且m與x無(wú)關(guān)。 function [m, q, r] = pseudoDivision(P, Q) % 檢查輸入 if isempty(P) || isempty(Q) error('P和Q都不能為空'); end % 獲取P和Q的次數(shù) degP = length(P) - 1; degQ = length(Q) - 1; % 檢查Q的次數(shù)是否大于0 if degQ == 0 error('除式Q的次數(shù)必須大于0'); end % 計(jì)算乘數(shù)m m = Q(1) ^ (degP - degQ + 1); % 初始化偽商q和偽余數(shù)r q = zeros(1, degP - degQ + 1); r = zeros(1, degP + 1); r(1:degP + 1) = m*P; % 偽除法過(guò)程 for k = degP:-1:degQ % 計(jì)算當(dāng)前步的商 q(degP -k + 1) = r(1) / Q(1); % 更新余數(shù) for j = 1:degQ+1 r(j) = r(j) - q(degP -k + 1) * Q(j); end r = r(2:end); end % 去除余數(shù)中前導(dǎo)的零項(xiàng) r = r(find(r, 1, 'first'):end); % 如果r完全為零,則返回一個(gè)空數(shù)組 if all(r == 0) r = []; end end