簡體   English   中英

Matlab Function 可以創建全局變量嗎?

[英]Can a Matlab Function create a global variable?

我正在使用 Octave(或 Matlab...我都有可用的),並嘗試制作一個 function 來設置我在整個 rest 的調查中使用的重要變量

但是默認情況下,在 function 中聲明的變量只有 function 的有限 scope。

有沒有辦法做到這一點?

function defineBasicTerms()
    global G = 9.807;
    global F = [exp(1)  0;  0 1/exp(1)];
endfunction

這樣在調用此 function 之后,變量GF存在於全局命名變量集中嗎?

全局變量需要在使用它們的每個 scope 中聲明。 例如,如果您有一個 function M 文件defineBasicTerms.m包含:

function defineBasicTerms
global G = 9.807;
end

然后在基本工作區中,您可以編寫:

defineBasicTerms
G   % produces error: variable doesn't exist
global G
G   % gives 9.807

接下來,在將使用常量G的 function 中:

function out = computeSomethingImportant(m)
global G
out = G * m;
end

也就是說,每次我們想使用G時,我們都需要執行global G來訪問全局變量G

請注意,這是一個非常危險的情況。 有兩件事可以 go 錯誤:

  1. 一些 function 分配給全局變量G ,更改當前 session 的 rest 的值。 真的很難知道這是否發生了,但是computeSomethingImportant將從此時開始返回錯誤的值,直到我們再次調用defineBasicTerms

  2. 我們在defineBasicTerms期間調用 defineBasicTerms 之前調用computeSomethingImportant


MATLAB(以及 Octave 中的擴展)中建立的定義常量的方法是通過 function。 可以編寫函數以始終返回相同的值(MATLAB 沒有其他方法可以將變量聲明為常量),並且函數在所有工作區和所有上下文中自動可用(當然,只要 function 在路徑上)。

在您的示例中,我們將編寫一個 M 文件 function Gm包含:

function value = G
value = 9.807;
end

現在,在基礎工作區中:

G   % gives 9.807

使用常數G的 function 現在看起來就像這樣:

function out = computeSomethingImportant(m)
out = G * m;
end

請注意,諸如pi之類的常量在 MATLAB 和 Octave 中以這種方式定義。

您必須為要聲明的每個常量編寫一個 function M 文件。 有一種替代方法涉及到 class 和 static 值,以便可以在單個文件中定義所有常量。 然而,語法會變得不同,需要使用constants.G或類似的東西來訪問內容值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM