如何在Matlab中修复``未定义的函数或变量''?

时间:2019-09-29 05:53:42

标签: matlab function variables undefined

我定义了一堆常量。我想在本地函数中使用它们。 该函数无法访问这些值,并且出现错误 未定义的函数或变量“ g”。

我尝试过转移功能的位置 还尝试使常量成为全局常量,以便每个局部函数都知道它们

<div class='container'>
  <ul *ngFor="let student of students; let i = index">
    <h3> Class {{ student.class }}</h3>
    <li *ngFor="let section of students; let i = index">
      <h5> section {{ student.section}}</h5>
      <!-- <a href='#' *ngFor="let name of students">{{student.name}}</a> -->
    </li>
  </ul>
</div>

1 个答案:

答案 0 :(得分:2)

有多种将常量传递给MATLAB函数的方法

将变量定义为global是一个简单的解决方案。
使用global使变量对所有函数和脚本“可见”。使用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

还有其他方法,但是我无法全部列出...