定义包含非线性方程组的函数,然后循环利用fsolve函数求解非线性方程组,目的是利用三个已知点确定原点坐标

数学模型如前一篇所述,不再累述!

主程序如下:

global XA YA ZA XB YB ZB XC YC ZC %定义全局变量
A=100*(rand(15,9)*2-1);% 设定15组能够确定坐标原点的三个点,每一行代表一个组,每组各元素含义如下:
% XA YA ZA XB YB ZB XC YC ZC
P=zeros(15,3);% 预设内存给被测基准块原点在测量系中的坐标
for i=1:length(A)
XA=A(i,1); YA=A(i,2);ZA=A(i,3);XB=A(i,4);YB=A(i,5);ZB=A(i,6);XC=A(i,7);YC=A(i,8);ZC=A(i,9);%方程组参数赋值
fun=@myfun_2;
x0=[0;0;192];% 设定初值
opt=optimset('Display','off');%不显示输出
x=fsolve(fun,x0,opt); %调用函数
P(i,1)=x(1);%原点X向坐标赋值
P(i,2)=x(2);%原点Y向坐标赋值
P(i,3)=x(3);%原点Z向坐标赋值
end

子程序如下:

function f=myfun_2(x)
global XA YA ZA XB YB ZB XC YC ZC %定义全局变量
f1=(norm([XA-x(1);YA-x(2);ZA-x(3)]))^2+(norm([XB-x(1);YB-x(2);ZB-x(3)]))^2-(norm([XA-XB;YA-YB;ZA-ZB]))^2;
%勾股定理,原点与其中两点构成直角三角形
f2=(norm([XB-x(1);YB-x(2);ZB-x(3)]))^2+(norm([XC-x(1);YC-x(2);ZC
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值