Ваш sphereFN
не может делать то, что вы ожидаете, что делать. Похоже, что вы пытаетесь осуществить тест sum of different powers
на основе этой функции:
Однако, ваша реализация, как:
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;
Это будет напоминать эту функцию:
Редактировать 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
есть причина, почему вы используете [эта сфера функция] (HTTP: //www-optima.amp.i. kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO_files/TestGO_files/TestCodes/sphere.m)? Кроме того, он отличается от того, что вы разместили в своем ответе на @shoelzer – Schorsch
@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