【问题标题】:Matlab, Error using surf, X, Y, Z, and C cannot be complexMatlab, Error using surf, X, Y, Z, and C 不能很复杂
【发布时间】:2015-04-03 07:16:27
【问题描述】:

我运行下面的代码,但得到 X、Y、Z 和 C 不能是复杂错误,知道什么问题吗?

 k=1;
 u = linspace(0,2*pi,72); 
 v = [-3:.2:-1,1:.2:3];
 [U,V] = meshgrid(u,v);
 r=sqrt((4*V.^-k)./(cos(U).^2+k*sin(U).^2));
 X = r.*cos(U); 
 Y = r.*sin(U);
 Z = V;

这是我想要得到的图像:

http://adasu.info/plates.png

完整代码为:

function simple_math_functions_animation1
clc, close all, clear all

hf1=figure(1);hold on,grid on,axis equal, view([1 -1 1])
set(hf1,'Color','w');set(hf1,'Position',[300, 600, 500, 400]);
xlabel('x');ylabel('y'),zlabel('z');

 k=1;
 u = linspace(0,2*pi,72);
 v = [-3:.2:-1,1:.2:3];
 [U,V] = meshgrid(u,v);
 r=sqrt((4*V.^-k)./(cos(U).^2+k*sin(U).^2));
 X = r.*cos(U);
 Y = r.*sin(U);
 Z = V;

surf(X,Y,Z,'EdgeColor',[0.5 1. 0.2],'FaceColor',[1 0.2 0.8],'FaceAlpha',0.6);

XYZ=[reshape(X,1,prod(size(X)));
     reshape(Y,1,prod(size(Y)));
     reshape(Z,1,prod(size(Z)));
     ones(1,prod(size(Z)))];
phi=[0 : pi/20 : 50*pi];
h=[]; axis([-20 20 -20 20 -20 20]);

for beta=phi   % animation loop  *****************

    T=[cos(beta) -sin(beta) 0    0;     % rotation matrix
       sin(beta)  cos(beta) 0    0;
        0          0        1    0;
        0          0        0    1];

    XYZ1=T*XYZ;  % coordinates changing
    X1=reshape(XYZ1(1,:),size(X));Y1=reshape(XYZ1(2,:),size(Y));Z1=reshape(XYZ1(3,:),size(Z));
    pause(0.1);if ~isempty(h),delete(h);end
    h=surf(X1,Y1,Z1,'EdgeColor',[0.5 1. 0.2],'FaceColor',[0.2 0.2 0.8],'FaceAlpha',0.6);

end       % ******************************************

end

【问题讨论】:

  • 为我工作。你确定你包含了所有的代码?您的示例中没有名为 C 的变量。
  • pastebin.com/8pXjeKXw 这里是完整代码
  • 代码中仍然没有变量C ...
  • 函数的开头不需要调用clear all,它有自己的工作区。

标签: matlab plot surf


【解决方案1】:

你得到了那个复杂的错误,因为r 是复数值。 rXY 中都使用了,所以当需要在这些输入上使用 surf 时,你最终会得到那个错误。这是有道理的,因为您的V 范围具有 值,并且当您为此表达式设置k=1 时:

r=sqrt((4*V.^-k)./(cos(U).^2+k*sin(U).^2));

您实际上是在尝试取 V 中值的平方根,其中一些是负数,因此 r 是复值。如果您查看您上传的实际图像,您会在V 的力量中丢失2。因此:

r=sqrt((4*V.^2-k)./(cos(U).^2+k*sin(U).^2));

当我这样做时,然后尝试运行您的代码,我得到了:

【讨论】:

  • 查看图像和您编码的内容之间的r 表达式。您在V 的权力中缺少2。我已经更新了我的答案。看看吧。
  • @adska - 没问题。考虑接受我的回答 :) 这意味着您在这件事上不再需要任何帮助,我们可以继续回答其他问题。您可以通过转到我的帖子顶部来执行此操作,然后转到左侧,就在向上和向下箭头的下方...单击复选标记图标。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 2012-07-13
相关资源
最近更新 更多