如何在MATLAB中求解带有两个变量的方程

时间:2014-01-14 14:15:31

标签: matlab

例如,我想在数字上求解方程| x | + | y | = 1,我会得到一个矩形。如果我把它绘制出来,它应该是

Rectangle

这是一个简单的例子。我真正想要解决的是像sin(x)sin(2y)+ sin(y)sin(2x)= 0这样的等式。

2 个答案:

答案 0 :(得分:5)

在跳到花式图或数值求解器之前,做一些数学计算确实很有用。

假设你有

sin(x)·sin(2y) + sin(y)·sin(2x) = 0

从任何standard list of trig identities您发现可以将其重写为

sin(x)·sin(y) · (cos(x) + cos(y)) = 0

所以你的等式何时成立

  sin(x)·sin(y) = 0   or 
cos(x) + cos(y) = 0

换句话说,

x = 0  ± k·π,  or
y = 0  ± k·π,  or
x = -y ± 2k·π

k∈ℤ 0

图形上,这将是一组垂直线(x = 0 ± k·π),一组水平线(y = 0 ± k·π)和一组±45°(y = -x ± 2k·π)的线。

不需要一行代码。

答案 1 :(得分:1)

使用您的示例公式,Rody's answer提供了一种分析解决方案。

然而,一般而言,给定方程f(x,y)= 0,可能无法找到分析解。在那种情况下,我建议:

  1. 定义目标xy区域并在其中生成随机样本。
  2. 在示例点计算z = abs(f(x,y))
  3. z的值进行排序,并将近似解集定义为最低值的给定比例。

    f = @(x,y) sin(x).*sin(2*y)+sin(y).*sin(2*x); %// your example function
    N = 1e7; %// number of samples
    proportion = 1e-2; %// choose to achieve thin lines in solution set
    xmin = -10; xmax = 10; %// x limits of target area
    ymin = -10; ymax = 10; %// y limits of target area
    
    x = xmin+(xmax-xmin)*rand(1,N);
    y = ymin+(ymax-ymin)*rand(1,N);
    z = abs(f(x,y));
    [zsort isort] = sort(z);
    n = round(N*proportion);
    plot(x(isort(1:n)),y(isort(1:n)),'b.','markersize',.1)
    axis square
    
  4. enter image description here