プログラマーとして数学を学ぶ方法として、MatLab コードを使用しようとしています。
だから、私は部分空間に関するこの記事を読んでいて、それを行う簡単なmatlab関数を構築しようとしています。
これが私が得た距離です:
function performSubspaceTest(subset, numArgs)
% Just a quick and dirty function to perform subspace test on a vector(subset)
%
% INPUT
% subset is the anonymous function that defines the vector
% numArgs is the the number of argument that subset takes
% Author: Lasse Nørfeldt (Norfeldt)
% Date: 2012-05-30
% License: http://creativecommons.org/licenses/by-sa/3.0/
if numArgs == 1
subspaceTest = @(subset) single(rref(subset(rand)+subset(rand))) ...
== single(rref(rand*subset(rand)));
elseif numArgs == 2
subspaceTest = @(subset) single(rref(subset(rand,rand)+subset(rand,rand))) ...
== single(rref(rand*subset(rand,rand)));
end
% rand just gives a random number. Converting to single avoids round off
% errors.
% Know that the code can crash if numArgs isn't given or bigger than 2.
outcome = subspaceTest(subset);
if outcome == true
display(['subset IS a subspace of R^' num2str(size(outcome,2))])
else
display(['subset is NOT a subspace of R^' num2str(size(outcome,2))])
end
そして、これらは私がテストしているサブセットです
%% Checking for subspaces
V = @(x) [x, 3*x]
performSubspaceTest(V, 1)
A = @(x) [x, 3*x+1]
performSubspaceTest(A, 1)
B = @(x) [x, x^2, x^3]
performSubspaceTest(B, 1)
C = @(x1, x3) [x1, 0, x3, -5*x1]
performSubspaceTest(C, 2)
コードを実行すると、これが得られます
V =
@(x)[x,3*x]
subset IS a subspace of R^2
A =
@(x)[x,3*x+1]
subset is NOT a subspace of R^2
B =
@(x)[x,x^2,x^3]
subset is NOT a subspace of R^3
C =
@(x1,x3)[x1,0,x3,-5*x1]
subset is NOT a subspace of R^4
C が機能していません (1 つの引数しか受け入れない場合にのみ機能します)。numArgs の私の解決策が最適ではないことはわかっていますが、現時点で思いついたものでした..
このコードを最適化して C が適切に動作し、おそらく2 つ以上の引数のelseifステートメントを回避する方法はありますか?
PS: 穴のことをやってくれる組み込みの matlab 関数が見つからなかったようです..