matlab - 如何在 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
使变量对所有函数和脚本“可见”。using 的缺点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
—— 内部函数可以访问外部函数的变量。
将您的主脚本定义为一个函数,并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
还有其他方法,但我不能一一列举...
推荐阅读
- firebase - 用于从嵌套对象中添加/删除值的 Firestore 安全规则
- excel - 将公式从下面的单元格复制到新插入的单元格
- c - Xlib XSendEvent 自定义 ClientEvent
- python - 如何找到拾取多个对象的最短路径?
- python - 始终将某些元素保留在字典的开头?
- reactjs - 错误“自定义关键字定义无效:data.errors 应该是布尔值”
- c - 指向函数初始化的双指针数组
- django - VS 2017 Python/Django 模板 - CSS 不起作用,但内联样式起作用
- python - 使用 numpy,如何生成一个数组,其中每个索引处的值是第二个数组中从 0 到同一索引的值的总和?
- java - 距离矩阵与 Apache Poi