Octave GNU:未定义变量 'x' ,即使它被定义为函数输入
Octave GNU: Undefined variable 'x' , even though it's defined as function input
只是想写一个简单的程序来找到n个数字的gcd。我不知道如何解决这个错误,我已经阅读了所有八度函数文档并试图找到这样的问题......顺便说一句,刚开始在 Octave 中编程。
这是代码:
function divisor = gcd(x, y)
q=0;
r=0;
l=0;
h=0;
if(x>y)
h=x;
l=y;
elseif(x<y)
h=y;
l=x;
else
h=y;
l=x;
endif
while(r != 0)
q=floor(h/l);
r = h-l*q;
q=h;
r=l;
endwhile
divisor = q;
printf("%d", q);
return;
endfunction
错误:
error: 'x' undefined near line 6 column 6
error: called from
gcd at line 6 column 3
谢谢 :)
您的代码是一个函数定义。您的函数称为 gcd
。
您必须将代码保存在一个名为 gcd.m
的文件中,然后创建一个新文件,以便您可以从中调用该函数。
在保存gcd.m
的同一目录中,创建一个文件(例如:gcdtest.m
)并在其中放入以下代码:
test = gcd(40, 50)
然后保存并 运行 这个文件。如果输出没有按预期工作,重新启动 Octave 应该可以解决它。
我选择的数字只是一个例子。
解释:
如果你只有函数定义文件(即 gcd.m
),当你点击 "Save and run" 时,Octave 会自己调用你的函数,但它不够聪明,不会使用任何这样做的参数。这就是您收到 "undefined variable" 错误的原因。这类似于您的测试文件中只有 test = gcd()
。
但是,如果您使用参数调用该函数,它们将正确初始化变量 x
和 y
,您的代码将正常工作。
您也可以简单地从 Octave 命令行调用 gcd(40, 50)
,以进行测试。
以下是关于函数和函数文件的 Octave 文档的链接(我知道你说过你读过它们,但新手可能没有):
https://www.gnu.org/software/octave/doc/interpreter/Defining-Functions.html
https://www.gnu.org/software/octave/doc/interpreter/Function-Files.html
现在,我注意到您的代码中存在几个问题:
while(r != 0)
在第 16 行 - 这不会 运行,甚至一次都不会,因为您在第 3 行将 r
定义为 0 而不是稍后为其分配一个新值。
elseif(x<y)
(第 9 行)和 else
(第 12 行)都做完全相同的事情。最好完全删除 elseif
条件,只用 else
代替。
祝你学业顺利
对于那些在此处结束的人,Octave 假定任何以 function
关键字开头的代码都是所谓的“函数文件”,只能从一个“脚本文件”。如果您想避免这种荒谬的混淆,只需在您的代码之上添加任何内容。例如:
1;
function foo = bar(baz)
% do some stuff
end
更多信息here。
只是想写一个简单的程序来找到n个数字的gcd。我不知道如何解决这个错误,我已经阅读了所有八度函数文档并试图找到这样的问题......顺便说一句,刚开始在 Octave 中编程。 这是代码:
function divisor = gcd(x, y)
q=0;
r=0;
l=0;
h=0;
if(x>y)
h=x;
l=y;
elseif(x<y)
h=y;
l=x;
else
h=y;
l=x;
endif
while(r != 0)
q=floor(h/l);
r = h-l*q;
q=h;
r=l;
endwhile
divisor = q;
printf("%d", q);
return;
endfunction
错误:
error: 'x' undefined near line 6 column 6
error: called from
gcd at line 6 column 3
谢谢 :)
您的代码是一个函数定义。您的函数称为 gcd
。
您必须将代码保存在一个名为 gcd.m
的文件中,然后创建一个新文件,以便您可以从中调用该函数。
在保存gcd.m
的同一目录中,创建一个文件(例如:gcdtest.m
)并在其中放入以下代码:
test = gcd(40, 50)
然后保存并 运行 这个文件。如果输出没有按预期工作,重新启动 Octave 应该可以解决它。
我选择的数字只是一个例子。
解释:
如果你只有函数定义文件(即 gcd.m
),当你点击 "Save and run" 时,Octave 会自己调用你的函数,但它不够聪明,不会使用任何这样做的参数。这就是您收到 "undefined variable" 错误的原因。这类似于您的测试文件中只有 test = gcd()
。
但是,如果您使用参数调用该函数,它们将正确初始化变量 x
和 y
,您的代码将正常工作。
您也可以简单地从 Octave 命令行调用 gcd(40, 50)
,以进行测试。
以下是关于函数和函数文件的 Octave 文档的链接(我知道你说过你读过它们,但新手可能没有):
https://www.gnu.org/software/octave/doc/interpreter/Defining-Functions.html
https://www.gnu.org/software/octave/doc/interpreter/Function-Files.html
现在,我注意到您的代码中存在几个问题:
while(r != 0)
在第 16 行 - 这不会 运行,甚至一次都不会,因为您在第 3 行将r
定义为 0 而不是稍后为其分配一个新值。elseif(x<y)
(第 9 行)和else
(第 12 行)都做完全相同的事情。最好完全删除elseif
条件,只用else
代替。
祝你学业顺利
对于那些在此处结束的人,Octave 假定任何以 function
关键字开头的代码都是所谓的“函数文件”,只能从一个“脚本文件”。如果您想避免这种荒谬的混淆,只需在您的代码之上添加任何内容。例如:
1;
function foo = bar(baz)
% do some stuff
end
更多信息here。