2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Графика в системе matlab
Сообщение01.06.2017, 23:35 
Аватара пользователя
Как построить график функции, которая задана m функцией? Простая подстановка массива аргументов выдает ошибку, т.к. в самой функции используются логические условия. А при попытке самому сформировать массив приводят к очень большому времени работы, например если надо построить двухмерный график по 100 ×100 точкам. Подскажите, что делать.

 
 
 
 Re: Графика в системе matlab
Сообщение01.06.2017, 23:39 
Аватара пользователя
Чья функция? Если Ваша, то лучше её переписать для правильной работы с массивами...

-- 01.06.2017, 23:41 --

Sicker в сообщении #1221339 писал(а):
в самой функции используются логические условия

Не убедительно ;-) логические массивы вполне можно использовать как индексы...

 
 
 
 Re: Графика в системе matlab
Сообщение01.06.2017, 23:51 
Аватара пользователя
Geen
Как? Аргумент в функции число, а не массив.

 
 
 
 Re: Графика в системе matlab
Сообщение01.06.2017, 23:55 
Аватара пользователя
Sicker в сообщении #1221353 писал(а):
Geen
Как? Аргумент в функции число, а не массив.

Плохая функция - в MatLab'е любое число это массив размерами 1,1,1....

 
 
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 00:01 
Аватара пользователя
Хорошо, вот вам код
Код:
function [z]=func(x,y)

lambda=1;
a=2*lambda;
b=4*lambda;

A=1;
alpha=25;
alpha=(25/180)*pi;
k=2*pi/lambda;

if (y>b-a/(2*sqrt(3)))&&(x>-a/2)&&(x<0)&&(y<b+a*sqrt(3)/2-a/(2*sqrt(3))+sqrt(3)*x)
   z=A*exp(i*k*x*sin(alpha));
elseif (y>b-a/(2*sqrt(3)))&&(x<a/2)&&(x>=0)&&(y<b+a*sqrt(3)/2-a/(2*sqrt(3))-sqrt(3)*x)
      z=A*exp(i*x*k*sin(alpha));
elseif (y>-b-a/(2*sqrt(3)))&&(x<a/2)&&(x>=0)&&(y<-b+a*sqrt(3)/2-a/(2*sqrt(3))-sqrt(3)*x)
    z=A*exp(i*x*k*sin(alpha));
elseif (y>-b-a/(2*sqrt(3)))&&(x>-a/2)&&(x<0)&&(y<-b+a*sqrt(3)/2-a/(2*sqrt(3))+sqrt(3)*x)
    z=A*exp(i*x*k*sin(alpha));
else
    z=0;
end
end
   


-- 02.06.2017, 00:02 --

Код:
x=-10:0.1:10
z=func(x,1)
plot(x,z)

Выдает ожидаемую ошибку на это. Что делать?

 
 
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 00:17 
Аватара пользователя
Sicker в сообщении #1221359 писал(а):
Хорошо, вот вам код

Ужас - постоянное вычисление одних и тех же значений :-) (И смысл этих x,y всё равно не особо ясен)
Но, как видно, результат, z, должен иметь тот же размер, что и x. Если условия взаимноисключающие (например), то просто пишем z(от условия) равно функция от x(от того же условия).

Sicker в сообщении #1221359 писал(а):
Выдает ожидаемую ошибку на это.

А ещё есть fplot и анонимные функции... ;-)

-- 02.06.2017, 00:21 --

Хотя, x явно действительный, а z - комплексный... Это правда Вы такой график хотите построить "двухмерной" plot?

 
 
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 00:23 
Аватара пользователя
Geen в сообщении #1221369 писал(а):
И смысл этих x,y всё равно не особо ясен

Это функция от двух переменных.
Geen в сообщении #1221369 писал(а):
Но, как видно, результат, z, должен иметь тот же размер, что и x.

Да, но он выдает ошибку в условиях. (я там пытался поставить точку у x, типо как при умножении массивов, но пишет что анвалидный синтаксис)
Geen в сообщении #1221369 писал(а):
А ещё есть fplot и анонимные функции... ;-)

Отлично, а как построить от двух переменных?

 
 
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 00:30 
Аватара пользователя
Sicker в сообщении #1221374 писал(а):
Это функция от двух переменных.

Можно подробнее? Саму задачу... а то у Вас в примере в четырёх случаях из пяти вычисляется одно и тоже значение... А результат только "слегка" зависит от y...

Sicker в сообщении #1221374 писал(а):
Отлично, а как построить от двух переменных?

У любой задачи есть много плохих решений, и не всегда есть "хорошие" :-)

 
 
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 00:41 
Аватара пользователя
Мне надо задать значения поля на пластине, на которую падает плоская волна под углом альфа. И построить график. Но это только начало.

 
 
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 01:16 
Аватара пользователя
А почему у Вас тогда x и y несимметричны (как аргументы функции)? Почему у Вас 5 разных "условий" на результат?

А ещё, есть функции типа meshgrid и plot2... (это я сейчас по памяти пишу) :-)

 
 
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 02:22 
Аватара пользователя
Geen
Потому что есть щель определенной формы. Все, больше не задавайте глупых вопросов, какое это имеет отношение к делу?
Geen в сообщении #1221392 писал(а):
А ещё, есть функции типа meshgrid и plot2... (это я сейчас по памяти пишу) :-)

Я их и использовал, но они требуют массива, а откуда его взять?

 
 
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 10:03 
Аватара пользователя
Sicker в сообщении #1221403 писал(а):
какое это имеет отношение к делу?

Они имеют отношение вот к этому
Sicker в сообщении #1221339 писал(а):
при попытке самому сформировать массив приводят к очень большому времени работы
и к этому
Sicker в сообщении #1221339 писал(а):
надо построить двухмерный график по 100 ×100 точкам
(у Вас функция комплекснозначная)...

Sicker в сообщении #1221403 писал(а):
Я их и использовал, но они требуют массива, а откуда его взять?

Sicker в сообщении #1221359 писал(а):
x=-10:0.1:10

 
 
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 14:20 
Аватара пользователя
Geen в сообщении #1221447 писал(а):
(у Вас функция комплекснозначная)...

Ну хорошо, возьму реал
Geen в сообщении #1221447 писал(а):
при попытке самому сформировать массив приводят к очень большому времени работы

Хорошо, я могу в мою функцию ввести дополнительный аргумент lambda
Geen в сообщении #1221447 писал(а):
x=-10:0.1:10

А z откуда взять? Т.е. массив значений?
И желательно вот так
Код:
u=-10:0.1:10
v=-10:0.1:10
[x,y]=meshgrid(u,v)

 
 
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 14:34 
Аватара пользователя
Используется синтаксис Matlab M
z=zeros(size(x));

 
 
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 14:42 
Аватара пользователя
И?

 
 
 [ Сообщений: 22 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group