首先,我确信存在一个简单的答案,也许我只是在网上搜索答案时没有正确的措辞。
我正在尝试解决看起来像这样的等式:
a*x*cot(a*x) == b
其中a和b是常数。使用
solve(a*x*cot(a*x) == b, x)
我得到的结果我知道是错的(我使用的值是常量,我得到-227,它应该是+160左右。)我把它绘制在Mathematica中两个独立的功能,它们确实在那里相互交叉,但由于婴儿床部分是周期性的,它们会这么做。
我想限制Matlab搜索特定间隔的解决方案,例如0到200;我该怎么做?
我对Matlab很新(在Mathematica中更有经验)。
答案 0 :(得分:1)
您可以使用fzero
指定x
上的边界,只需要两个要求
r(x) = 0
)所以我们以残差形式重写函数:
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)
这不完全是你要求的,但是使用你从图中读取的作为起始值应该这样做。