来自另一个 m 文件的 Octave 调用函数
Octave calling function from another m file
m 文件从另一个 m 文件调用函数 nraizes(a)
。
clear functions;
clc;
x = input('Insert value for a? ') ;
% call to nraizes()
w = nraizes(x)
clear functions;
nraizes.m 带有 nraizes() 函数的文件:
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
这让事情变得混乱。
这是第一个警告的意思:
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
(用注释替换它们,它们将在您 运行 help nraizes
时显示),以便第一个语句是实际的函数定义。
m 文件从另一个 m 文件调用函数 nraizes(a)
。
clear functions;
clc;
x = input('Insert value for a? ') ;
% call to nraizes()
w = nraizes(x)
clear functions;
nraizes.m 带有 nraizes() 函数的文件:
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
这让事情变得混乱。
这是第一个警告的意思:
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
(用注释替换它们,它们将在您 运行 help nraizes
时显示),以便第一个语句是实际的函数定义。