求解给定变量的超越方程?

时间:2014-06-10 14:21:58

标签: matlab

我正试图解决这个超越方程式

x =((g * T ^ 2)/(2 * pi))* tanh(2 * pi * d / x)

哪里

g =重力常数(9.81 m / s ^ 2)

T =我的信号的périod

d =水深(m)

我想解决g,给定g,T和d的值。

这是Matlab在运行代码后发回给我的内容

    g=9.81;
    d=3;
    t=100;
    syms x
    s='g*t*tanh(2*pi*d/x)-x=0';
    -1*solve(s)

    Warning: Explicit solution could not be found. 
    > In solve at 179
    In Itteration at 6 

    ans =

    [ empty sym ]

我写了-1 * solve(s)因为我想得到肯定答案,但这并不重要。我检查了关于超越方程的许多答案和问题,但我什么都没发现..但是,有一个答案与我有同样的问题:

how can I solve transcendental equation?

他得到了同样的''空sym''。我可以用代码中的g,T和d的数值来求解方程式,但是一旦我输入变量,它就会给出同样的错误。

帮助!!

FélixBlais

2 个答案:

答案 0 :(得分:0)

我试过了:

  

s='9.81*100*tanh(2*pi*3/x)-x=0';

而不是

s='g*t*tanh(2*pi*d/x)-x=0';

哪个不起作用,没关系,但不知道为什么。

答案 1 :(得分:0)

我用fzero做到了。我首先绘制了函数,以便近似从哪里开始查看。

g=9.81;
d=3;
t=100;
func=@(x)(g*t*tanh(2*pi*d*1./x)-x)
x0=fzero(func,-200); % find root
disp(x0) %  x0 = -135.5475
disp(func(x0)) % func(x0)= -2.8422e-014

由于您的函数是反对称的,-x0 = 135.5475也是一种解决方案。