1

Я написал функцию, которая отображает функцию 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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .