2016-11-18 7 views
0

У меня есть эта часть кода в Matlab, которая должна иметь профиль аэродинамического профиля и увеличивать количество точек, чтобы при построении профиля в другой программе я буду получить более плавную кривую.В Matlab я продолжаю получать неопределенную переменную или ошибку функции, несмотря на четкое определение переменной

clear 
%reading an external data file 
fid = fopen('NACA0015.txt'); 
a = fscanf(fid,'%g %g',[2 inf]); % It has two rows now. 
a = a'; % matrix transpose 

n = input('200')  %e.g., n=35 

for i=1:n 
    for j=1:2 
     fprintf('%12.7f',a(i,j)); %a(i,1) is first column, a(i,2) is 2nd col 
    end 
    fprintf('\n'); 
end 
fclose(fid); 

for i=1:n 
    x(i)=a(i,1);  %x , y vectors 
    y(i)=a(i,2); 
end 

% use spline to create more points 

xx=0:0.01:1  % e.g., step =0.01 (number of points = (1-0)/0.01=100) 
yy = spline(x,y,xx);  % xx and yy are new generated values of Naca0012 

fprintf('\n print spline values \n'); 

plot(xx,yy,'ro')  
hold on 
plot(x,y,'*') 

Когда я запускаю это я получаю ошибку

Неопределенная функция или переменная «х».

Ошибка в read_external_data_and_spline (строка 26) yy = сплайн (x, y, xx); % Хх и уу являются новыми генерироваться значения Naca0012

Я в полной растерянности относительно того, почему это не работает, когда переменная х четко определена в коде, пожалуйста, может кто-то помочь мне с этим

+2

Я предполагаю, что 'n' является' 0', и поэтому цикл, который создает 'x', никогда не запускается, поскольку' 1: 0' дает пустой массив. – Suever

+3

Кроме того, если вы нажмете enter без ввода ввода, 'input' возвращает пустую матрицу. Попытка выполнить итерацию с '1: []' означает, что 'x' никогда не будет инициализироваться, так же как' 1: (любое число меньше 1) '. – excaza

+0

Я не думаю, что это проблема, потому что когда я запускаю его, он показывает 200 в командной консоли, а затем я нажимаю кнопку ввода, чтобы вход был предоставлен. – tribo32

ответ

3

Это как вы используете input. Аргумент в input не является значением по умолчанию, это текст приглашения. Если вы введете команду на консоль и нажмите «Ввод», вы получите следующее:

>> n = input('200') 
200 

n = 

    [] 

>> 

Ввод не принимает значение по умолчанию. Если вы действительно хотите иметь интерактивную подсказку с ответом по умолчанию, вы хотите inputdlg:

answer = inputdlg('Enter a number of lines to parse', 'n', 1, '200'); 
n = str2double(answer); 

отмечают, что inputdlg возвращает текст всегда, поэтому вам необходимо преобразовать в число.