2017-04-06 86 views
1

次の質問で私を助けてください: 2つの未知数を持つ二次方程式を解き、結果を使って楕円をプロットしたいと考えています。MATLABの二次方程式のプロット解

fun = @(x) [x(1) x(2)]*V*[x(1) x(2)]'-c 

V is 2x2対称行列、cは正の定数であり、2つの未知数、x1x2があります はここに私の関数です。私はfsolveはを使用して方程式を解く場合 は、私は解決策は、初期値

fsolve(fun, [1 1]) 

それが正確な開始値を設けることなく、この方程式の解を得ることが可能ですが、かなりの範囲に非常に敏感であることがわかり?たとえば、x1, x2 \in (-4,4)

を使用すると、可能な組み合わせが表示されます。希望するグラフィック出力は得られますが、式の解は得られません。

fh= @(x1,x2) [x1 x2]*V*[x1 x2]'-c; 
ezplot(fh) 
axis equal 

の両方を持ってする方法はありますか? ありがとう!

答えて

3

あなたはezplotからXDataYDataを取ることができます:

c = rand; 
V = rand(2); 
V = V + V'; 
fh= @(x1,x2) [x1 x2]*V*[x1 x2]'-c; 
h = ezplot(fh,[-4,4,-4,4]); % plot in range 
axis equal 
fun = @(x) [x(1) x(2)]*V*[x(1) x(2)]'-c; 
X = fsolve(fun, [1 1]); % specific solution 
hold on; 
plot(x(1),x(2),'or'); 
% possible solutions in range 
x1 = h.XData; 
x2 = h.YData; 

か、fsolveへのベクトル入力を使用することができます。

c = rand; 
V = rand(2); 
V = V + V'; 
x1 = linspace(-4,4,100)'; 
fun2 = @(x2) sum(([x1 x2]*V).*[x1 x2],2)-c; 
x2 = fsolve(fun2, ones(size(x1))); 
% remove invalid values 
tol = 1e-2; 
x2(abs(fun2(x2)) > tol) = nan; 

plot(x1,x2,'.b') 

をしかし、最も簡単で単純なアプローチは、再配置することです楕円matrix formは、二次方程式の形式で

k = rand; 
V = rand(2); 
V = V + V'; 
a = V(1,1); 
b = V(1,2); 
c = V(2,2); 
% rearange terms in the form of quadratic equation: 
%  a*x1^2 + (2*b*x2)*x1 + (c*x2^2) = k; 
%  a*x1^2 + (2*b*x2)*x1 + (c*x2^2 - k) = 0; 
x2 = linspace(-4,4,1000); 
A = a; 
B = (2*b*x2); 
C = (c*x2.^2 - k); 
% solve regular quadratic equation 
dicriminant = B.^2 - 4*A.*C; 
x1_1 = (-B - sqrt(dicriminant))./(2*A); 
x1_2 = (-B + sqrt(dicriminant))./(2*A); 
x1_1(dicriminant < 0) = nan; 
x1_2(dicriminant < 0) = nan; 
% plot 
plot(x1_1,x2,'.b') 
hold on 
plot(x1_2,x2,'.g') 
hold off 
+0

ありがとうございます。最初の解決策では、私はXDataとYDataを取得することができますが、解決策がゼロであるペアをどのように知ることができますか? 2番目の解決策では、プロットは楕円のようには見えません。どのように楕円を退職できますか? – Astrid

+1

'ezplot'プロット**その解がゼロである' x'.'y'ペアの** ** ** ** ** **のみです。この例で使用したランダムな行列のために、時にはソリューションとして、時には漸近線として楕円を取得します。独自の行列を使用すると、楕円が得られるはずです(正しい解決策である場合に備えて)。 – user2999345

+0

XDataとYDataの両方があるステップで-4から4になります。楕円から、例えば、 -3.96と-3.96は実行可能な解決策ではありません。だから私はx = -3.96に対応するyがどれかを知りたい。 – Astrid

関連する問題