2

以下のコードを見てください。

for i=1:2
if i == 1
    F{i}= @(x) x(i)+x(i+1);
else
    F{i}= @(x) x(i-1)-x(i)+2;
end
end

F のようなものを格納したかったのF={@(x) x(1)+x(2);@(x) x(1)-x(2)+2;}です。これを実現するには、コードをどのように編集すればよいですか? 誰でも私を助けることができますか?

4

1 に答える 1

4

機能の問題ではなく、表示の問題だと思います。

これを行う:

for i = 1:2
    if i == 1
        F{i}= @(x) x(i)+x(i+1);
    else
        F{i}= @(x) x(i-1)-x(i)+2;
    end
end

実際には正しい結果が得られます。

>> F{1}([1 2 3 4])
ans =
     3    % == x(1)+x(2), i==1

>> F{2}([1 2 3 4])
ans =
     1    % == x(1)-x(2)+2, i==2

しかし、関数は「間違って」表示されます。

>> F
F = 
    @(x)x(i)+x(i+1)    @(x)x(i-1)-x(i)+2

それらも正しく表示したい場合は、面倒になる必要があります。

for i=1:2

    if i == 1        
        F{i} = str2func(['@(x)x(' num2str(i) ')+x(' num2str(i+1) ')']);
    else        
        F{i} = str2func(['@(x)x(' num2str(i-1) ')-x(' num2str(i) ')+2']);
    end
end

結果:

>> F
F = 
    @(x)x(1)+x(2)    @(x)x(1)-x(2)+2
于 2013-09-04T11:57:21.780 に答える