3

为了调试一组非常复杂的功能,我想从工作区中隔离一个子功能,以便进行不同的测试。因此,需要从功能工作区中选择已定义的值。通过在特定位置设置断点,我可以通过在控制台中显示值来“查看”当前工作区,例如变量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)吗?

4

5 回答 5

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);

我想这会对你有所帮助

于 2013-10-25T07:53:34.753 回答
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
于 2013-10-25T08:14:30.273 回答
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]
于 2013-10-25T08:20:18.487 回答
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))

于 2013-10-25T08:01:09.353 回答
0

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

假设你想HF33在你的子函数中使用,那么这是我推荐的:

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

save HF33 HF33

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

load HF33

这假定您的工作目录(不是工作区)在两种情况下都是相同的,但否则您可以简单地在saveorload命令中添加路径。如果您想显示它,您现在可以简单地调用HF33不带分号的变量(这可能是在所有情况下完全按照您期望的方式显示它的唯一安全方法)。

请注意,这种方法可以很容易地适应一次传输多个变量。

于 2013-10-25T08:38:58.243 回答