Как я понял ваш вопрос, у вас есть два полинома и вы хотите найти все точки, где они равны.
Вот функция, которая использует Modelica.Math.Vectors.Utilities.roots
:
Сначала вы даете два полинома poly1
и poly2
. Поиск poly1=poly2
идентичен поиску poly1-poly2=0
, поэтому я определяю третий многочлен polyDiff = polyLong-polyShort
, а затем передаем этот многочлен Modelica.Math.Vectors.Utilities.roots
. Он вернет все корни, даже сложные.
function polyIntersect
input Real[:] poly1={3,2,1,0};
input Real[:] poly2={8,7};
output Real[:,2] intersect;
protected
Integer nPoly1 = size(poly1,1);
Integer nPoly2 = size(poly2,1);
Integer nPolyShort = min(nPoly1, nPoly2);
Integer nPolyLong = max(nPoly1, nPoly2);
Real[nPolyShort] polyShort;
Real[nPolyLong] polyLong;
Real[nPolyLong] polyDiff;
algorithm
if (nPoly1<nPoly2) then
polyShort := poly1;
polyLong := poly2;
else
polyShort := poly2;
polyLong := poly1;
end if;
polyDiff := polyLong;
for i in 0:nPolyShort-1 loop
polyDiff[nPolyLong-i] := polyLong[nPolyLong-i] - polyShort[nPolyShort-i];
end for;
intersect := Modelica.Math.Vectors.Utilities.roots(polyDiff);
end polyIntersect;
Приведенный выше код также доступен здесь: https://gist.github.com/thorade/5388205
Вы уже смотрели на 'Modelica.Math.Vectors.Utilities.roots'? Это функция для вычисления корней многочлена. Если это поможет, вы должны написать короткий пример в качестве самостоятельного ответа здесь. – matth