如何在MATLAB中将向量作为函数的参数传递?

时间:2016-12-15 17:47:53

标签: matlab function vector

我有一个生成测试数据的函数,

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

我有另一个函数将2-col矩阵写入文本文件

function write_to_file(file_name, A, B)
    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());

但是,它产生了以下错误,

  

??? Input argument "B" is undefined.

     

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

我可以进行哪些修改?

1 个答案:

答案 0 :(得分:2)

你定义write_to_file取三个参数,但你用两个参数调用它。

您可以预先初始化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());在这种情况下应该起作用。