c语言代码:将大量空间点(x,y,z也就是三维的数组) 拟合成一个平面的代码

c语言代码:将大量空间点(x,y,z也就是三维的数组) 拟合成一个平面的代码,第1张

您好,您这样:

#include<iostream>

#include<cmath>

using namespace std

double solve(int x,int y,int z) //计算坐标到原点距离

{

return sqrt(x*x+y*y+z*z)

}

int main()

{

int i,x,y,z//定义三维坐标 存x,y,z

double dis,maxdis=0//定义最远距离

for(i=0i<15i++)

{

cin>>x>>y>>z//输入

dis=solve(x,y,z)//计算

maxdis=dis>maxdis?dis:maxdis//判断远近

}

printf("%lf\n",maxdis)//输出最远的

return 0

}

x=[1 2 3 6 9 10]

y=[1 3 5 7 9 11]%给定x,y的坐标

p=polyfit(x,y,1)%直线拟合

p =

0.97410.9671

%相当于y=0.9741x+0.9671

x1=(0:0.1:10)

f = polyval(p,x)%求出0:10上的拟合多项式所对应函数值

plot(x,f)%画出所对应的拟合直线

hold on

plot(x,y,'*')%画出那些离散的点

grid on

最小二乘

Ax=b

AT Ax=AT b

x=(AT A)^-1(AT b)

function [a,b,c,r]=fitcircle(x,y,z)

%(x+a)^2+(y+b)^2+(z+c)^2=r^2

x=x(:)

y=y(:)

z=z(:)

csize=min([length(x),length(y),length(z)])

if csize<4

    a=0

    b=0

    c=0

    r=-1

    return

end

pow_xyz=-x(1:csize).*x(1:csize)

pow_xyz=pow_xyz-y(1:csize).*y(1:csize)

pow_xyz=pow_xyz-z(1:csize).*z(1:csize)

A=[x(1:csize),y(1:csize),z(1:csize),ones(csize,1)]

xans=((A'*A)^-1)*(A'*pow_xyz)

a=xans(1)

b=xans(2)

c=xans(3)

r=(a*a+b*b+c*c)/4-xans(4)

r=sqrt(r)

a=a/2

b=b/2

c=c/2

end


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12054250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存