2014-10-01 25 views
-1

我有一個簡單而有趣的問題。我很累很難谷歌,但我的谷歌生氣了給我相同的結果... 我想知道是否有可能更新一個常變量形式的工作空間命令..從Matlab的命令窗口更新M.file變量?

一個簡單的例子:

function y =StupidQuestion 

a = 10; % some value 
b =[5,6,7;1,2,8]; % some value 
y = b*a % some operation 

我忘了告訴你,我們可以使用Simulink模塊做使用下面的命令

set_param('obj', 'parameter1', value1, 'parameter2', value2, ...) 

我想使用分配的值3周,沒有任何理由,我想改變我的價值觀[一,b]其他,但通過命令窗口。任何想法。等待您的回覆有趣...................

+2

你知道如何將變量傳遞給函數嗎? (例如'function y = myfunc(a,b)'?)。因爲如果那不是你要找的東西,我不知道你在說什麼。 – nkjt 2014-10-01 10:40:33

+0

我知道我可以傳遞一個變量(a,b)。但每次我需要給a和b值時,每當我運行一個函數。 – user2851655 2014-10-01 10:45:59

+0

我懷疑這可以做到。我實際上認爲,除非你在源代碼本身內,否則你不能在源代碼中編輯它是一件好事。但是,如果您真的想這樣做,我認爲您可以編寫一個函數來解析源代碼並在必要時進行更改。這在我看來是一個乏味的操作,如果可能的話,你應該始終在源代碼本身做改變。 Matlab可能會以某種智能方式來解決這個問題,包括在啓動時讀取默認參數併爲每個會話存儲它們和/或添加額外的啓動命令等。 – patrik 2014-12-22 14:13:29

回答

2

您可以爲輸入設置默認值:

function y = foo(a,b) 
if nargin < 1 || isempty(a), a = 10;   end 
if nargin < 2 || isempty(b), b = [5,6,7;1,2,8]; end 
y = b*a 
end 

您可以撥打foo()無輸入(它會使用默認值ab),或提供自己的價值觀:foo(12)foo(12,[10,20])foo([],[23,23])等..

+0

親愛的奧列格。謝謝你的努力。隨着你的接近,我將無法永久更新我的變量。就像我一次運行輸入參數**富(15)**比我只能通過一個可變,但將無法更新它。就像Simulink Block一樣。如果我想永久更新增益塊(更改變量)。我可以簡單地通過'set_param('fileName/blockName','ParameterName','500')'來完成。那麼它會更新我的塊從以前的值更新值.....通過我很抱歉在我的問題中不清楚解釋.. – user2851655 2014-10-01 11:57:23

+0

@ user2851655只需編輯.m文件(或將變量存儲在Simulink和從那裏改變,但我從來沒有使用Simulink,所以不要在這裏字面意思) – Oleg 2014-10-01 12:01:17

+0

我想我們可以在matlab中做任何事情。但你是正確的.....通過我有一個新的想法,我會添加一些MAT文件並更新它。謝謝,但仍然有你有任何其他的想法......並感謝很多親愛的........ – user2851655 2014-10-01 12:10:52

0

一種可能的方法是保存一些變量的外部文件。請注意,在這種情況下,ab僅在功能工作區中(除非單獨加載test.mat的內容,否則您將不會看到它們的值。我通過文件名而不是硬編碼,以防需要在多個設置之間切換。我個人更喜歡有一個人類可讀的數據文件,但概念保持不變(你只需要一些解析器函數,該函數返回給定文件的值爲ab)。

a = 10; % some value 
b =[5,6,7;1,2,8]; % some value 
save('test.mat','a','b'); 
clear a b; 

function y = savedvariables(filename) 
    load(filename); 
    y = b*a; % some operation 
end 

y = savedvariables('test.mat'); 
+0

@ user2851655如果您對答案感到滿意,您可以考慮接受答案。 – patrik 2014-12-22 14:14:40