2011-07-10 11 views
-1

solveコマンドで16個の方程式(線形)を使って16個の変数の解を求めようとしています。MATLABの 'solve'コマンドを使用して16個の変数を同時に解くために16個の方程式を解く

以下は、私は上記のように、私は解決コマンドを使用し、私のコード

syms x11 x12 x13 x14 x21 x22 x23 x24 x31 x32 x33 x34 x41 x42 x43 x44; 
%defining symbolic variables 

x=[x11 x12 x13 x14; x21 x22 x23 x24; x31 x32 x33 x34; x41 x42 x43 x44]; % putting all those variables in matrix form 

N4=[-1 3 -3 1;3 -6 3 0;-3 3 0 0;1 0 0 0]; % 4*4 control matrix 
digits(4);% setting precision to 4 digits instead of default 32 
syms sx;% defining a variable sx 
for i=1:8 
    for j=1:8 
     u=(i-1)/7; 
     w=(i-1)/7; 
     sx(i,j)= [u^3 u^2 u 1]*N4*x*N4'[w^3;w^2;w;1]; % this gives me 8*8 matrix 
    end 
end 

for a=1:8 
    for b=1:8 
     kx(a,b)=b; % the x coordinates of 64 points of the image 
    end 
end 

ex=0 % defining variable ex which is the error function. 

for i=1:8 
    for j=1:8 
     ex= ex+ (sx(i,j)-kx(i,j))^2; 
    end 
end 

diff_x11=vpa(diff(ex,x11)); % I want to find values of x11,x12... 
diff_x12=vpa(diff(ex,x12)); % for which the error ex is minimum 
diff_x13=vpa(diff(ex,x13)); % so I differentiate ex with all 16 
diff_x14=vpa(diff(ex,x14)); % variables and get 16 equations 
diff_x21=vpa(diff(ex,x21));% and then try to solve them 
diff_x22=vpa(diff(ex,x22)); 
diff_x23=vpa(diff(ex,x23)); 
diff_x24=vpa(diff(ex,x24)); 
diff_x31=vpa(diff(ex,x31)); 
diff_x32=vpa(diff(ex,x32)); 
diff_x33=vpa(diff(ex,x33)); 
diff_x34=vpa(diff(ex,x34)); 
diff_x41=vpa(diff(ex,x41)); 
diff_x42=vpa(diff(ex,x42)); 
diff_x43=vpa(diff(ex,x43)); 
diff_x44=vpa(diff(ex,x44)); 
    qx=solve(diff_x11,diff_x12,diff_x13,diff_x14,diff_x21,diff_x22,diff_x23,diff_x24,diff_x31,diff_x32,diff_x33,diff_x34,diff_x41,diff_x42,diff_x43,diff_x44,x11,x12,x13,x14,x21,x22,x23,x24,x31,x32,x33,x34,x41,x42,x43,x44); 

を貼り付けています。最初は変数x11とx44には2つの値しか得られませんでした。その時の精度はデフォルトの32桁でした。精度を落とし、コードに示されているように 'vpa'コマンドを使い始めたので、さらに2つの値x22とx33が得られました。最後に、私は16のうち4つの変数のみを解くようになり、それらの4つすべては可変要素を持つ4 * 4行列の対角要素です

私はそれらの16個すべてを取得する必要があります。どんな助けでも大歓迎です。ありがとうございますAnkit

+3

バックチックやコードをハイライト表示し、 '{}'アイコンを使ってコードを 'code'でフォーマットしてください。 – PengOne

+1

@ ankitm511:関連コードを投稿してください。最初の画像を扱う部分は後の方程式とは関係ありません。 – Amro

答えて

0

もしあなたが線形方程式を解いているのであれば、なぜそんなに複雑な方法でやっていますか?例えば

、あなたは数値[X、Y]を知ってほしい、つまり一次方程式のシステム

Ax+By=C 
Dx+Ey=F 
Gx+Hy=I 

を解決したい場合は(最小二乗意味で)最高の3に適合し式を書いてください

+0

@Amro:Ok ...後で使用されるコードの次の部分で画像部分が使用されています。とにかく私はそれを編集しました。 – ankitm511

+0

jonas:ありがとうございました。しかしここでは、係数A、B、C、Dなどは知らない。すべての方程式は、1つの式を部分的に16の異なる変数で16回微分することによって得られる。 MATLABはそれ自身で式の変数を見つけ、 'solve'コマンドを使用したときにそれらを解決します – ankitm511

+0

@pengOne:申し訳ありません私はこれを初めて使っています!!私はコードをフォーマットしました – ankitm511

関連する問題