2015-01-15 5 views
1

Я хочу иметь функцию matlab для установки сферы, учитывая, что X = [x, y, z].Сфера с заданным радиусом, matlab

Радиус фиксированный/известный. Его следует принимать во внимание и не оценивать снова. Оценка радиуса вызывает дополнительный источник ошибок. я узнал два Полезных ссылки

http://www.mathworks.com/matlabcentral/fileexchange/45356-fitting-quadratic-curves-and-surfaces/content/spherefit.m

http://de.mathworks.com/matlabcentral/fileexchange/34129-sphere-fit--least-squared-

я могу поместить сферу, используя обе функции, но как я могу исправить мой радиус и не оцениваюсь.

------------------------------------- EDITED -------- ----------------------------------------

Я пробовал

POINTS = [... 
      -1.6510 0.4190 0.1580 
    -1.6410 0.4390 0.1770 
    -1.6620 0.4380 0.1320 
    -1.6610 0.3990 0.1980 
    -1.6510 0.4180 0.2090 
    -1.6460 0.4470 0.2130 
    -1.6450 0.4730 0.1950 
    -1.6540 0.4720 0.1480 
    -1.6730 0.3960 0.1530 
    -1.6790 0.3850 0.1770 
    -1.6450 0.4220 0.1850 
    -1.6470 0.4360 0.1540 
    -1.6570 0.4600 0.1370 
    -1.6770 0.4160 0.1300 
    -1.6630 0.4280 0.2340 
    -1.6690 0.4070 0.2250 
    -1.6550 0.4540 0.2270 
    -1.6430 0.4690 0.1740 
    -1.6410 0.4400 0.1930 
    -1.6560 0.4030 0.1880 
    -1.6600 0.3990 0.1720 
    -1.6400 0.4530 0.1810]; 

Radius_act= 0.0725; 
Center_act = [-1.712637 0.448658 0.183808 ]; 

XYZ = bsxfun(@plus,Radius_act*POINTS, Center_act); 

f = @ (C) sum ((сумма (bsxfun (@ минус, XYZ, C).^2,2) -Radius_act^2).^2);

estimateCenter = fminsearch(f, [0,0,0]) 


[Center_LSE,Radius_LSE] = sphereFit(M) 

НО ПОЧЕМУ это другое ????????????

estimateCenter = -1.7640 0.4576 0.1906 


Center_LSE = -1.7122 0.4485 0.1838 


Radius_LSE = 0.0725 
+0

Я не понимаю, в чем проблема. Радиус - это второй вывод второго скрипта, который вы нашли на центральном матале. У вас уже есть это. – Bentoy13

+0

@ Bentoy1 Радиус фиксирован/известен. Его следует принимать во внимание и не оценивать снова. Оценка радиуса вызывает дополнительный источник ошибок – Shahgee

+0

А, хорошо, я понимаю вашу проблему! – Bentoy13

ответ

1

В первой попытке вы могли бы свести к минимуму ту же функцию, что возражение Sphere Fit из FileExchange использует: Sum((x-xc)^2+(y-yc)^2+(z-zc)^2-r^2)^2. [Это то, что он укажет в документации по крайней мере ... Если это правильный выбор, я не уверен, но пока мы доверяем этому источнику.]

Давайте просто воспользуемся автоматической функцией fminsearch сведение к минимуму набор инструментов:

f = @(C) sum((sum(bsxfun(@minus,XYZ,C).^2,2)-r^2).^2); 
estimateCenter = fminsearch(f, [0,0,0]); 

Для примера данных:

r = 3; 
realCenter = [10,20,40]; 
[X,Y,Z] = sphere(10); 
XYZ = bsxfun(@plus,r*[X(:),Y(:),Z(:)], realCenter); 

Это поможет нам:

estimateCenter = 
    10.0000 19.9999 40.0000 

Если вы хотите получить более точные приближения, вы можете установить погрешность допуска своей мечты, используя fminsearch(..., optimset('TolX',1e-4)).

+0

wow .... позвольте мне попробовать.Thanx так или иначе. – Shahgee

+0

@ смотрите, пожалуйста, отредактированный. – Shahgee

+0

@Shah: Нет «отредактированного». – knedlsepp

Смежные вопросы