Я создал файл функций и определил внутри него поэлементную функцию, используя условные операторы и цикл for. Я попытался вызвать функцию в отдельном m.file, но переменные «t» и «v» не отображаются в рабочей области, а просто выводят вектор со значениями t, называемыми «ans.
Я попытался поместить точный код (без определения функции) в обычный файл m, и он отлично работал, показывая обе переменные t и v
#function file
function [t, v] = VPieceWise(t_start, t_end);
t = t_start:0.01:t_end;
for i = 1:length(t);
if (t(i) >= 0) && (t(i) <= 10);
v(i) = 11.*(t(i).^2) - (5.*t(i));
elseif (t(i) >= 10) && (t(i) <= 20);
v(i) = 1100 - 5.*t(i);
elseif (t(i) >= 20) && (t(i) <= 30);
v(i) = 50.*t(i) + 2*((t(i)-20).^2.5);
elseif (t(i) >= 30) && (t(i) <= 100);
v(i) = 1520.*exp(-0.1.*(t(i)-30));
elseif (t(i) >= -100) && (t(i) <= 0);
v(i) = 0;
end
end
end
#m file
clear all; clc; close all
t_start = input('enter the start time');
t_end = input('enter the end time');
VPieceWise(t_start,t_end)
plot(t,v)
Представьте себе беспорядок, который вы получили бы, если бы М-файл функции определял имена переменных, которые вы получаете при вызове функции. Что, если два нужных вам M-файла создадут одну и ту же переменную, перезаписывая результат друг друга? Что делать, если вам нужно дважды вызвать одну функцию с разными входными данными и объединить результаты? Конечно, имеет смысл, чтобы переменные внутри функции были локальными переменными, а вызывающая сторона могла сама решить, какой переменной присвоить результат функции.
Так как ваша функция имеет два выхода, вы также должны назначить их при вызове функции. Если вы этого не сделаете, в переменную ans
будет помещен только первый вывод.
Итак, вызовите свою функцию следующим образом:
clear all; clc; close all
t_start = input('enter the start time');
t_end = input('enter the end time');
[t,v] = VPieceWise(t_start,t_end);
plot(t,v)
Посмотрите на Скрипты против функций. Вы должны вызывать свою функцию как
[t, v] = VPieceWise(t_start, t_end)
. Простой вызовVPieceWise(t_start, t_end)
приводит к тому, что содержимое первого возвращаемого значения (в вашем случае этоt
) помещается в «стандартное возвращаемое значение» рабочей областиans
.