【问题标题】:Plot solution of second order equation in MATLAB在 MATLAB 中绘制二阶方程的解
【发布时间】:2017-04-06 12:41:31
【问题描述】:

请您帮我解决以下问题: 我想求解具有两个未知数的二阶方程,并使用结果绘制椭圆。 这是我的功能:

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

V is 2x2 对称矩阵,c 是一个正常数,有两个未知数,x1x2。 如果我使用 fsolve 解方程,我注意到解对初始值非常敏感

fsolve(fun, [1 1])

是否有可能在不提供确切起始值而是提供范围的情况下获得该方​​程的解?例如,我想查看x1, x2 \in (-4,4) 的可能组合

使用ezplot 我获得了所需的图形输出,但不是方程的解。

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

有没有办法两者兼得? 非常感谢!

【问题讨论】:

    标签: matlab ellipse equation-solving


    【解决方案1】:

    您可以从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
    

    【讨论】:

    • 非常感谢您的回答!在第一个解决方案中,我可以检索 XData 和 YData,但我如何知道解决方案对于哪对是零?在第二个解决方案中,情节看起来不像椭圆,知道我怎样才能退出椭圆吗?
    • ezplot x.y 对它们的解为零,所以 - 全部。由于我在这个例子中使用了随机矩阵,你有时会得到一个椭圆作为解,有时会得到一个渐近线。使用你自己的矩阵,你应该得到一个椭圆(如果它是正确的解决方案)。
    • XData 和 YData 在某个步骤中都从 -4 变为 4。从椭圆可以看出,例如-3.96 和 -3.96 这不是一个可行的解决方案。所以我想知道x = -3.96对应的y是哪个。
    • 请注意,每个x1 值都有两个满足等式的x2 值(对称w.r.t 某行),因此您每次运行代码时可能只得到一个。我编辑了答案的第二部分以删除无效值(不满足等式)。
    • 非常感谢! x1_1 和 x2_2 必须除以 2A。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多