2
clc;
clear all;

syms y a2 a3

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% [ 0.5  0.25  0.125  ]    [ a2 ]    [ y ]
% [  1     1     1    ]    [ a3 ]  = [ 3 ]
% [  2     4     8    ]    [  6 ]    [ 2 ]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

M = [0.5 0.25 0.125; 1 1 1; 2 4 8];
t = [a2 a3 6];
r = [y 3 2];

sol = M * t'

s1 = solve(sol(1), a2)   % solve for a2
s2 = solve(sol(2), a3)   % solve for a3

これは私がこれまでに持っているものです。これらは私の出力です

sol =

 conj(a2)/2 + conj(a3)/4 + 3/4
       conj(a2) + conj(a3) + 6
  2*conj(a2) + 4*conj(a3) + 48


s1 =

- conj(a3)/2 - 3/2 - Im(a3)*i


s2 =

- conj(a2) - 6 - 2*Im(a2)*i

solそれらを方程式の形に戻すと、次のようになります。

0.5 * a2 + 0.25 * a3 + 0.125 * a4

a2 + a3 + a4 = 3

2 * a2 + 4 * a3 + 8 * a4 = 2

ここで、a4は既知です==6。

私の問題は、solveこれらの方程式を実際に解いてとの値を取得するa2方法に固執していることa3です。

s2a3を解きますが、紙にあるものと一致しません(完全ではありません)。a2 + a3 + 6 = 3は、a3=-3-a2を生成するはずです。

架空のせいで。どういうわけか、ベクトル解を各行solの値と同等にする必要があります。[y 3 2]

4

1 に答える 1

1

solve関数に方程式を指定する必要があります。それと同じくらい簡単です:

 sol = solve(M * t' == r');

その結果、あなたは

sol.a2 = 17
sol.a3 = -20
sol.y = 17/4

これは MATLAB R2012b で機能します。一般に、これは 1 行で解決できます。

solve('a2 / 2 + a3 / 4 - y + 3 / 4 = 0', 'a2 + a3 + 3 = 0', '2 * a2 + 4 * a3 + 46 = 0')

PS私がチェックしたところ、これはMATLAB R2011bで機能します。

于 2012-10-10T20:13:29.933 に答える