【问题标题】:Octave calling function from another m file来自另一个 m 文件的 Octave 调用函数
【发布时间】:2015-11-15 20:52:48
【问题描述】:

m 文件从另一个 m 文件调用函数 nraizes(a)

clear functions;
clc;
x = input('Insert value for a? ') ;
% call to nraizes()
w = nraizes(x)
clear functions;

带有 nraizes() 函数的 nraizes.m 文件:

printf("\n\n");
printf("nraizes por André Castro - UAB 901396");
printf("\n");
printf("Usar na próxima prompt: nraizes(valor numérico)");
printf("\n");

function n = nraizes(a)

% limpar a memoria de todas as vars e funções
clear functions;

clc;

% intervalo para x
x = 0:.1:25;
% ambas as funções h(x) e g(x)
h = @(x) cos(x);
g = @(x) exp(a*x)-1;
% traçar linha na origem das abcissas
or = x;
or(:) = 0;
% gráfico
plot(x, [h(x);g(x);or]);
axis([0, 25, -1, 1])
title("h(x),g(x)");
grid on;
printf("Fim do Script");
printf("\n");

% limpar a memoria de todas as vars e funções
clear functions;

endfunction

它总是抛出以下错误:

warning: function 'nraizes' defined within script file '/Users/andrecastro/0_Thawed/1_UAB/1 UCS_INFORMATICA/Computacao Numerica/0 2015-2016_CN/1 Algoritmos_Octave/nraizes.m'
error: invalid use of script /Users/andrecastro/0_Thawed/1_UAB/1 UCS_INFORMATICA/Computacao Numerica/0 2015-2016_CN/1 Algoritmos_Octave/nraizes.m in index expression
error: called from:
error:   /Users/andrecastro/0_Thawed/1_UAB/1 UCS_INFORMATICA/Computacao Numerica/0 2015-2016_CN/1 Algoritmos_Octave/script.m at line 19, column 7

我不明白为什么。两个 .m 文件位于同一路径中。

【问题讨论】:

  • 您在函数nraizes(这是您编写的函数)上有错误。您说有一个名为 nraizes 的函数,但您没有编写函数,而是编写了一个脚本。要成为一个函数,它需要从一个函数定义开始。
  • 我在另一个 .m 文件中编写了函数 nraizes。我现在将编辑帖子并包含 nraizes()。编辑完成。包括 nraizes.m。
  • 把函数定义放在文件的第一行。第一行,不是第 7 行。
  • 正如烧杯所说,我做到了。它运行良好并给出了正确的图表。但是给出了警告->警告:nraizes:返回值列表中的某些元素未定义 w = [](0x0) 此警告涉及什么?
  • 非常感谢 carandraug :)

标签: function call octave


【解决方案1】:

您在与函数同名的文件中定义了nraizes。你不应该这样做,因为现在你有一个脚本和一个函数,都命名为nraizes,这会让事情变得混乱。

这是第一个警告的意思:

warning: function 'nraizes' defined within script file '[...]/nraizes.m'

警告该函数位于同名脚本上。

您可以这样做(这只是一个警告),但您不应该这样做。如果您想这样做,您需要先获取nraizes 脚本,然后才能使用该功能:

nraizes; # source nraizes script
w = nraizes (x); # call nraizes function

这就是你出错的原因

error: invalid use of script [...]nraizes.m in index expression

因为你试图调用一个不存在的函数(或索引一个变量——记住该函数尚未定义,所以 Octave 不知道)。

但是,nraizes.m 顶部的 printf 语句表明您实际上只想将其作为函数文件。在这种情况下,您应该删除那些 printf(将它们替换为 cmets,它们将在您运行 help nraizes 时显示),以便第一条语句是实际的函数定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2016-09-07
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多