2016-11-18 107 views
0

我在Matlab中有一段代碼,它應該採用Airfoil輪廓並增加點數,以便在另一個程序中繪製輪廓時,我會獲得更平滑的曲線。在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,'*') 

當我運行此我得到的錯誤

未定義的函數或變量 'X'。

read_external_data_and_line(第26行)中的錯誤 yy = spline(x,y,xx); %XX和YY是新生成的NACA0012

我完全茫然的價值觀,爲什麼當x變量在代碼中明確規定這是不工作,請能有人幫我這

+2

我猜'n'是'0',因此創建'x'的循環永遠不會運行,因爲'1:0'產生一個空數組。 – Suever

+3

此外,如果您在不提供輸入的情況下回車,輸入將返回一個空矩陣。嘗試從'1:[]'進行迭代,意味着'x'永遠不會被初始化,與'1 :(任何小於1的數)'一樣。 – excaza

+0

我不認爲這是問題所在,因爲當我運行它時,它會在命令控制檯中顯示200,然後我按Enter鍵以便提供輸入 – tribo32

回答

3

這是你如何使用inputinput中的參數不是默認值,它是提示文本。如果將命令輸入到控制檯並按回車鍵,則會出現:

>> n = input('200') 
200 

n = 

    [] 

>> 

輸入不接受默認值。如果你真的想有一個默認回答一個互動的提示,你想inputdlg

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

注意inputdlg返回文本始終,所以你需要轉換爲數字。