Матлаб, строящий одну фигуру из функции

383
alex_mike

Я написал функцию, которая отображает функцию y (t), используя 4 входных аргумента.

function plot_me_n1(A,B,m1,m2)  t = linspace(0,10,10/0.01); y=A*exp(-m1*t) - B*exp(-m2*t); plot(t,y,'color',rand(1,4)); title('equation', 'fontsize', 10); ylabel('y(t)'); xlabel('t'); end 

Сейчас я создаю еще одну функцию, которая передает функции plot_me_n1 функцию нескольких переменных для создания нескольких графиков.

figure  hold all A=[-8,8,-8]; B=[9,-9,-9]; m1=-3; m2=-4; arrayfun(@(a,b) plot_me_n1(a,b,m1,m2),A, B); hold off 

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

На самом деле скрипт работает нормально, просто графики пересекаются друг с другом.

1

1 ответ на вопрос

1
JockeR

Команда holdдействует по осям фигуры. Ваш код создает фигуру, но он не содержит осей при вызове hold.

Исправьте это, поместив holdсразу после вашей команды заговора, чтобы сохранить предыдущие графики на том же рисунке.

... plot(t,y,'color',rand(1,4)); hold on ... 

Кроме того, hold allбудет удален в будущих выпусках Matlab, используйте hold onвместо этого.

Похожие вопросы