求解边界上的三角方程

时间:2015-02-02 22:27:40

标签: matlab

首先,我确信存在一个简单的答案,也许我只是在网上搜索答案时没有正确的措辞。

我正在尝试解决看起来像这样的等式:

a*x*cot(a*x) == b

其中a和b是常数。使用

solve(a*x*cot(a*x) == b, x)

我得到的结果我知道是错的(我使用的值是常量,我得到-227,它应该是+160左右。)我把它绘制在Mathematica中两个独立的功能,它们确实在那里相互交叉,但由于婴儿床部分是周期性的,它们会这么做。

我想限制Matlab搜索特定间隔的解决方案,例如0到200;我该怎么做?

我对Matlab很新(在Mathematica中更有经验)。

2 个答案:

答案 0 :(得分:1)

您可以使用fzero指定x上的边界,只需要两个要求

  1. 该功能必须在"残余"表格(即r(x) = 0
  2. 两个边界的残差值必须符号相反(这可以保证在连续函数的区间内存在根)。
  3. 所以我们以残差形式重写函数:

    r = @(x) a*x*cot(a*x) - b;
    

    定义间隔

    % These are just random numbers; the actual bounds should come 
    % from the graph the ensures r has different signs a xL and xR
    xL = 150;
    xR = 170; 
    

    并解决

    x = fzero(r,[xL,xR]);
    

    我看到你试图使用符号工具箱来寻找解决方案,但由于方程是多项式和三角函数的非线性组合,因此很可能没有封闭形式的解决方案。所以我不同于一个非线性的数字寻根器。

答案 1 :(得分:0)

我尝试了一些值,看起来solve会返回一个数字解决方案。如果未找到分析解决方案,则这是记录的行为。

在这种情况下,您可以直接调用具有匹配起始值的数值解算器

vpasolve(a*x*cot(a*x) == b, x,160)

这不完全是你要求的,但是使用你从图中读取的作为起始值应该这样做。