2013-05-28 2 views
1

Я пробовал рисовать сферу to look like this.Как построить функцию сферы?

This earlier question содержит код, в котором я пробовал заговор.

Ответ на этот предыдущий вопрос, но теперь у меня возникли проблемы с построением функции сферы, как показано на рисунке, указанном ссылкой выше.

Редактировать Это функция сфера я использую:

function ph = sphereFN(x) 
    ph = sum(x.*x, 2); 

end 

Редактировать Результат должен выглядеть примерно так: enter image description here

NB: Я изменил функцию из сферы на сферу FN, чтобы избежать конфликта с сферой матлаба.

+0

есть причина, почему вы используете [эта сфера функция] (HTTP: //www-optima.amp.i. kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO_files/TestGO_files/TestCodes/sphere.m)? Кроме того, он отличается от того, что вы разместили в своем ответе на @shoelzer – Schorsch

+0

@Schorsch. Код выглядит по-другому, но в основном делает то же самое. Они все принимают х, возможно, как вектор, как ввод и суммирование. Функция сферы, которую я написал, является той, которую я использую. Его не следует изменять. Нет причин, но в основном пытаюсь проверить i. Я не использую [link] (http: http: //www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO_files/TestGO_files/TestCodes/sphere.m) эту сферу , Я использую один пост. – user2179716

ответ

1

Ваш sphereFN не может делать то, что вы ожидаете, что делать. Похоже, что вы пытаетесь осуществить тест sum of different powers на основе этой функции:

sodp

Однако, ваша реализация, как:

ph = sum(x.*x, 2); 

не похожа на эту функцию. Как об использовании этого в качестве отправной точки:

x = linspace(-1,1,25); 

for I=1:size(x,2) 
    for J=1:size(x,2) 
     s(I,J) = abs(x(I))^2 + abs(x(J))^3; 
    end 
end 

[xx,yy] = meshgrid(linspace(-1,1,25)); 

surfc(xx,yy,s) 

Как ваш, в сущности, описывающей 2D проблемы, эта грубая реализация функции будет достаточно. Вы можете поместить вложенный for -loops в функцию под названием sum_of_different_powers_2D (например) и вызвать ее, передав вектор x.

Редактировать

Вы можете получить форму, которая больше напоминает предполагаемому поверхность заменить команду внутри вложенной for -loops с:

s(I,J) = abs(x(I))^2 + abs(x(J))^2; 

Это будет напоминать эту функцию:

sphere

Редактировать 2

Важно понимать, что n в приведенном выше уравнении является измерением вашей проблемы. Что, как вы показали, это 2.

Редактировать 3

Я рекомендую использовать эту функцию:

function ph = sphereFN(x) 

for I=1:size(x,2) 
    for J=1:size(x,2) 
     ph(I,J) = abs(x(I))^2 + abs(x(J))^2; 
    end 
end 

end 
+0

Я попробовал вас, но я не получаю форму сферы, как указано выше. Я фактически использую эту [ссылку] (http://infinity77.net/global_optimization/_images/math/fb5e12c8fdc92269e27e0a7a9d63834cfbe855a4.png), а не сумму разных. – user2179716

+0

жаль, что вы можете проверить еще раз. Я использую n = 2. – user2179716

+0

это все еще не дает мне. Как насчет моей сферы? разве это не будет работать, просто говоря z = sphereF (X1), чтобы получить третье измерение и построить контур? – user2179716

0

Matlab имеет встроенную функцию сферы, и в документации показано, как ее построить.

http://www.mathworks.com/help/matlab/ref/sphere.html

+0

Я видел это, но я использую эту сферную функцию: function ph = sphereFN (x) ph = sum (x. * X, 2); Z = sphereFN (X1)% Это оценивает Z как третье измерение, но я продолжаю иметь Z должен быть atleast 2x2 конец если я использую контур (X1, X2, Z); – user2179716

+0

@Schorsch благодарит меня за то, что передумал мой вопрос. – user2179716

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