如何从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是已知值
答案 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也会收敛到解。