利⽤MATLAB计算三维坐标序列距离误差程序
版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。
利⽤MATLAB计算三维坐标序列距离误差程序
1.三维坐标储存在⽂件中,格式如下:
各坐标间的距离真值是⼀定值,计算相邻距离的标准差。
2.MATLAB程序如下:
[html]
fprintf格式1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2. % 名称:caculateAccuracy.m
3. % 功能:读取三维世界坐标,计算精度
4. % 作者:LYC
5. % 单位:中科院苏州医⼯所
6. % ⽇期:2014.5.5
7. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8. %% 清理各变量
9. clc, clear
10.
11. %% 设定值
12. dataFile = ''; % 设定⽂件名称
13. errorFile = '';
14.
15. realValue = 1.00; % 设定真值
16.
17. %% 读取⽂件
18. fid = fopen(dataFile, 'r'); % 打开⽂件
19. k = 0; % 循环计数变量
20. curr = [0, 0, 0]; % 临时变量
21. a = []; % 数据变量
22. while ~feof(fid) % 判断是否到了⽂件末尾
23.    curr = fscanf(fid, '(%f, %f, %f)\n', 3);
24.    if ~isempty(curr)
24.    if ~isempty(curr)
25.        k = k+1;
26.        a = [a, curr];
27.    end
28. end
29. fclose(fid);
30.
31. %% 计算各量之间的欧⽒距离
32. dist = []; % 储存欧⽒距离
33. for i = 1:k-1
34.    curr2 = (a(1,i)-a(1,i+1))^2 + (a(2,i)-a(2,i+1))^2 + (a(3,i)-a(3,i+1))^2; % 计算当前距离的平⽅
35.    curr3 = sqrt(curr2); %计算当前距离
36.    dist = [dist, curr3];
37. end
38.
39. %% 各距离减去距离真值
40. distError = dist - realValue; % 储存距离误差
41.
42. %% 利⽤贝塞尔公式计算标准差
43. distError2 = distError.^2; % 计算误差平⽅
44. sumError2 = sum(distError2);
45. std = sqrt(sumError2/(k-1))
46.
47. %% 将结果写⼊⽂件
48. fid2 = fopen(errorFile, 'w'); % 打开⽂件
49. fprintf(fid2, 'standard deviation = %f\r\n', std);
50. fprintf(fid2, 'distance errors are:\r\n');
51. for i = 1:k-1
52.    fprintf(fid2, '%f\r\n', distError(i)); %输⼊当前数据与⼀空格
53. end
54. fclose(fid2);
55. disp('误差写⼊⽂件成功!');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 名称:caculateAccuracy.m
% 功能:读取三维世界坐标,计算精度
% 作者:LYC
% 单位:中科院苏州医⼯所
% ⽇期:2014.5.5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% 清理各变量
clc, clear
%% 设定值
dataFile = ''; % 设定⽂件名称
errorFile = '';
realValue = 1.00; % 设定真值
%% 读取⽂件
fid = fopen(dataFile, 'r'); % 打开⽂件
k = 0; % 循环计数变量
curr = [0, 0, 0]; % 临时变量
a = []; % 数据变量
while ~feof(fid) % 判断是否到了⽂件末尾
curr = fscanf(fid, '(%f, %f, %f)\n', 3);
if ~isempty(curr)
k = k+1;
a = [a, curr];
end
end
fclose(fid);
%% 计算各量之间的欧⽒距离
dist = []; % 储存欧⽒距离
for i = 1:k-1
curr2 = (a(1,i)-a(1,i+1))^2 + (a(2,i)-a(2,i+1))^2 + (a(3,i)-a(3,i+1))^2; % 计算当前距离的平⽅
curr3 = sqrt(curr2); %计算当前距离
dist = [dist, curr3];
end
%% 各距离减去距离真值
distError = dist - realValue; % 储存距离误差
%% 利⽤贝塞尔公式计算标准差
distError2 = distError.^2; % 计算误差平⽅
sumError2 = sum(distError2);
std = sqrt(sumError2/(k-1))
%% 将结果写⼊⽂件
fid2 = fopen(errorFile, 'w'); % 打开⽂件
fprintf(fid2, 'standard deviation = %f\r\n', std);
fprintf(fid2, 'distance errors are:\r\n');
for i = 1:k-1
fprintf(fid2, '%f\r\n', distError(i)); %输⼊当前数据与⼀空格
end
fclose(fid2);
disp('误差写⼊⽂件成功!');
3.误差分析结果储存在⽂件中,如下所⽰

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。