2012-02-22 5 views
0

M-ファイルM(t、Z、X、Y、p1、p2、p3、k、l)のような関数を定義しました。ここで、p1、p2、p3はパラメータであり、XとYはグリッド入力であり、Z = Z(X、Y、K、L)である。 Matlabにt = 3、k = 4、l = 5、M(3、Z、X、Y、p1、p2、p3,4,5)の出力を求めると、出力が大きくなります。私はそのようなデータ行列のために同じことを行うことができないです。データ行列関数

t=[2 3 4]'; 
k=[3 4 5]'; 
l=[2 3 4]'; 
M(t,Z,X,Y,p1,p2,p3,k,l) 

これは、forループでそれが可能であるが、私は別の関数でそれを使用して関数としてそれを残しておく必要があります。手伝っていただけませんか?あなたはMATLABは行列機能養うとき

+0

実装を表示せずに関数(Mと呼ぶ関数)のデバッグをどのように期待しますか?ここでやっている「kk」と「ll」は、無関係です。 –

+0

@ハイパフォーマンスマークあなたは正しいです:)しかし、私はすべての問題を誰かに気にしたくありません。私はこのトラブルの理由を見ることが可能かどうか尋ねたいだけです。ご回答いただきありがとうございます。 – user1018331

答えて

2

、それが通過し、それがポイントバイポイント評価しません。行列全体を入力として使用します。単一値の入力を

function f = y2(x) 
f = y.^2; 
end 

ウィル製品Y^2、または入力ベクトルと、Y =言う[2、1、3]あなた:いくつかの機能のために、この結果は、例えば、同一であってもよいです関数がそのように記述されているためにのみ、単一値の関数出力[1,4,9]が得られます。あなたの関数が書かれた場合は別の方法として、:あなたは、単一値の入力に対して同じ出力が得られます

function f = y2(x) 
f = y^2; 
end 

、しかし、あなたは入力ベクトル、それは行列の乗算を行うことを試みる場合、ひいては場合はエラーを生成しますyは正方形ではありません。

必要な要素ごとの評価を生成するように関数を書き直す必要があります。それを行うには素朴な方法は、別の関数を定義することです:

function fvec = Mvec(...) 
[n k] = size(t) 
fvec = zeros(n,k) 
for i=1:n 
    for j = 1:k 
     fvec(i,j) = M(t(i,j),...) 
    end 
end 
end 

は動作しますが、一般的に正しく書かれている場合、あなたはループの入れ子になったものを交換することができるはずですので、悪いMATLABコードであると考えられています行列操作で。

+0

あなたの明確で詳細な回答をありがとう!私はちょうどこれに尋ねたい。 – user1018331