如何在MATLAB中求解涉及三角函数的非线性方程组

时间:2015-04-19 15:35:43

标签: matlab

如何从MATLAB

中的以下方程式中找到b,k1,k3的值
     cos(2*b)- k3 +(2*k1*sin(b))=0
     cos((2*b)+t1-p1)-k3-(k1*(sin(p1-b)-sin(t1+b)))=0
     cos((2*b)+t2-p2)-k3-k1*(sin(p2-b)-sin(t2+b))=0

其中p1,p2,t1,t2是已知值

1 个答案:

答案 0 :(得分:3)

您可以使用函数fsolve。它用于求解非线性方程组。如果您查看我提供的链接中的示例1,您可以根据自己的需要进行调整。

修改

根据您提供的值并解决一些困难,这就是我定义函数的方法(注意我修复了F的第二行,它有k1而不是k(1)):

function F = func(k)

 t1 = pi/9; 
 t2 = (2*pi)/9; 
 p1 = acot(0.8+cot(t1)); 
 p2 = acot(0.8+cot(t2)); 

 F= [cos(2*k(2))-k(3)+(2*k(1)*sin(k(2))); 
     cos((2*k(2))+t1-p1)-k(3)-(k(1)*(sin(p1-k(2))-sin(t1+k(2)))); 
     cos((2*k(2))+t2-p2)-k(3)-k(1)*(sin(p2-k(2))-sin(t2+k(2)))]; 

end

然后解决它,我打电话给:

k0 = [1.523,0.23,3.57]; 
[k fk flag]=fsolve(@func,k0)
Optimization terminated: first-order optimality is less than options.TolFun.

k =

   -0.5210   -1.0933    0.3480


fk =

  1.0e-009 *

    0.2676
    0.2651
    0.2501


flag =

     1

其中k是解,fk是f(k),几乎为零(1e-9),flag = 1表示即使优化终止,fsolve也会收敛到解。