Это очень необычная вещь, которую нужно спросить.Поскольку мнимая часть является числом с плавающей запятой, вы не можете точно сказать, какое число является действительным числом, а какое очень близко к действительному числу.Такой функции не существует в Matlab, так как не очень понятно, как это было бы полезно для чего-либо (нет смысла удалять эти числа).Указание вашей реальной цели здесь может помочь вам получить лучшие ответы.
Если вы хотите убедиться, что в векторе остались только действительные числа, вы можете использовать следующее (это не работает с матрицами и вертикальными строками,но у вас есть идея):
x = [1, 2, 3+1i, 4+2i, 5+3i, 6, 7, 8+4i, 9+0i]
z = []
for k = [1:length(x)]
if imag(x(k)) == 0
z = [z, real(x(k))]
endif
endfor
Если вы хотите, чтобы все числа были близки к реальному числу, но могли иметь небольшую ненулевую мнимую часть, вы можете использовать следующее:
x = [1, 2, 3+1i, 4+2i, 5+3i, 6, 7, 8+4i, 9+0.000001i]
z = []
for k = [1:length(x)]
if abs(imag(x(k))) < 0.00001
z = [z, real(x(k))]
endif
endfor
Конечно, если вы скажете нам, каков ваш настоящий критерий, было бы гораздо легче дать вам лучшее представление.Вы ищете реальные решения для какого-то уравнения или системы уравнений, реальные корни многочлена?В этом случае первый может упустить реальное решение из-за ошибки аппроксимации, а второй может дать вам то, что не является решением.