将Matlab控制台输出转换为新表达式

时间:2013-10-25 07:45:58

标签: matlab

为了调试一组非常复杂的函数,我想从工作区中隔离一个子函数,以便进行不同的测试。因此,需要从功能工作空间中选择要定义的值。通过在特定位置设置断点,我可以通过在控制台中显示值来“查看”当前工作空间,如变量HF33

HF33 =

     1.0777    0.0865    0.0955
    -0.1891    0.8110   -0.1889
     0.0935    0.0846    1.0755

是否有一些函数/脚本可以将此结果转换为可以粘贴到其他位置的新Matlab表达式(例如,在新脚本的头部),例如:

HF33 = [ 1.0777,  0.0865,  0.0955;
        -0.1891,  0.8110, -0.1889;
         0.0935,  0.0846,  1.0755 ];

有了这个,我可以通过轻松更改给定值来测试子功能及其行为,看看发生了什么,而无需运行庞大的调试工作区。

是否有一些简单的功能,如res2exp(HF33)

5 个答案:

答案 0 :(得分:3)

首先:创建此函数以获取变量名称

function out = varname(var)
out = inputname(1);
end

您可以直接将其打印到控制台:

fprintf('%s =%s\n',varname(varToSave),mat2str(varToSave));

或者使用fopen和fprint将其写入文件

fop = fopen('filename','w');
fprint(fop,'%s = %s' ,varname(varToSave),mat2str(varToSave));
fclose(fop);

我认为这会对你有帮助

答案 1 :(得分:2)

我刚刚提出这个问题。它没有很好地格式化,但它实现了你想要做的事情 - 如果我理解正确的话。

a = [ 2 3 4 5
4 5 5 6
3 4 5 6];


fprintf('\nb = [\n\n');
disp(a); 
fprintf(']\n\n');

复制并粘贴此内容,看看它是否符合您的要求。它也是非常简单的代码,因此如果间距和换行符不在您想要的位置,您可以修改它。

如果你愿意的话,你也可以制作一个小功能。

如果你想让我发挥它的作用,请告诉我......我明天可以做到。但你可以搞清楚。

是的,我刚刚完成了这个功能。没过多久。

function reprint_matrix(matrix)

    var_name = inputname(1);

    fprintf('\n%s = [\n\n', var_name);
    disp(matrix); 
    fprintf(']\n\n');

end

答案 2 :(得分:2)

它可能是您正在寻找的mat2str()函数,但它不会完全给出您要求的打印输出。以下是如何使用它的示例:

>> A = magic(4)

A =

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

>> B = mat2str(A)

B =

[16 2 3 13;5 11 10 8;9 7 6 12;4 14 15 1]

如果您希望输出完全复制/粘贴,您可以使用:

disp(['C = ',mat2str(A)])
C = [16 2 3 13;5 11 10 8;9 7 6 12;4 14 15 1]

答案 3 :(得分:1)

我不确定您在寻找什么,但我认为这会对您有所帮助:

http://www.mathworks.com/matlabcentral/fileexchange/24447-generate-m-file-code-for-any-matlab-variable/content/examples/html/gencode_example.html

没有使用它,因为我使用mat-files来传输数据。

您可以将它与剪贴板功能结合使用:

clipboard('copy',gencode(ans))

答案 4 :(得分:0)

虽然有几种方法可以将变量写入文本,但如果可以避免将变量保存为文本则绝对是不好的做法。因此,我能给你的最好建议是以不同的方式解决你的问题。

假设你想在你的子功能中使用HF33,那么这就是我的建议:

首先,保存您感兴趣的变量:

save HF33 HF33

然后当您处于要使用此变量的函数中时:

load HF33

这假设您的工作目录(非工作空间)在两种情况下都相同,但您只需在saveload命令中添加路径即可。如果你想显示它,你现在可以简单地调用变量HF33而不用分号(这可能是在所有情况下完全按照你期望的方式显示它的唯一安全方式)。

请注意,此方法可以轻松调整为一次传输多个变量。