Как избежать того, чтобы Matlab преобразовывал двойные числа в целые числа, помещая эти двойные числа в вектор?

Привет, я пытаюсь поместить двойные значения в вектор, но когда я отображаю этот вектор, я вижу, что двойные значения, которые я помещаю внутрь, преобразуются в целые числа. Как я могу этого избежать?

Я проверил значения тета, и они соответствуют ожиданиям (например, 1,802, 1,688), но в матрице x все значения равны 1.

SerialPort = 'COM23';
s = serial(SerialPort, 'BaudRate', 115200);
fopen(s);

n = 1;


while n<200
    dis = fscanf(s,'d',2);
    ang = fscanf(s,'d',3);
    intDis = str2double(dis);
    intAng = str2double(ang);
    teta = pi/6 +(intAng-100)*pi/300;
    x(n) = teta
    y(n) = intDis;

    n = n+1;
end


%polar(x,y)
fclose(s);
delete(s);
clear s;

person runo    schedule 31.05.2019    source источник
comment
Предоставьте минимальный воспроизводимый пример   -  person Sardar Usama    schedule 31.05.2019
comment
@runo «когда я показываю этот вектор», какой вектор? Вы имеете в виду, смотрите ли вы на это в обозревателе переменных или как вы это отображаете? Было бы полезно, если бы вы предоставили образец того, что считывается на последовательном порту, и более подробно объясните свой вопрос.   -  person user2305193    schedule 31.05.2019


Ответы (1)


Это может произойти только в том случае, если x было объявлено как целое число (или, может быть, логическое?) перед запуском скрипта. Вы всегда должны инициализировать все переменные, всегда, чтобы избежать непредвиденных ошибок: добавьте x=[]; в свой скрипт перед циклом.

Но ваш цикл выполняется ровно 200 итераций, поэтому вы знаете, что размер x будет в конце. Вы можете предварительно выделить:

x = zeros(200,1);

Я также рекомендую вам изучить синтаксис цикла for, так как в данном случае он будет проще, чем while.

person Cris Luengo    schedule 31.05.2019