-1

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個すべて手に入れる必要があります。どんな助けでも大歓迎です。ありがとうアンキット

4

1 に答える 1

0

一次方程式を解くのなら、なぜこんなに複雑な方法で解くのですか?

たとえば、連立一次方程式を解きたい場合

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

つまり、(最小二乗の意味で)3つの方程式に最もよく適合する数値[x;y]を知りたい場合は次のように記述します。

%# A,B, etc are numbers, or arbitrarily complex functions
%# that evaluate to a numerical value at the time the equations are solved. 
matrixA = [A,B;D,E;G,H];
matrixB = [C;F;I];

xyVector = matrixA \ matrixB;
于 2011-07-10T12:56:52.270 に答える