作业帮 > 综合 > 作业

matlab解带参数的非线性方程组

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/14 18:23:05
matlab解带参数的非线性方程组
三个固定点坐标已知A(X1,Y1),B(X2,Y2),C(X3,Y3).未知点(X,Y).未知点到A/B距离差为det_ab,到B/C距离差为det_bc,到A/C距离差为det_ac;
求解未知点坐标?
想写成一个函数,输入参数是A/B/C坐标和三个距离差.输出为未知点的坐标.
求写出matlab代码~
另外,假如我这三个距离差有一定的误差,那么求解的时候怎样得到最优解呢?
1、问题分析:
到两点距离差为定值的点形成双曲线,你的问题相当于求三组双曲线的交点.
很显然,除非特殊情况(三个距离差满足一定约束),很难保证三组曲线交于一点.
如果如你所说“距离差有一定误差”,也就是不满足约束的条件,问题无解.在这种情况
一般按照最小二乘的规则,也就是说,使得未知点举例三个固定点的实际距离差
与给定距离差的总误差最小.这其实是一个优化问题.
2、问题描述:
如果用dA表示未知点到A点距离,dAB表示未知点到A、B两点的距离差(B、C类似),则
优化的目标函数可表示为
J = ( |dA-aB| - dAB )^2 + ( |dB-dC| - dBC )^2 + ( |dC-dA| - dCA )^2
3、程序说明
程序中把所需变量直接赋值,A、B、C为包括两个元素的向量,为固定点的坐标,dAB、
dBC、dCA为三个距离差.测试数据使用正三角形的顶点,距离差加了误差.
你要求写成函数的形式,从所给的代码很容易修改(把所需参数通过函数传入即可).
由于程序中使用了匿名函数,所以必须在7.0以上版本使用.
function zd527752423
% 测试数据:正三角形的顶点
R = 5;
A = [R 0];
B = R*[cos(2*pi/3) sin(2*pi/3)];
C = R*[cos(4*pi/3) sin(4*pi/3)];
% 到三个顶点的距离差(理想情况三个都是0,现加入误差)
dAB = 0.1;
dBC = 0;
dCA = 0.2;
% 目标函数
J = @(x) (abs(d(x,A)-d(x,B))-dAB)^2 + (abs(d(x,B)-d(x,C))-dBC)^2 + (abs(d(x,C)-d(x,A))-dCA)^2;
% 调用优化算法求解,得到结果即为未知点坐标(X,Y)
x = fminsearch(J,[1 1]);
fprintf('\n未知点坐标:(%g,%g)\n',x);
% 绘图
pts = [A;B;C];
plot(pts(:,1),pts(:,2),'o')
hold on
plot(x(1),x(2),'rx')
axis equal
function dis = d(p1,p2)
% 计算两点间距离的函数
dis = norm(p1-p2);