我正在编写一个函数,它假设给出以下if语句的结果:
s=some scalar
i=some scalar ;
if y(s,i)==L
U(1,i)==0
else disp('Never binding') ;
end
如何存储"答案"所以给答案的名字是函数的输出?
例如:ans = R和函数R = myfunction(i,s)
这可能吗?
例如,如果我运行我的代码:
if y(8,1)==L
U(1,1)==0
else disp('Never binding')
end
ans =
X1_2 * a - P1_2 * X1_2 - X1_2 ^ 2 * b + X1_2 *(LL *(g1_2 + g2_1)+ LL *(g1_3 + g3_1))== 0
或其他案件:
if y(1,1)==L
U(1,1)==0
else disp('Never binding')
end
Never binding
以下是完整功能的代码:
function R=myIR1(s, n , agent)
x = 'HL'; %// Set of possible types
K = n; %// Length of each permutation
%// Create all possible permutations (with repetition) of letters stored in x
C = cell(K, 1); %// Preallocate a cell array
[C{:}] = ndgrid(x); %// Create K grids of values
y = cellfun(@(x){x(:)}, C); %// Convert grids to column vectors
y = [y{:}];
e=size(y,1);
X = sym('X',[n e], 'positive' );
P = sym('P',[n e], 'positive' );
G=sym('g' , [n,n]) ;
syms c a b ;
s=s;
A = char( zeros(n,2*n) ) ;
for col=1:n
Acol = [col col+1] + (col-1) ;
A(:,Acol) = [ y(s,col)*ones(n,1) y(s,:).' ] ;
end
A1 = reshape( cellstr( reshape(A.',2,[]).' ) , n , n ).' ;
B=A1.*(G+G') ;
B(logical(eye(size(B)))) = 0 ;
for i=1:n
U(i)=[a*X(i,s) - b*(X(i,s))^2 + X(i,s)*(sum(B(:,i).*X(:,s))) - X(i,s)*P(i,s)];
end
agent=agent ;
syms H L ;
i=agent ;
if y(s,i)==L
U(1,i)==0
else disp('Never binding') ;
end
IR没有分配给任何东西,我想把它分配给if语句的答案..
谢谢
答案 0 :(得分:0)
是的,只需将R
指定为函数体内的任何内容即可。当函数终止时,无论R
被分配给最终输出,都会被发送回用户。
例如:
function R = myfunction(i,s)
...
...
...
R = ... ;%// Assign the value of R you want here
...
...
end
然后在MATLAB命令提示符中,您将执行:
R = myfunction(i,s);
调用此函数时,R
将包含您在函数本身中指定的任何内容。但是,您需要确保在函数终止之前将R
分配给某些内容。如果你不这样做,那么MATLAB会给你一个错误,告诉你忘记分配R
的东西,因为它是预期的输出。
鉴于您的代码,您希望存储的主要分配看起来像是在代码末尾的if
语句中完成的。实际上,您并未将该分配存储到变量中。特别是:
if y(s,i)==L
U(1,i)==0
else disp('Never binding') ;
end
如果你没有为某个东西分配一个变量,它会自动存储在一个名为ans
的变量中,这是你在命令提示符中回显的,因为你没有放置一个分号U(1,i) == 0
声明的前面。我相信您想要获取此输出并将其分配给R
,因为R
是您想要的最终输出变量,所以就这样做。请注意,您的输出变量名为IR
而不是R
,因此请确保在函数中将输出变量更改为R
:
if y(s,i)==L
R = U(1,i) == 0;
else disp('Never binding') ;
end
在语句的末尾放置一个分号,这样就不会不必要地将输出回显到屏幕。