这里的新手总数。我在循环创建我已创建的功能时遇到问题。我在复制代码时遇到了一些问题,但我会对其进行一般性的了解:
function[X]=Test(A,B,C,D)
other parts of the code
.
.
.
X = linsolve(K,L)
end
其中K,L是从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
每当我键入命令Test(1,2,3,4)时,它只给我输出Test(10,2,3,4)
然后我在某个地方读到你必须从其他地方调用该函数,所以我将Test函数编辑为Function [X] = Test(B,C,D)并将A out留在可以在另一个中分配的位置脚本例如:
global A
for A = 1:10
Test(A,2,3,4)
end
但这也会产生错误,因为测试功能需要定义A。因此,我有点迷失,似乎无法找到有关如何做到这一点的任何信息。非常感谢我能得到的所有帮助。
干杯球员
答案 0 :(得分: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
答案 1 :(得分: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
并使用Test(1:10,2,3,4)
运行它要回答以前出了什么问题: 当您使用&= 39; A = 1:10'你覆盖传递给函数的A(所以函数会忽略你传递给它的A),并且在每个循环中你覆盖在前一个循环中计算的X(这就是为什么你只能看到答案为A = 10 )。 如果您创建了一个名为Test.m的文件,并且函数X =(A,B,C,D)作为文件中的第一个代码,则第二次尝试应该有效。虽然全球任务是不必要的。事实上,我强烈建议你不要使用全局变量,因为它变得非常混乱非常快。