首页 > 解决方案 > 如何在 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);

标签: matlabfunctionvariablesundefined

解决方案


有多种方法将常量传递给 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

还有其他方法,但我不能一一列举...


推荐阅读