我尝试绘制一个看起来像这样的球体。
这个较早的问题包含我尝试绘制的代码。
先前的问题已得到解答,但现在我无法绘制球体函数,如上面链接给出的图中所示。
编辑 这是我正在使用的球体功能:
function ph = sphereFN(x)
ph = sum(x.*x, 2);
end
编辑 结果应如下所示:
注意:我已将函数从 sphere 更改为 sphereFN 以避免与 matlab sphere 冲突。
你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
(例如)的函数中并调用它,传递 vector x
。
编辑
通过将嵌套循环内的命令替换为for
:
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
Matlab 有一个内置的 sphere 函数,文档显示了如何绘制它。