2014-10-01 77 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