2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Графика в системе matlab
Сообщение01.06.2017, 23:35 
Аватара пользователя


13/08/13

4323
Как построить график функции, которая задана m функцией? Простая подстановка массива аргументов выдает ошибку, т.к. в самой функции используются логические условия. А при попытке самому сформировать массив приводят к очень большому времени работы, например если надо построить двухмерный график по 100 ×100 точкам. Подскажите, что делать.

 Профиль  
                  
 
 Re: Графика в системе matlab
Сообщение01.06.2017, 23:39 
Заслуженный участник
Аватара пользователя


01/09/13
4656
Чья функция? Если Ваша, то лучше её переписать для правильной работы с массивами...

-- 01.06.2017, 23:41 --

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

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

 Профиль  
                  
 
 Re: Графика в системе matlab
Сообщение01.06.2017, 23:51 
Аватара пользователя


13/08/13

4323
Geen
Как? Аргумент в функции число, а не массив.

 Профиль  
                  
 
 Re: Графика в системе matlab
Сообщение01.06.2017, 23:55 
Заслуженный участник
Аватара пользователя


01/09/13
4656
Sicker в сообщении #1221353 писал(а):
Geen
Как? Аргумент в функции число, а не массив.

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

 Профиль  
                  
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 00:01 
Аватара пользователя


13/08/13

4323
Хорошо, вот вам код
Код:
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 
Заслуженный участник
Аватара пользователя


01/09/13
4656
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 
Аватара пользователя


13/08/13

4323
Geen в сообщении #1221369 писал(а):
И смысл этих x,y всё равно не особо ясен

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

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

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

 Профиль  
                  
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 00:30 
Заслуженный участник
Аватара пользователя


01/09/13
4656
Sicker в сообщении #1221374 писал(а):
Это функция от двух переменных.

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

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

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

 Профиль  
                  
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 00:41 
Аватара пользователя


13/08/13

4323
Мне надо задать значения поля на пластине, на которую падает плоская волна под углом альфа. И построить график. Но это только начало.

 Профиль  
                  
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 01:16 
Заслуженный участник
Аватара пользователя


01/09/13
4656
А почему у Вас тогда x и y несимметричны (как аргументы функции)? Почему у Вас 5 разных "условий" на результат?

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

 Профиль  
                  
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 02:22 
Аватара пользователя


13/08/13

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

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

 Профиль  
                  
 
 Re: Графика в системе matlab
Сообщение02.06.2017, 10:03 
Заслуженный участник
Аватара пользователя


01/09/13
4656
Sicker в сообщении #1221403 писал(а):
какое это имеет отношение к делу?

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

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

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

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


13/08/13

4323
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 
Заслуженный участник
Аватара пользователя


01/09/13
4656
Используется синтаксис Matlab M
z=zeros(size(x));

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


13/08/13

4323
И?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group