В отличие от большинства других языков программирования, целочисленные типы в Matlab имеют приоритет над типами с плавающей запятой.Когда вы объединяете их посредством конкатенации или арифметики, значения с плавающей запятой неявно сужаются до целых чисел, а не расширяются до целых чисел.
>> int32(3) + 0.4
ans =
3
>> [int32(3) 0.4]
ans =
3 0
Это по историческим причинам, потому что (IIRC)Изначально в Matlab вообще не было поддержки целых чисел, поэтому все числовые константы в Matlab выдают двойные значения, и правила продвижения были созданы, чтобы можно было смешивать целочисленные типы с константами с плавающей запятой.
Исправитьэто, перед преобразованием явно преобразовать эти типы int в double.
newT = [b(i) double(d(i)) a(i) double(z(i))];