如何在matlab中回忆一下if语句的答案?

时间:2015-05-01 14:53:22

标签: matlab function if-statement

我正在编写一个函数,它假设给出以下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语句的答案..

谢谢

1 个答案:

答案 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  

在语句的末尾放置一个分号,这样就不会不必要地将输出回显到屏幕。