2016-08-31 75 views
0

总的新手在这里。我遇到了循环创建的函数的问题。遇到一些问题在复制的代码,但我给它的总体思路:在Matlab中循环功能

function[X]=Test(A,B,C,D) 

other parts of the code 
. 
. 
. 


X = linsolve(K,L) 
end 

其中,K,L是其它矩阵的I从4个变量A,B,C导出的,d

问题是每当我执行函数Test(1,2,3,4)时,我只能得到一个答案。我试图循环这个过程中的一个变量,保持其他3个变量不变。

例如,我想要得到A = 1:10的答案,而B = 2,C = 3,d = 4

我尝试下面的方法和他们没有工作:

Function[X] = Test(A,B,C,D) 
for A = 1:10 

other parts of the code... 
X=linsolve(K,L) 
end 

每当我在命令测试(1,2,3,4)键,只给我测试的输出(10,2,3,4)

然后我读的地方,你有从其他地方调用函数,所以我编辑测试函数为函数[X] =测试(B,C,D)并将A留在可以在另一个脚本中分配的地方例如:

global A 
for A = 1:10 
    Test(A,2,3,4) 
end 

但是,这给出了一个错误,以及,如测试功能要求来定义。因此,我有点迷路,似乎无法找到任何有关如何做到这一点的信息。希望能得到所有的帮助。

干杯家伙

+0

在循环中运行函数,或者在函数中运行循环并返回一个数组(不是单个值)。我不明白'global'与它有什么关系。 – Bernhard

+0

@Bernhard当你在函数中运行循环时,你将如何返回一个数组? – dljw

回答

0

我认为这是你在找什么:

A=1:10; B=2; C=3; D=4; 
%Do pre-allocation for X according to the dimensions of your output 
for iter = 1:length(A) 
    X(:,:,iter)= Test(A(iter),B,C,D); 
end 
X 

其中

function [X]=Test(A,B,C,D) 
%other parts of the code 
X = linsolve(K,L) 
end 
+0

嗨Sadar_Usama, 感谢您的代码,它的工作原理,但是这个代码给出了下面的输出 X(:,:,1) X(:,:,1) X(:,:,2) X(:,:,1) X(:,:,2) X(:,:,3) X(:,:,1) X(:,:,2) X( 3: X(:,:,4) 等等。 。 X(:,:,10) 有没有办法直接跳到最后一组输出? 干杯 – dljw

+0

对不起,我按下输入意外之前,我可以输入我的问题 – dljw

+0

@dljw我不明白。你是否要求当A = 10时看到输出,即只有'X(:,:,10)'? –

0

试试这个:

function X = Test(A,B,C,D) 
% allocate output (it is faster than changing the size in every loop) 
X = {}; 
% loop for each position in A 
for i = 1:numel(A); 
    %in the other parts you have to use A(i) instead of just A 
    ... other parts of code 
    %overwrite the value in X at position i 
    X{i} = linsolve(K,L); 
end 
end 

,并运行它测试(1:10,2,3,4)

回答以前出错的地方: 当您为'A = 1:10'循环时,您会覆盖传递给该函数的A(因此该函数将忽略通过它的A),并且在每个循环会覆盖前一个循环中计算出的X(这就是为什么您只能看到A = 10的答案)。 如果您已经使用函数X =(A,B,C,D)创建了一个名为Test.m的文件作为文件中的第一个代码,那么应该尝试第二次尝试。虽然全球任务是不必要的。事实上,我强烈建议你不要使用全局变量,因为它非常快速地变得非常混乱。

+0

如果'linsolve'给出的输出大小不是1x1,这个解决方案,我不认为会起作用 –

+0

嗨Joel,我试过了上面的代码,但它似乎没有工作 我得到了一些东西 X = [0 0 0 0 0 0 0 0 0 0] 出来的错误信息说: 使用^错误,输入必须是标量和方阵。 要计算单元POWER,请改用POWER(。^)。我认为在我的代码中使用它的时候,改变代码中的所有功能会非常麻烦。 – dljw

+0

@Sardar_Usama,好点。 – Joel