MatLab:多项式长除法的代码

时间:2014-03-13 12:26:10

标签: matlab

我试图编写一个matlab代码,用于划分以p=struct('exponent',{0,1,2},'coeff',{1,4,2})等结构数组形式给出的两个多项式。

这就是我到目前为止它所谓的另一个函数addPoly我已经检查过了。

function [ quo,rem ] = divide3Poly( p,q )
%funtion addPoly takes two arguments representing polynomials p and q in the form of
%structure arrays and returns the representation for the polynomial p/q
%with no zero coefficients and the exponents in increasing order.

n=size(p,2);
m=size(q,2);

if p(n).exponent<q(m).exponent
    quo(1).exponent=0;
    quo(1).coeff=0;
    rem=p;
    return
end


quo=struct('exponent',{},'coeff',{});
rem=p;
x=size(rem,2);
for a=x:-1:1  %line 20
    while rem(a).exponent>=q(m).exponent
        tempquo(1).exponent=rem(a).exponent-q(m).exponent;
        tempquo(1).coeff=rem(a).coeff/q(m).coeff;
    for i=m:-1:1
        temprem(i).exponent=q(i).exponent+tempquo(1).exponent;
        temprem(i).coeff=-q(i).coeff*tempquo(1).coeff;
    end

    rem=addPoly(temprem,rem);
    quo=addPoly(quo,tempquo);

    x=size(rem,2);
    if rem(x).coeff==0
        rem=rem(1:x-1);
    end

end %this is line 37
end
end

我遇到的问题是我得到一个错误,指出索引超过第37行中的矩阵尺寸,我不确定原因。

我已经尝试过这个代码而没有从第20行开始的for循环,并且它运行时没有错误消息,尽管它只运行到quo中有一个术语。例如,对于p=struct('exponent',{0,2,3},'coeff',{3,2,1})q=struct('exponent',{0,1},'coeff',{1,1}),我希望获得quo=struct('exponent',{0,1,2},'coeff',{1,1,-1})rem=struct('exponent',{0},'coeff',{4}),但我的代码生成quo=struct('exponent',{2},'coeff',{1})rem=struct('exponent',{0,2},'coeff',{3,1})仍然是正确的但是它还没有足够的简化。

有没有办法纠正这个?

0 个答案:

没有答案