【问题标题】:MATLAB function output ans unwantedMATLAB 函数输出和不需要的
【发布时间】:2014-06-06 16:23:48
【问题描述】:

我有一个函数

function [ obsTime, obsWDIR, obsWSPD, obsSWH, obsMWD ] = readObsC(obsFile, endTime)

当我运行它时,它会输出一个巨大的数组ans,它与obsTime 是同一个数组。但是obsTimeobsWDIRobsWSPD等不显示。没有一行代码应该显示ans

当我处于调试模式时,我运行代码并在最后一行停止它,它没有给出输出ans。只有当我点击'step'两次并且函数结束时,才会出现ans输出。

函数中的所有内容都有分号。

为什么会出现ans?我的其他输出在哪里?

【问题讨论】:

  • 或者,当您调用输出函数时,请确保将变量分配给每个可能的输出。所以在命令行输入>>[ obsTime, obsWDIR, obsWSPD, obsSWH, obsMWD ] = readObsC(obsFile, endTime);。这样,您的所有输出都会分配给工作区中的变量。如果您只是调用函数而不定义输出,则默认情况下只返回第一个输出(并显示)。

标签: matlab function


【解决方案1】:

在您的函数定义中,您命名正式的输入和输出参数。这决定了这些参数将在函数中使用的名称。

函数有自己的环境,函数内部的变量名完全独立于函数外部的变量名,除非你使用globalevalin('caller')

您必须在调用时提供实际的输入和输出参数,这决定了函数外部的代码如何引用这些相同的参数。不会仅仅因为名称匹配就自动传递参数!唯一自动的是,如果您不指定实际输出参数,则第一个实际输出参数将是ans,其余的将被丢弃。

如果您只是阅读MATLAB documentation for ans,您就可以知道这一点:

当您未指定输出参数时,MATLAB® 软件会自动创建 ans 变量。

【讨论】:

  • 那么,如何将形式输出参数更改为实际输出参数?不粘贴 [ obsTime, obsWDIR, obsWSPD, obsSWH, obsMWD ] = readObsC(obsFile, endTime);进入命令行。我只想运行程序(真的按 F5)并让它给我那些数组而不是 ans 数组。
  • @Crystalh321:也许你真正想要的是一个脚本?脚本没有自己的环境,它们分配的任何变量都出现在您的工作区(或调用脚本的函数,如果不是从命令行)
  • 嗯,如何将函数转换为脚本?简单地删除单词 function 会出错。 (这是我使用 MATLAB 的第四天。)
  • 只需注释掉整个顶行。调用时不再提供参数,输入必须事先以正确的名称存储在工作区变量中,脚本运行后所有创建的变量(包括但不限于输出)都将在工作区中。
  • 好的,我现在明白了。感谢您的所有帮助!
【解决方案2】:

函数声明指定了返回值,但是当你调用它时,你并没有指定输出的任何地方。当您在命令行中调用某些内容时,输出始终默认为ans,除非您在调用函数时将变量分配给函数的输出。

我将一个名为myfunc 的简单函数定义为:

function [one,two,three,four] = myfunc(value1,value2)

例如,使用工作区变量(表示为 ws_)来捕获函数输出:

>> [ws_one,ws_two,ws_three,ws_four] = myfunc(1,2)

打印:

ws_one =

     1


ws_two =

     2


ws_three =

     1


ws_four =

     2

【讨论】:

  • 您应该为正式输出和实际输出使用不同的名称,以突出显示正在发生的事情。
猜你喜欢
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
相关资源
最近更新 更多