#matlab #loops
#matlab #циклы
Вопрос:
Я создал файл funnction и определил функцию peicewise внутри него, используя условные выражения и цикл for . Я попытался вызвать функцию в отдельном m.файле, но переменные ‘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) amp;amp; (t(i) <= 10);
v(i) = 11.*(t(i).^2) - (5.*t(i));
elseif (t(i) >= 10) amp;amp; (t(i) <= 20);
v(i) = 1100 - 5.*t(i);
elseif (t(i) >= 20) amp;amp; (t(i) <= 30);
v(i) = 50.*t(i) 2*((t(i)-20).^2.5);
elseif (t(i) >= 30) amp;amp; (t(i) <= 100);
v(i) = 1520.*exp(-0.1.*(t(i)-30));
elseif (t(i) >= -100) amp;amp; (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)
Комментарии:
1. Посмотрите на сценарии против Функции . Вы должны вызвать свою функцию
[t, v] = VPieceWise(t_start, t_end)
следующим образом. Простой вызовVPieceWise(t_start, t_end)
приводит к помещению содержимого первого возвращаемого значения (t
в вашем случае) в «стандартное возвращаемое значение» рабочейans
области.2. Представьте, какой беспорядок вы получите, если функция M-file определит имя переменных, которые вы получаете при вызове функции. Что, если два M-файла, которые вам нужны, создадут одну и ту же переменную, перезаписывая результат друг друга? Что делать, если вам нужно дважды вызвать одну функцию с разными входными данными и объединить результаты? Безусловно, имеет смысл, чтобы переменные внутри функции были локальными переменными, а вызывающая сторона сама решала, какой переменной присвоить вывод функции.
Ответ №1:
Поскольку ваша функция имеет два выхода, вы также должны назначать их при вызове функции. Если вы этого не сделаете, в переменную будет помещен только первый вывод 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)