Akzeptiert Matlab nicht ganzzahlige Indizes?

Natürlich nicht! ... oder doch? Lass uns ein paar Tests machen.

Definierenx = [10 20 30 40 50]. Dann gibt eine der folgenden Anweisungen, wie erwartet, einen Fehler in Matlab (Subscript-Indizes müssen entweder echte positive ganze Zahlen oder logische Zahlen sein):

>> x(1.2)
>> x(-0.3)
>> x([1.4 2 3])
>> x([1.4 2.4 3.4])
>> x([1.4:4])
>> x(end/2)

In @ werden jedoch nicht ganzzahlige Werte akzeptiercolon Indizes. Alle folgenden Funktionen funktionieren in neueren Matlab-Versionen, allerdings mit einer Warnung Integer-Operanden sind für Doppelpunktoperatoren erforderlich, wenn sie als Index @ verwendet werde).

>> x(1.2:3)
ans =
    10    20

>> x(0.4:3)
ans =
    10    10    20

>> x(0.6:3)
ans =
    10    20    30

>> x(1.2:0.7:5)
ans =
    10    20    30    30    40    50

>> x(-0.4:3)
ans =
    10    10    20    30

Es funktioniert auch, wenn der Doppelpunktausdruck @ enthälend:

>> x(1.5:end-2)
ans =
    20    30

>> x(1.5:end/6:end-1)
ans =
    20    20    30    40

uf der anderen Seite funktioniert Folgendes nicht und es wird der gleiche Fehler wie oben angezeigt:

>> x(-0.6:2)
>> x(-0.5:2)

Das beobachtete Verhalten kann @ se zusammengefasst wie folgt

Etwasnterne Rundu tritt ein, wenn eincolon index wird genutzt. Ein Doppelpunktindex ist ein Ausdruck der Forma:b odera:b:c. Es findet keine Rundung statt, wenn das Indizierungsarray ein Standardarray ist, z. B.[a b c] oder auch[a:b] oder[a:b:c].Runden erfolgt mit demnearest integer, außer dass Zahlen zwischen-0.5 und0.5 sind Spezialgehäuse: Sie werden auf @ gerund1 statt zu0. Wenn die aus der Rundung resultierende Ganzzahl negativ ist, tritt natürlich ein Fehler auf.

Ähnliches Verhalten wird in neueren Versionen von @ angezeigOktav außer dass

Anscheinend wird normal auf die nächste Ganzzahl gerundet, ohne dass Zahlen zwischen @ behandelt werde-0.5 und0.5 als Sonderfall; und so geben diese einen Fehler:

>> x(0.4:3)
>> x(-0.4:3)

Ein Fehler wird ausgegeben, wenn der nicht ganzzahlige Bereich einen einzelnen Wert enthält:x(2.4:4) funktioniert, aberx(3.4:4) nicht (natürlich,x([2.4 3.4]) undx(3.4) funktioniert auch nicht).

Andernfalls sind die Ergebnisse dieselben wie in Matlab, und es wird auch eine Warnung ausgegeben Nicht ganzzahliger Bereich, der als Index verwendet wird).

Die Warnungen und die Tatsache, dass Octave ähnlich wie Matlab funktioniert, legen nahe, dass dies @ isbeabsichtig Verhalten. Ist es dokumentiert irgendwo? Kann mir jemand @ gebweitere Informationen oder etwas Licht ins Dunkel bringen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage