4 / 4 / 1
Регистрация: 02.11.2013
Сообщений: 164
1
03.11.2015, 16:53. Показов 4133. Ответов 2
При выполнении программы матлаб выдает ошибку:
Matlab M | ||
|
Trial>> Untitled4
Warning: Imaginary parts of complex X, Y, and/or Z arguments ignored
> In Untitled4 (line 4)
Error using mesh (line 70)
X, Y, Z, and C cannot be complex.
Error in Untitled4 (line 10)
subplot(2, 2, 2), mesh(x, y, z);
Почему x, y и z считаются комплексными, и как это исправить?
0
-
Direct link to this question
⋮
-
Direct link to this question
Hi all,
I want to draw 3D plot using surf command for vt = 0, -0.1…-0.5
I am getting an error as,
Error using surf X,Y, Z and C cannot be complex
My code is given below,
B = 1e-4; sigma_on = 0.45; x_on = 0.06; sigma_p = 4e-5; A = 1e-10; sigma_off = 0.013; x_off = 0.4; G_m = 0.025; rho = 1e-3; v_m = -0.5;
vt= 0:0.1:0.5;
t = 0.01:0.01:1;
for v = 1:length(vt)
v_m = -vt(v);
for x = 1:length(t)
G(x) = G_m*t(x)+ exp(sqrt(v_m));
f1(x) = A*sinh(v_m/sigma_off)*exp(-(x_off^2/t(x)^2));
f2(x) = B*sinh(v_m/sigma_on)*exp(-(t(x)^2/x_on^2));
f(x) = f1(x) + f2(x);
final(v,x)=log(f(x));
end
end;
surf(t,vt,final);
Can anyone help me.
Accepted Answer
-
Direct link to this answer
⋮
-
Direct link to this answer
The error message is clear: «X,Y, Z and C cannot be complex». Obviously there are complex values. All we see is the failing code, but we cannot guess reliably, what its intention is. Therefore it is hard (or random) to suggest an improvement.
Maybe you want:
surf(t, vt, real(final));
or
or your calculations are wrong.
[SL: fixed typo in last code segment.]
More Answers (2)
-
Direct link to this answer
⋮
-
Direct link to this answer
The logarithm of a negative number will be complex. There are several ways to avoid that, the easiest being:
final(v,x)=log(abs(f(x)));
Note that the logarithm of 0 is -Inf, so you may want to trap ‘f(x)’ to prevent it from being zero as well. The easiest way to do that would be to have it equal NaN if it is zero, because NaN values will not plot. Consider setting the negative values of ‘f(x)’ to NaN as well, as one option.
-
Direct link to this answer
⋮
-
Direct link to this answer
Thank you very much Jan Simon and Star Strider for your answer
See Also
Categories
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
I’m trying to plot Ackley Function
in matlab
But I’m getting the following error
Error using surf (line xxx)
X, Y, Z, and C cannot be complex.
Here’s the code I’m using
clear; clc; close all;
% Parameters
nx = 2; % No. of Input variables
f = @ackley;
limits = repmat([-40 40], nx, 1);
titl = 'Ackley';
% Plot
[X,Y] = meshgrid(linspace(limits(1,1),limits(1,2),100),...
linspace(limits(2,1),limits(2,2),100));
Z = reshape(f([X(:)'; Y(:)']), 100, 100);
surfc(X,Y,Z);
Ackley.m
function [y] = ackley(x)
d = length(x);
a = 20;
b = 0.2;
c = 2*pi;
term1 = -a * exp(-b*sqrt(1/d * sum(x)));
term2 = -exp(1/d * sum(cos(c * x)));
y = term1 + term2 + a + exp(1);
end
-
slimkin
- Пользователь
- Сообщения: 7
- Зарегистрирован: Пн янв 03, 2011 7:24 pm
Графики
Доброго времени суток.
Подскажите пожалуйста, при построенииее графиков в функции что обозначают точки, и где их ставить,а где нет? В своём учебнике не нашёл
>> [x,y]=meshgrid(-7:0.01:7);
z=(x.^2+y.^2)*acos((y.^2+8*y+4)/100)^3;
mesh(x,y,z)
surf (x,y,z); grid on; colormap;
contour(x,y,z,20); colorbar; grid on
-
amandra
- Пользователь
- Сообщения: 582
- Зарегистрирован: Вт мар 28, 2006 4:29 pm
Сообщение amandra » Вт янв 04, 2011 12:26 am
с точкой — поэлементное вычисление
сравните результат
Донесем чистоту до трудно доступных мест — ни дня без туалетной бумаги
-
slimkin
- Пользователь
- Сообщения: 7
- Зарегистрирован: Пн янв 03, 2011 7:24 pm
Сообщение slimkin » Вт янв 04, 2011 12:49 am
amandra писал(а):с точкой — поэлементное вычисление
сравните результат
Сравнил.
B =
7 10
15 22
>> A=[1 2;3 4];
D=A.^2
D =
1 4
9 16
Результат В получили обычным умножением, а D просто возводя каждый элемент в квадрат, так получается?
Если у меня задана функция z=(x^2+y^2)*acos((y^2+8*y+4)/100)^ где мне расставить точки чтобы получить верный результат? Всё равно принципа не понял (
-
amandra
- Пользователь
- Сообщения: 582
- Зарегистрирован: Вт мар 28, 2006 4:29 pm
Сообщение amandra » Вт янв 04, 2011 12:59 am
z=(x.^2+y.^2)*acos((y.^2+8.*y+4)/100)^3;
Донесем чистоту до трудно доступных мест — ни дня без туалетной бумаги
-
slimkin
- Пользователь
- Сообщения: 7
- Зарегистрирован: Пн янв 03, 2011 7:24 pm
Сообщение slimkin » Вт янв 04, 2011 1:16 am
amandra писал(а):
z=(x.^2+y.^2)*acos((y.^2+8.*y+4)/100)^3;
Неа (
>> [x,y]=meshgrid(-7:0.01:7);
z=(x.^2+y.^2)*acos((y.^2+8.*y+4)/100)^3;
mesh(x,y,z)
surf (x,y,z); grid on; colormap;
contour(x,y,z,20); colorbar; grid on
??? Error using ==> surface
X, Y, Z, and C cannot be complex.
-
amandra
- Пользователь
- Сообщения: 582
- Зарегистрирован: Вт мар 28, 2006 4:29 pm
Сообщение amandra » Вт янв 04, 2011 1:49 am
Код: Выделить всё
[x,y]=meshgrid(-7:0.01:7);
z=(x.^2+y.^2).*acos((y.^2+8.*y+4)/100)^3;
mesh(x,y,z)
surf (x,y,z); grid on; colormap;
contour(x,y,z,20); colorbar; grid on
Донесем чистоту до трудно доступных мест — ни дня без туалетной бумаги
-
slimkin
- Пользователь
- Сообщения: 7
- Зарегистрирован: Пн янв 03, 2011 7:24 pm
Сообщение slimkin » Вт янв 04, 2011 7:33 am
неа, опять таже ошибка
-
amandra
- Пользователь
- Сообщения: 582
- Зарегистрирован: Вт мар 28, 2006 4:29 pm
Сообщение amandra » Вт янв 04, 2011 9:03 am
давайте по порядку
1) у вас только этот код и больше ничего нет?
2) только этот код запустите
Код: Выделить всё
[x,y]=meshgrid(-7:0.01:7);
z=(x.^2+y.^2).*acos((y.^2+8.*y+4)/100)^3;
mesh(x,y,z)
Донесем чистоту до трудно доступных мест — ни дня без туалетной бумаги
-
slimkin
- Пользователь
- Сообщения: 7
- Зарегистрирован: Пн янв 03, 2011 7:24 pm
Сообщение slimkin » Вт янв 04, 2011 9:13 am
[x,y]=meshgrid(-7:0.01:7);
z=(x.^2+y.^2).*acos((y.^2+8.*y+4)/100)^3;
mesh(x,y,z)
Этот код выдаёт:
>> [x,y]=meshgrid(-7:0.01:7);
z=(x.^2+y.^2).*acos((y.^2+8.*y+4)/100)^3;
mesh(x,y,z)
??? Error using ==> surface
X, Y, Z, and C cannot be complex.
Error in ==> C:MATLAB6p5toolboxmatlabgraph3dmesh.m
On line 93 ==> hh = surface(x,y,z,’FaceColor’,fc,’EdgeColor’,’flat’, ‘FaceLighting’, ‘none’, ‘EdgeLighting’, ‘flat’);
-
U235
- Пользователь
- Сообщения: 814
- Зарегистрирован: Пт июл 01, 2005 10:13 am
Сообщение U235 » Вт янв 04, 2011 12:50 pm
Скорее всего у Вас аргумент аркосинуса больше единицы получается, в результате функция становится комплексной и mesh ее не строит.
И перед кубом точка возможно нужна.
-
amandra
- Пользователь
- Сообщения: 582
- Зарегистрирован: Вт мар 28, 2006 4:29 pm
Сообщение amandra » Вт янв 04, 2011 1:09 pm
U235 писал(а):Скорее всего у Вас аргумент аркосинуса больше единицы получается, в результате функция становится комплексной и mesh ее не строит.
И перед кубом точка возможно нужна.
так у меня работает, это у slimkin не выходит…
Донесем чистоту до трудно доступных мест — ни дня без туалетной бумаги
-
abobroff
- Пользователь
- Сообщения: 488
- Зарегистрирован: Пн окт 25, 2010 1:21 pm
Сообщение abobroff » Вт янв 04, 2011 1:36 pm
amandra писал(а):…так у меня работает…
Я полностью согласен с U235.
Код: Выделить всё
>> y=7;acos((y.^2+8.*y+4)/100)
ans =
0 + 0.4211i
-
slimkin
- Пользователь
- Сообщения: 7
- Зарегистрирован: Пн янв 03, 2011 7:24 pm
Сообщение slimkin » Ср янв 05, 2011 1:45 am
U235, спасибо, скорей всего так и есть, изменил пределы и уже строит)
Но появился другой вопрос, почему surf график строит сплошным чёрным? В настройках чего?
mesh строит этот же как и положено…
>> [x,y]=meshgrid(-6:0.01:6);
z=(x.^2+y.^2)*acos((y.^2+8*y+4)/100)^3;
surf(x,y,z); grid on; colormap;
-
U235
- Пользователь
- Сообщения: 814
- Зарегистрирован: Пт июл 01, 2005 10:13 am
Сообщение U235 » Ср янв 05, 2011 6:27 am
У Вас сетка очень плотная или увеличте шаг, или Line — ‘none’ сделайте.
-
slimkin
- Пользователь
- Сообщения: 7
- Зарегистрирован: Пн янв 03, 2011 7:24 pm
Сообщение slimkin » Ср янв 05, 2011 7:02 am
О, всё красиво теперь. Спасибо!
I’m trying to plot
Ackley Function
inmatlab
But I’m getting the following errorError using surf (line xxx)
X, Y, Z, and C cannot be complex.
Here’s the code I’m using
clear; clc; close all; % Parameters nx = 2; % No. of Input variables f = @ackley; limits = repmat([-40 40], nx, 1); titl = 'Ackley'; % Plot [X,Y] = meshgrid(linspace(limits(1,1),limits(1,2),100),... linspace(limits(2,1),limits(2,2),100)); Z = reshape(f([X(:)'; Y(:)']), 100, 100); surfc(X,Y,Z);
Ackley.m
function [y] = ackley(x) d = length(x); a = 20; b = 0.2; c = 2*pi; term1 = -a * exp(-b*sqrt(1/d * sum(x))); term2 = -exp(1/d * sum(cos(c * x))); y = term1 + term2 + a + exp(1); end