Как определить функцию peicewise в файле функций — Matlab

#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)