如何在 matlab 中修复 'Undefined Function or Variable'?
How to fix 'Undefined Function or Variable' in matlab?
我定义了一堆常量。我想在本地函数中使用这些。
该函数无法访问这些值,我得到了错误
未定义函数或变量 'g'.
我试过移动函数的位置
还尝试使常量成为全局常量,以便每个局部函数都知道它们
**% Define constants**
K=0.5; % minor loss coefficient (square edged)
g=9.8; % gravity in m/s2
**%call function**
f1= 2 (value obtained from external function)
v1=velocity1(f1);
**% define function**
function v1=velocity1(f)
v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
end
>> LvsQ_plot
Undefined function or variable 'g'.
Error in LvsQ_plot>velocity1 (line 48)
v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
Error in LvsQ_plot (line 31)
v1=velocity1(f1);
有多种方法可以将常量传递给 MATLAB 函数
将变量定义为 global
是一个简单的解决方案。
使用 global
使变量 "visible" 成为所有函数和脚本。使用 global
的缺点是它不可扩展,并且会阻止代码重用。
从学术软件工程的角度来看,您根本不应该使用全局变量。假设您的代码用于解决特定问题并且不会被扩展或重用,那么使用 global
是允许的。
使用global
:
在初始化之前将常量声明为全局常量:
global K g
K=0.5; % minor loss coefficient (square edged)
g=9.8; % gravity in m/s2
在使用它们的任何函数中将变量声明为全局变量:
function v1=velocity1(f)
global K g
v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
end
使用嵌套函数:
除了使用 global
,您还可以使用 "nested functions" 方法 - 内部函数可以访问外部函数的变量。
将主脚本定义为函数,并将 velocity1
定义为内部函数:
function main()
%main is the outer function, and velocity1 is an inner function
K=0.5; % minor loss coefficient (square edged)
g=9.8; % gravity in m/s2
h=1;L=3;D=4;
f1= 2; %(value obtained from external function)
v1=velocity1(f1);
%Inner function:
function v1=velocity1(f)
v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
end
end
将参数结构传递给函数:
一个常见的解决方案是 MATLAB 将具有常量参数的结构传递给使用它们的所有函数:
param.K=0.5; % minor loss coefficient (square edged)
param.g=9.8; % gravity in m/s2
param.h=1;param.L=3;param.D=4;
f1= 2; %(value obtained from external function)
v1=velocity1(f1, param);
function v1=velocity1(f, par)
K = par.K;
g = par.g;
h=par.h;L=par.L;D=par.D;
v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
end
还有其他方法,但我无法一一列举...
我定义了一堆常量。我想在本地函数中使用这些。 该函数无法访问这些值,我得到了错误 未定义函数或变量 'g'.
我试过移动函数的位置 还尝试使常量成为全局常量,以便每个局部函数都知道它们
**% Define constants**
K=0.5; % minor loss coefficient (square edged)
g=9.8; % gravity in m/s2
**%call function**
f1= 2 (value obtained from external function)
v1=velocity1(f1);
**% define function**
function v1=velocity1(f)
v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
end
>> LvsQ_plot
Undefined function or variable 'g'.
Error in LvsQ_plot>velocity1 (line 48)
v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
Error in LvsQ_plot (line 31)
v1=velocity1(f1);
有多种方法可以将常量传递给 MATLAB 函数
将变量定义为 global
是一个简单的解决方案。
使用 global
使变量 "visible" 成为所有函数和脚本。使用 global
的缺点是它不可扩展,并且会阻止代码重用。
从学术软件工程的角度来看,您根本不应该使用全局变量。假设您的代码用于解决特定问题并且不会被扩展或重用,那么使用 global
是允许的。
使用global
:
在初始化之前将常量声明为全局常量:
global K g
K=0.5; % minor loss coefficient (square edged)
g=9.8; % gravity in m/s2
在使用它们的任何函数中将变量声明为全局变量:
function v1=velocity1(f)
global K g
v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
end
使用嵌套函数:
除了使用 global
,您还可以使用 "nested functions" 方法 - 内部函数可以访问外部函数的变量。
将主脚本定义为函数,并将 velocity1
定义为内部函数:
function main()
%main is the outer function, and velocity1 is an inner function
K=0.5; % minor loss coefficient (square edged)
g=9.8; % gravity in m/s2
h=1;L=3;D=4;
f1= 2; %(value obtained from external function)
v1=velocity1(f1);
%Inner function:
function v1=velocity1(f)
v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
end
end
将参数结构传递给函数:
一个常见的解决方案是 MATLAB 将具有常量参数的结构传递给使用它们的所有函数:
param.K=0.5; % minor loss coefficient (square edged)
param.g=9.8; % gravity in m/s2
param.h=1;param.L=3;param.D=4;
f1= 2; %(value obtained from external function)
v1=velocity1(f1, param);
function v1=velocity1(f, par)
K = par.K;
g = par.g;
h=par.h;L=par.L;D=par.D;
v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
end
还有其他方法,但我无法一一列举...