Ich schreibe eine Funktion, die die Gewichte für die baryzentrische Interpolationsformel berechnet. Ignoriert Art Stabilität, das ist einfach genug:Typstabilität für eine Funktion mit Fallunterscheidungen
function baryweights(x)
n = length(x)
if n == 1; return [1.0]; end # This is obviously not type stable
xmin,xmax = extrema(x)
x *= 4/(xmax-xmin)
#^Multiply by capacity of interval to avoid overflow
return [
1/prod(x[i]-x[j] for j in 1:n if j != i)
for i = 1:n
]
end
Das Problem für Typ Stabilität ist der Rückgabetyp der n > 1
Fall zu arbeiten, so kann ich ein Array des richtigen Typs im n == 1
Fall zurück. Gibt es einen einfachen Trick, um dies zu erreichen?
Was ist das Ergebnis erwartet? Denn wenn ich 'baryweights ([1,2,3])' 'means parameter is' Array {Int} 'result ist' Array {Float64} '! Ist wirklich das Problem online, auf das Sie hinweisen? – Liso
Ja, das ist erwünscht. Ich möchte, dass der Rückgabetyp unabhängig davon ist, was der Fall "n> 1" zurückgibt, aber dies sollte für jeden Wert von "n = 1" gelten, einschließlich "n == 1". – gTcV
Aber was ist ein Anwendungsfall? Ich habe komplexe Zahlen ausprobiert, aber es funktioniert nicht mit 'Extrema'-Funktion. Können Sie einige Beispiele zeigen, bei denen sich die Typen von den Erwartungen unterscheiden? – Liso