2016-12-15 15 views
0

私はMATLABで関数の引数としてベクトルを渡すにはどうすればよいですか?

function write_to_file(file_name, A, B) 
    fid = fopen(file_name,'w'); 
    fprintf(fid, '%f\t%f \n', [A B]'); 
    fclose(fid); 
end 

、私はテキストファイルに2-COL行列を書き込み、別の機能を持っている

function [A B] = generate_test_data() 

    A = linspace(0.1, 15, 400)'; 
    eps = (0.2*rand(400,1)) - 0.1; 
    B = sin(A) ./ A - eps; 

end 

、テストデータを生成する関数を持って、私は、これらの機能を使用したいですそれは次のエラーを生成している、

write_to_file('test_data.txt', generate_test_data()); 

に従いますが、

私は何の変更を行うことができます

??? Input argument "B" is undefined.

Error in ==> write_to_file at 7 fprintf(fid, '%f\t%f \n', [A B]');

答えて

2

write_to_fileに3つの引数を取るように定義しましたが、2つの引数を使用して呼び出しています。

あなたが事前A及びBを初期化した後、次のように関数に渡すことができ:

[A B] = generate_test_data(); 
write_to_file('test_data.txt', A, B); 

(多分これにワンライナーの代替がある。)

あなたも設定することができこの場合、以下のように、あなたの関数を定義することができ、メンバーABを有する細胞として、二番目の引数を取る関数:

function [C] = generate_test_data() 
    A = linspace(0.1, 15, 400)'; 
    eps = (0.2*rand(400,1)) - 0.1; 
    B = sin(A) ./ A - eps; 
    C = {A B}; 
end 

function write_to_file(file_name, C) 
    A = C{1}; B = C{2}; 
    fid = fopen(file_name,'w'); 
    fprintf(fid, '%f\t%f \n', [A B]'); 
    fclose(fid); 
end 

あなたが今そうであるように、あなたはこのケースで動作するはずすなわちwrite_to_file('test_data.txt', generate_test_data());、関数を呼び出します。

+0

この関数については、 'function write_to_file(file_name、v) fid = fopen(file_name、 'w'); fprintf(fid、 '%f \ t%f \ n'、v '); ; fclose(fid); end' 'write_to_file( 'test_data.txt'、generate_test_data());あなたは、これは任意の欠点を持っています、はい、なぜ – anonymous

+0

場合は? – jeff

+0

:)を必要と' generate_test_dataは() '' v'を生成している ' – anonymous