問題

我定義了一堆常量.我想在本地函式中使用它們. 函式無法訪問這些值,我收到錯誤 未定義的函式或變數’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是一個簡單的解決方案。
2001年12月31日終了的兩年期收入和支出及準備金和基金結餘變動報表 使用global將變數“可見”到所有函式和指令碼.使用global的缺點是它不可擴充套件,並防止程式碼重用.
2001年12月31日終了的兩年期收入和支出及準備金和基金結餘變動報表 從學術軟體工程的角度來看,您根本不應該使用全域性變數.假設您的程式碼用於解決特定問題,並且不會被擴充套件或重用,使用global是允許的.

使用global:
2001年12月31日終了的兩年期收入和支出及準備金和基金結餘變動報表 在初始化之前將常量宣告為全域性:

 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
 

使用巢狀函式:
2001年12月31日終了的兩年期收入和支出及準備金和基金結餘變動報表 與使用 global 不同,您可以使用 “巢狀函式” 方法—— 內部函式可以訪問外部函式的變數。
2001年12月31日終了的兩年期收入和支出及準備金和基金結餘變動報表 將主指令碼定義為函式,並將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
 

將引數結構傳遞給函式:
2001年12月31日終了的兩年期收入和支出及準備金和基金結餘變動報表 一個常見的解決方案是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
 

還有其他方法,但我無法列出所有方法...

  相同標籤的其他問題

matlabfunctionvariablesundefined
下一個問題: