Меню

Select variable to plot матлаб как исправить ошибку

Jose

Hello

I have a vector and a matrix obtained from another function, but the structure is like the vector

and matrix inside ‘callplot’.

The code, is just like this. I really dont know how to write in the right way this

inside the if function.

function f=callplot

t1=[0;1;2;3;4;5];

y1=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16; 17 18 19 20; 21 22 23 24];

in1=0; in2=0; in3=0; in4=0;

a=0; b=0; c=0;

while in1~=‘Y’||‘N’;

in1=input(‘¿You want to plot the variable X? (Y/N)’,‘s’);

if in1==‘Y’ pl(1:2)=‘t1,y1(:,1)’; elseif in1==‘N’ a=1; end

end

while in2~=‘Y’||‘N’;

in2=input(‘¿You want to plot the variable R? (Y/N)’,‘s’);

if in2==‘Y’ pl(3-2*a:4-2*a)=‘t1,y1(:,2)’; elseif in2==‘N’ b=1; end

end

while in3~=‘Y’||‘N’;

in3=input(‘¿You want to plot the variable N? (Y/N)’,‘s’);

if in3==‘Y’ pl(5-2*(a+b):6-2*(a+b))=‘t1,y1(:,2)’; elseif in3==‘N’ c=1; end

end

while in4~=‘Y’||‘N’;

in4=input(‘¿You want to plot the variable Z? (Y/N)’,‘s’);

if in4==‘Y’ pl(7-2*(a+b+c):8-2*(a+b+c))=‘t1,y1(:,2)’; end

end

plot(pl)

end

The error displayed when I Input Y is:

??? Subscripted assignment dimension mismatch.

Error in ==> callplot at 9 if in1==’Y’ pl(1:2)=’t1,y1(:,1)’; elseif in1==‘N’ a=1; end

Additionally, it looks like the elseif isn’t working either. When I Input N, it just display the

prompt again (It should only happen when input is different from Y or N). I suspect my error is on the ~=’Y’||’N’

I hope to be clear enough, sorry if my english is not good.

Accepted Answer

Aaditya Kalsi

The short answer is writing code like this is bad practice when it comes to changing it later and may bring many other problems. The other short answer is EVAL. You can use something like:

The better way to do this:

answersGiven = {in1; in2; in3; in4; in5};

boolCols = strcmpi(‘y’, answersGiven);

colNums = find(boolCols == true);

This should do it. I didn’t have MATLAB open so the code may gve errors! Sorry about that. But the idea should be pretty clear.


More Answers (1)

Walter Roberson

is interpreted as

which is

while (in1~=‘Y’) || (‘N’ ~= 0)

Now as ‘N’ is not 0, the statement is always true.

You want an «and» instead of an «or»

while in1~=‘Y’ && in1 ~=‘N’;

What do you want

to mean?

Sparta

2 / 2 / 0

Регистрация: 24.06.2010

Сообщений: 39

1

09.11.2010, 23:54. Показов 8678. Ответов 5

Метки нет (Все метки)


помогите пожалуйста. Может меня просто заклинило но я реально не понимаю почему MATLAB выдаёт такую ошибку
??? Error using ==> plot
Conversion to double from sym is not possible.

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
clc; clear;
z=1000; k=0; g=0; e=0;
s=int('1/(x+1)','x',0,5);
for i=1:z
    x= unifrnd(0,5);
    y= unifrnd(0,1);
    
    if (y<(1/(x+1)))
        k=k+1;
    end;
    
    if (mod(i,25)==0)
        e=e+1;
        d(e)=((s-(k/i)*5)/s)*100;
        j(e)=i;
    end;
    if (mod(i,250)==0)
        g=g+1;
        s1(g)=(k/i)*5;
        f(g)=i;
    end;
end;
plot(j,d);
xlabel('f-колличество испытаний');
ylabel('d-относительная погрешность');
ezplot('log(6)',f(1),z);
ylim([1.6,2]);
plot(f,s1);

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Sergik1

128 / 127 / 10

Регистрация: 09.11.2010

Сообщений: 200

10.11.2010, 16:42

2

Какая версия Matlab у Вас. На 2010b скрипт посчитался. См. скрин.
Как-то всё напутанно с выводом графики….
Попробуйте такой вариант:

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
clc; clear;
z=1000; k=0; g=0; e=0;
s=int('1/(x+1)','x',0,5);
for i=1:z
    x= unifrnd(0,5);
    y= unifrnd(0,1);
    
    if (y<(1/(x+1)))
        k=k+1;
    end;
    
    if (mod(i,25)==0)
        e=e+1;
        d(e)=((s-(k/i)*5)/s)*100;
        j(e)=i;
    end;
    if (mod(i,250)==0)
        g=g+1;
        s1(g)=(k/i)*5;
        f(g)=i;
    end;
end;
figure
plot(j,d);
xlabel('f-колличество испытаний');
ylabel('d-относительная погрешность');
title('Рис. 1')
figure
plot(f,s1);
ylim([1.6,2]);
title('Рис. 2')
figure
ezplot(s,[f(1),z]);

Миниатюры

Почему Plot не работает?
 



1



2 / 2 / 0

Регистрация: 24.06.2010

Сообщений: 39

10.11.2010, 16:45

 [ТС]

3

Точно поставила 2010b работает)) Спасибо, учла ваше предложение с выводом графиков)
Стоял 2008a..



0



1 / 1 / 0

Регистрация: 09.11.2010

Сообщений: 23

10.11.2010, 16:47

4

Не знаю как у вас, а у меня все работает, только не знаю правильно или нет!
а вообще, если Вы в графике используете переменную, «Х» то:
1) а^x -> a.^x
2) a/x -> a * 1./x
2) (a * x) * (b * x) -> (a * x) .* (b * x)
а иначе он выдаст ошибку внутренней матрицы!

Почему Plot не работает?

Почему Plot не работает?



0



128 / 127 / 10

Регистрация: 09.11.2010

Сообщений: 200

10.11.2010, 17:01

5

Цитата
Сообщение от amiraraya
Посмотреть сообщение

Вы конечно правы на счёт задачи «матричных» алгебраических действий. Перед знаками * и / требуется ставить точку .* и соответственно ./, так же справедливо и для операции возведения в степень .^

В функцию построения графика не входит переменная. В функцию передаётся символьная константа, там получается логарифм 6.



0



1 / 1 / 0

Регистрация: 09.11.2010

Сообщений: 23

10.11.2010, 17:30

6

Цитата
Сообщение от Sergik1
Посмотреть сообщение

Вы конечно правы на счёт задачи «матричных» алгебраических действий. Перед знаками * и / требуется ставить точку .* и соответственно ./, так же справедливо и для операции возведения в степень .^

В функцию построения графика не входит переменная. В функцию передаётся символьная константа, там получается логарифм 6.

если бы я не делал графики в Matlab GUI, и не провозился бы именно с этой проблемой, когда мне пришлось полностью все формулы для огроменного процесса переделывать, с огромным количеством вводных и тд. , а проблема была ТОЛЬКО в графиках, я бы промолчал



0



Солярис

Пользователь
Сообщения: 7
Зарегистрирован: Пт дек 28, 2012 11:44 pm

Окно PLOTS в MATLAB R2012b

Здравствуйте. Недавно установил версию R2012b. До этого пользовался седьмой версией матлаба. Сразу же возник вопрос, по-поводу окна PLOTS. При его выборе графики почему-то неактивны. Так и должно быть? Или, быть может, я в настройках что-то не так сделал. Подскажите пожалуйста.


lomt

Пользователь
Сообщения: 58
Зарегистрирован: Вт окт 30, 2012 2:56 pm

Сообщение lomt » Сб дек 29, 2012 10:01 am

с вашего позволения, немного расширю вопрос. Пользовался ли кто-то 12b версией, что там нового, и есть ли смысл переходить на неё, скажем, с 11b?


Солярис

Пользователь
Сообщения: 7
Зарегистрирован: Пт дек 28, 2012 11:44 pm

Сообщение Солярис » Сб дек 29, 2012 10:12 am

lomt писал(а):с вашего позволения, немного расширю вопрос. Пользовался ли кто-то 12b версией, что там нового, и есть ли смысл переходить на неё, скажем, с 11b?

Приветствую, как я понимаю вы уже использовали в работе 11b?Если да, то у меня вопрос к Вам. Вы когда нажимаете на окно PLOTS, у Вас не затемнены все виды графиков, случайно? Может так и должно быть? Вы можете выбирать любой из видов графиков? Они у Вас активны?


lomt

Пользователь
Сообщения: 58
Зарегистрирован: Вт окт 30, 2012 2:56 pm

Сообщение lomt » Сб дек 29, 2012 10:21 am

А что вы подразумеваете под окном PLOTS? Figure, в котором строится с помощью, к примеру, plot() графики?


Солярис

Пользователь
Сообщения: 7
Зарегистрирован: Пт дек 28, 2012 11:44 pm

Сообщение Солярис » Сб дек 29, 2012 10:42 am

lomt писал(а):А что вы подразумеваете под окном PLOTS? Figure, в котором строится с помощью, к примеру, plot() графики?

Да. Есть три основных окна в интерфейсе:HOME, PLOTS и APPS(они переключаются слева вверху). Так вот, когда я нажимаю на окно PLOTS, там можно выбирать базовые примеры графиков(фигур). Но, почему-то, все примеры затемнены(т. е. неактивны). Так и должно быть? Или что-то не так у меня?


sandy

Эксперт
Сообщения: 5601
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение sandy » Сб дек 29, 2012 8:00 pm

lomt писал(а):А что вы подразумеваете под окном PLOTS? Figure, в котором строится с помощью, к примеру, plot() графики?

Версия 2012b имеет дурацкий «резиновый» интерфейс а-ля нынешние версии Micrtosoft Office. Имеется в виду вкладка Plots этого интерфейса.

Теперь по теме вопроса. Там же слева, вероятно, внятно написано — No variable selected. Чтобы строить графики, должна существовать переменная, в которой хранятся данные, которые вы хотите визуализировать. Ее нужно выделить в окне Workspace, тогда все будет активно.

С уважением

Александр Сергиенко


Солярис

Пользователь
Сообщения: 7
Зарегистрирован: Пт дек 28, 2012 11:44 pm

Сообщение Солярис » Сб дек 29, 2012 9:35 pm

sandy писал(а):Версия 2012b имеет дурацкий «резиновый» интерфейс а-ля нынешние версии Micrtosoft Office. Имеется в виду вкладка Plots этого интерфейса.

Теперь по теме вопроса. Там же слева, вероятно, внятно написано — No variable selected. Чтобы строить графики, должна существовать переменная, в которой хранятся данные, которые вы хотите визуализировать. Ее нужно выделить в окне Workspace, тогда все будет активно.

Теперь разобрался, спасибо Вам, Александр.


lomt

Пользователь
Сообщения: 58
Зарегистрирован: Вт окт 30, 2012 2:56 pm

Сообщение lomt » Сб дек 29, 2012 9:43 pm

sandy писал(а):

lomt писал(а):А что вы подразумеваете под окном PLOTS? Figure, в котором строится с помощью, к примеру, plot() графики?

Версия 2012b имеет дурацкий «резиновый» интерфейс а-ля нынешние версии Micrtosoft Office. Имеется в виду вкладка Plots этого интерфейса.

Теперь по теме вопроса. Там же слева, вероятно, внятно написано — No variable selected. Чтобы строить графики, должна существовать переменная, в которой хранятся данные, которые вы хотите визуализировать. Ее нужно выделить в окне Workspace, тогда все будет активно.

Спасибо, Александр Борисович. А что вообще вы скажете о новой версии Матлаба, стоит переходить на неё, или она сыренькая и нет особоых улучшений?



Код, который у меня есть:

T=[0:0.1:24];
omega=((12-T)/24)*360;
alpha = [0:1:90];
latitude=35;
delta=[-23.45:5:23.45];
sind(alpha)=sind(delta).*sind(latitude)+cosd(delta).*cosd(latitude).*cosd(omega)
cosd(phi)=(sind(alpha).*sind(latitude)-cosd(delta))./(cosd(alpha).*cosd(latitude))

альфа представляет мою ось Y и представляет собой угол от 0 до 90 градусов. фи представляет мою ось х и представляет собой угол между, скажем, от -120 до +120. Общий результат должен выглядеть как половина синусоиды.

Всякий раз, когда я пытаюсь ввести эту последнюю строку, я получаю сообщение об ошибке, указывающее, что внутренние размеры матрицы должны совпадать. Поэтому я попытался использовать изменение формы в своих матрицах для тех переменных, которые я определил, чтобы они работали. Но тогда я получаю ‘??? ??? Индексы нижнего индекса должны быть либо действительными положительными целыми числами, либо логическими.

Кажется очень утомительным изменять мою матрицу каждый раз, когда я определяю новый набор переменных, чтобы использовать их в уравнении. Эти переменные используются для определения моего диапазона осей, есть ли лучший способ их размещения или автоматическая команда, которая будет гарантировать, что они будут работать каждый раз?

Я хочу построить альфа и фи в виде графика, используя что-то вроде

plot(alpha,phi) 

но не можете пройти мимо этих ошибок? я не могу просто использовать команду, которая говорит что-то вроде определения оси X [0:90], определения оси Y [-120:120] или что-то в этом роде? Я потратил слишком много времени на эту проблему и не могу найти решение. Я просто хочу построить график. Кто-нибудь, пожалуйста, помогите! Благодарю.

Спасибо

I want to do

for i = 1 : size(N, 2)
    figure(i);
    title('N = %d', i);
%other stuff

but setting the title doesn’t work. Why?

mjv's user avatar

mjv

72k14 gold badges111 silver badges156 bronze badges

asked Apr 12, 2011 at 1:33

Yebac's user avatar

Because you forgot to add sprintf

for i = 1 : size(N, 2) 
figure(i); 
title(sprintf('N = %i', i)); %# %i for integer
%other stuff
end

answered Apr 12, 2011 at 1:36

Jonas's user avatar

JonasJonas

74.5k10 gold badges137 silver badges177 bronze badges

num2str should also works.

title(['N = ',num2str(i)]);

answered Apr 12, 2011 at 3:23

who's user avatar

0

Недавно, в очередной раз проверяя домашние работы своих студентов, я загорелся желанием автоматизировать этот процесс. Задание состояло в составлении рабочей таблицы девиации магнитного компаса и построения кривой девиации.

Входными данными служили показания магнитного компаса (МК), синхронно наблюдаемые показания гирокомпаса (ГК), поправка ГК и значение магнитного склонения для района, в котором проходили измерения.

Все данные были занесены в таблицу и разделены из 10 столбцов с входными данными и 25 строк – значений входных данных для каждого из вариантов. Для удобства считывания данных в MATLAB они были записаны в виде текстового файла и импортировались в рабочее пространство с помощью функции importdata.

По методике расчетов необходимо было обработать данные с помощью нескольких эмпирических формул для заполнения рабочей таблицы девиации МК. Однако, основным и наиболее наглядным результатом работы является построение кривой девиации МК.

Для построения графика была выбрана функция plot, имеющая большое количество параметров настройки, которые позволяют получить результат в нужном виде. Был составлен код:

%Построение графика Рабочей кривой девиации
X=[0:10:360];
Y=SC;
plot(X,Y,'bo-');
grid on;
title('Рабочая кривая девиации');
xlabel('Компасный курс, circ');
ylabel('Девиация, circ');
axis auto
xlim([0,360])
set(gca, 'XTick',0:45:360)

И получен следующий график:

Разберем код построчно, рассмотрим какие параметры можно указывать для настройки отображения графиков.

X=[0:10:360];
Y=SC;

Здесь задаются входные данные для построения графика. Количество значений по оси абсцисс и по оси ординат должно совпадать. По эти данные являются векторами с 36 значениями.

plot(X,Y,'bo-');

Собственно, функция построения графика, в которую передаются данные и параметры. Помимо очевидных входных данных параметром функции является тип отображаемой линии, закодированный трехсимвольным сочетанием. В данном случае “b” – blue, цвет линии; “o” – вид маркера, которым обозначаются точки графика и “-” – тип линии, в данном случае – сплошная.

Ниже привожу список параметров для настройки отображаемой линии.

Маркер Цвет линии
c голубой
m фиолетовый
y желтый
r красный
g зеленый
b синий
w белый
k черный

Маркер Тип линии
— непрерывная
— — штриховая
: пунктирная
-. штрих-пунктирная

Маркер Тип маркера
. точка
+ знак «плюс»
* знак «звездочка»
о круг
х знак «крест»

grid on;

Команда, которой включается сетка на графике.

title('Рабочая кривая девиации');
xlabel('Компасный курс, circ');
ylabel('Девиация, circ');

Подписи для графика и соответствующих осей. Здесь “circ” кодировка символа градуса.

axis auto

Команда управления осями. В данном случае выставлен параметр “auto” – автоматическая расстановка осей. Здесь-то меня и не устроила работа MATLAB, т.к. автоматически оси не пристыковывались к крайним значениям графика, а «добавляли» лишнее пространство по оси “X”.

С помощью команды “help axis” я нашел еще несколько вариантов параметра для осей, в частности попробовал параметр “tight”, который должен был пристыковывать границы графика к крайним значениям кривой. Однако результат и этого параметра меня не удовлетворил т.к. результат выглядел следующим образом:

График выглядит «зажатым», к тому же «теряются» части кривой находящиеся между максимальными значениями.

Для получения наглядного результата пришлось настроить ось “X” отдельно с помощью следующих команд:

axis auto
xlim([0,360])

Последняя функция задает граничные значения отдельно для оси “X”, что позволило мне ограничить график максимальными значениями по данной оси.

И последняя команда:

set(gca, 'XTick',0:45:360)

Позволила настроить подписи и шаг для оси “X”. Функция “set” является достаточно общей, ее работа зависит от передаваемых параметров. В данном случае “gca” – означает, что параметры будут устанавливаться для сетки графика, “ XTick ” – означает, что будет управляться подпись оси “X”, а параметр “0:45:360” – задает минимальное значение, шаг и максимальное значение.

В результате получился достаточно наглядный график кривой девиации, по сравнению формы которого с формой графика полученного студентом можно было быстро оценить правильность выполнения работы. Так же, благодаря загрузке данных из файла по всем вариантам, с дальнейшим выбором последнего, изменять приходилось только номер варианта, чтобы получить результат.

Надеюсь, что эта статья будет полезной не только для начинающих MATLAB, но и для опытных пользователей.

В окончании хотел бы отметить полезность команды “help” – она не только позволяет получить необходимую информацию по функции или команде из командной строки, но и сделать это значительно быстрее, чем через поиск в справке MATLAB.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Sedo fss ru ошибка сервера код состояния 500
  • Serious sam the second encounter ошибка при запуске