A11 = cos(x)*cos(y) (1)
A12 = cos(x)*sin(y) (2)
A13 = -sin(y) (3)
A21 = sin(z)*sin(x)*cos(y) - cos(z)*sin(y) (4)
A22 = sin(z)*sin(y)*sin(x) + cos(z)*cos(y) (5)
A23 = cos(x)*sin(z) (6)
A31 = cos(z)*sin(x)*cos(z) + sin(z)*sin(x) (7)
A32 = cos(z)*sin(x)*sin(y) - sin(z)*cos(y) (8)
A33 = cos(x)*cos(z) (9)
我有一组九个方程式,只有三个未知数。未知数是x,y和z。我知道A11,A12,A13 ....... A33的价值。但是这些值可能会有一些噪音,因此我将不得不使用一些优化算法来找到x,y和z的最佳拟合值。
如何在Matlab中求解上述超定方程组?
我一直在线搜索,我发现了一些功能,尤其是one。
但我对于解决问题的最佳方法感到非常困惑。需要一点方向......
答案 0 :(得分:1)
我最喜欢的是优化工具箱中的lsqcurvefit
。
从documentation您看到它需要:
可以设置选项optimset
,您可以在其中指定几种经过良好测试的算法之一。此外,可以在那里设置最大迭代次数或功能容差或参数值容差的最小阈值。
如果您不应该使用优化工具箱,则可以始终使用fminsearch
并最小化最小方块sum((ydata-fun(x)).^2)
。
在这里的案例中编写函数fun
(也参见文档)并使用问题中的代码的示例如下:
function r = fun(p, xdata)
x = p(1);
y = p(2);
z = p(3);
% code from here
A11 = cos(x)*cos(y)
A12 = cos(x)*sin(y)
A13 = -sin(y)
A21 = sin(z)*sin(x)*cos(y) - cos(z)*sin(y)
A22 = sin(z)*sin(y)*sin(x) + cos(z)*cos(y)
A23 = cos(x)*sin(z)
A31 = cos(z)*sin(x)*cos(z) + sin(z)*sin(x)
A32 = cos(z)*sin(x)*sin(y) - sin(z)*cos(y)
A33 = cos(x)*cos(z)
% everything in one matrix
r = [A11, A12, A13, A21, A22, A23, A31, A32, A33];
end
人们看到标量和矢量值函数之间没有真正的区别。 Matlab自动计算数据的差异并对其求和。