我试图编写一个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})
仍然是正确的但是它还没有足够的简化。
有没有办法纠正这个?