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

将Matlab控制台输出转换为新表达式,matlab,Matlab,为了调试一组非常复杂的函数,我想从工作区中隔离一个子函数,以便进行不同的测试。因此,需要从功能工作区中选择已定义的值。通过在特定位置设置断点,我可以通过在控制台中显示值“查看”当前工作区,如变量HF33 HF33 = 1.0777 0.0865 0.0955 -0.1891 0.8110 -0.1889 0.0935 0.0846 1.0755 是否有一些函数/脚本可以将此结果转换为可粘贴到其他地方的新Matlab表达式(例如,在

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

HF33 =

     1.0777    0.0865    0.0955
    -0.1891    0.8110   -0.1889
     0.0935    0.0846    1.0755
是否有一些函数/脚本可以将此结果转换为可粘贴到其他地方的新Matlab表达式(例如,在新脚本的开头),例如:

有了它,我可以通过简单地更改给定的值来测试子函数及其行为,并查看发生了什么,而无需运行庞大的调试工作区


是否有一些简单的函数,如
res2exp(HF33)

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

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

我想这会对你有所帮助

我不确定你在找什么,但我想这会对你有所帮助:

没有使用它,因为我使用mat文件传输数据

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


clipboard('copy',gencode(ans))
我刚才编的。它的格式并不漂亮,但它实现了您想要做的事情——如果我理解正确的话

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

它可能是一个类似于您正在寻找的
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]

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

假设您想在子功能中使用
HF33
,那么以下是我的建议:

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

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

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


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

您能提供一些背景资料吗?您想获得格式为可执行的矩阵还是任何控制台输出?你需要完整的数字精度吗?你真的想要这样的视觉效果吗?否则,您可以将其保存为变量,如
save result.mat
,并在其他脚本中加载result.mat——否则,您肯定可以编写一个看起来像您想要的文本文件,但目标是什么?不,这是为了调试目的。我想测试一个子函数,因此想从本地工作区复制选定的值,以便将它们作为数值插入到新脚本中。然后,如果需要,我可以更改这些值,这样我就有了一个新的测试脚本。您尝试采用的方法非常容易出错,我建议使用其他调试方法。可能吧。尽管如此,在某些情况下,我正在寻找的函数可能是有用的。作为第一个开始,这个函数可能是有用的,但这也可以通过简单地复制控制台输出来实现。我正在寻找一种转换,它可以添加像
[,;]
这样的符号,还可以插入
varname=
command.kromuchi,使用这些函数,您可以在不需要硬记录的情况下自动执行该过程!试试这些,告诉我,如果这解决了你的问题,谢谢你修改的答案。是的,
mat2str
命令发挥了神奇的作用。与您的
varname
-函数一起,我甚至可以得到变量的名称。我认为这应该可以很好地工作。请注意,如果需要,您可以在加载变量后更改其内容,以便于测试直观地保存一个变量并不需要直观地保存它。通常你是对的。当然,将变量作为
mat
文件保存到硬盘驱动器是很方便的。但有时,将变量从一个工作区快速复制到另一个工作区需要更快的解决方案。谢谢。这正是我想要的功能。变量名
C=
的声明仍然必须手工编写,但这是可以承受的。
load HF33