我试图找到以结构形式排序多项式,以便指数字段按升序排列。我不想使用内置的排序功能来执行此操作。 例如多项式:
p = struct('exponent',{2,3,2,9},'coeff',{1,2,91,40})
表示多项式: p = 1(x ^ 2)+ 2(x ^ 3)+ 91(x ^ 2)+ 40(x ^ 9) 我想重新排列它以使它成为(指数现在按升序排列) p = 1(x ^ 2)+ 91(x ^ 2)+ 2(x ^ 3)+ 40(x ^ 9)
我的代码是:
function [ output ] = myMergepoly2( p )
h=1;
output(1,length(p))=struct('exponent',{},'coeff',{});
while (h<length(p))
if p(1,h+1).exponent<p(1,h).exponent
output(1,h).exponent = p(1,h+1).exponent;
output(1,h).coeff = p(1,h+1).coeff;
h=h+1;
else
output(1,h).exponent = p(1,h).exponent;
output(1,h).coeff = p(1,h).coeff;
end
end
end
然而,当我尝试运行此功能时,MATLAB遥控器已经忙碌了。写出没有错误消息。我不确定是什么导致了这个以及如何解决它,任何帮助都将不胜感激。
答案 0 :(得分:1)
在循环的else
部分,您不会增加h
,所以它是这样的:
h=1
- &gt; if p(1,h+1).exponent<p(1,h).exponent
是假的 - &gt;跳到其他循环并设置output(1,1).exponent
- &gt; h=1
(while循环继续)。
使用MATLAB内置排序我只是做了以下几点:
exponent = [p.exponent];
coeff = [p.coeff];
[exponent idx] = sort(exponent);
output.exponent = exponent;
output.coeff = coeff(idx);
答案 1 :(得分:0)
替换此行:
output(1,length(p))=struct('exponent',{},'coeff',{});
这一行:
output = struct('exponent',cell(1,length(p)),'coeff',cell(1,length(p)));
也改为:
while (h<length(p))
if p(1,h+1).exponent<p(1,h).exponent
output(1,h).exponent = p(1,h+1).exponent;
output(1,h).coeff = p(1,h+1).coeff;
else
output(1,h).exponent = p(1,h).exponent;
output(1,h).coeff = p(1,h).coeff;
end
h=h+1;
end
但是我仍然没有得到正确的输出,我正在努力。