繁体   English   中英

matlab,如何使用函数输出的输出?

[英]matlab, how to use the output that is printed by a function?

我想存储在函数的迭代过程中打印的一些值,但是我不知道该怎么做。 这是我正在使用的代码:

a = 0
b = 2
tol = 1.e-6
trace = 1
F = @(x)1./(x.^3-2*x-5);
Q = quad(F,a,b,tol,trace);

quad函数使用自适应正交方法给出abF积分。 trace = 1在递归过程中将值打印到控制台 [fcnt a ba Q], 但不将它们存储到变量中。

我想存储在过程中打印的a和ba值,以备后用。 例如,这段代码给出了

>> quad(F,0,2,1.e-6,1);
   9     0.0000000000     5.43160000e-01    -0.0989460227
  11     0.5431600000     9.13680000e-01    -0.1584111746
  13     0.5431600000     4.56840000e-01    -0.0755952309
  15     1.0000000000     4.56840000e-01    -0.0828028464
  17     1.0000000000     2.28420000e-01    -0.0391911692
  19     1.2284200000     2.28420000e-01    -0.0436112507
  21     1.4568400000     5.43160000e-01    -0.2054245169
  23     1.4568400000     2.71580000e-01    -0.0667670196
  25     1.4568400000     1.35790000e-01    -0.0302481864
  27     1.5926300000     1.35790000e-01    -0.0365183194
  29     1.7284200000     2.71580000e-01    -0.1366285551
  31     1.7284200000     1.35790000e-01    -0.0492888403
  33     1.8642100000     1.35790000e-01    -0.0871164919
  35     1.8642100000     6.78950000e-02    -0.0350033472
  37     1.9321050000     6.78950000e-02    -0.0520998049
  39     1.9321050000     3.39475000e-02    -0.0228214919
  41     1.9660525000     3.39475000e-02    -0.0292778809

我需要上面第二和第三栏中打印的值。

谢谢。

我不确定我是否理解您的问题; 如果要存储trace

9 0.0000000000 5.43160000e-01 -0.0989460227 11
0.5431600000 9.13680000e-01 -0.1584111746

等...

放入数组中,请考虑使用fprintfquad函数打印trace值。

您可以编辑quand功能- edit quad -看看:

if trace
    fprintf('%8.0f %16.10f %18.8e %16.10f\n',fcnt,a,h,Q);
end

我至少看到两种可能性:

1)使用diary功能

您可以在调用quad之前立即通过调用日记来修改代码; 此函数将CommandWindow中显示的输出的日志创建到文本文件中。

然后,您可以加载该文件的内容以将其内容(跟踪数据)导入工作区。

不要忘记添加“;” 在对quad的调用结束时,否则该函数的输出也将存储到日记文件中,这将防止加载它的可能性

a = 0
b = 2
tol = 1.e-6
trace = 1
F = @(x)1./(x.^3-2*x-5);
% Define the name of the diary file
diary_filename='trace_data.txt';
% Enable saving the data into the "trace_data.txt" output file
diary(diary_filename)
Q1 = my_quad(F,a,b,tol,trace);
% Turn off the diary log
diary
% Load the trace data into the "trace_data" array in the workspace
trace_data=load(diary_filename)

您可能有一个更“通用”的方法,并通过使用tempname动态生成跟踪数据输出文件。

tempname在临时文件夹中生成文件名,因此,如果要将其存储到当前目录中,则必须对其进行拆分,请使用fileparts提取实际文件名)

a = 0
b = 2
tol = 1.e-6
trace = 1
F = @(x)1./(x.^3-2*x-5);
% Dynamically generation of the output file name
tmpName = tempname
% Extract the actual filename
[pathstr,name,ext]=fileparts(tmpName)
% Build the filename and add the extension
diary_file=[name '.txt']
% Enable saving the data into the "trace_data.txt" output file
diary(diary_file)
Q1 = my_quad(F,a,b,tol,trace);
% Turn off the diary log
diary
%  Load the trace data into the "trace_data" array in the workspace
trace_data=load(diary_file)

2)修改quad功能

由于可以使用quad函数的源代码,因此您可以直接修改该函数(不建议使用) ,也可以将其复制到路径上的文件夹中并进行修改。

有很多修改功能的方法。

其中之一可能是:

  • 添加一个输入参数,您可以在其中指定输出文件的名称
  • 在函数中添加代码以打开文件( fopen
  • fprintf调用中添加文件句柄
  • 最后关闭输出文件( fclose

另一种可能是在存储跟踪数据的函数的definitin中添加一个输出参数; 在这种情况下,您还必须在函数的每次迭代中添加代码以将跟踪数据存储到数组中。

希望这可以帮助。

卡普拉

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM