Существует несколько подходов, передающих константы в функции MATLAB
Определение переменных как global
- простое решение.
Использование global
делает переменную "видимой" для всех функций и сценариев.Недостатком использования global
является то, что он не расширяемый и предотвращает повторное использование кода.
С точки зрения академической разработки программного обеспечения вам вообще не следует использовать глобальные переменные.Предполагая, что ваш код используется для решения конкретной проблемы и не будет расширяться или использоваться повторно, использование global
разрешено.
Использование global
:
Объявить константы как глобальные перед инициализацией:
global K g
K=0.5; % minor loss coefficient (square edged)
g=9.8; % gravity in m/s2
Объявить переменные как глобальные в любой функции, которая их использует:
function v1=velocity1(f)
global K g
v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
end
Использование вложенных функций:
Вместо использования global
вы можете использовать подход «вложенные функции» - внутренняя функция может обращаться к переменным внешней функции.
Определить ваш основной скрипт как функциюи velocity1
как внутренняя функция:
function main()
%main is the outer function, and velocity1 is an inner function
K=0.5; % minor loss coefficient (square edged)
g=9.8; % gravity in m/s2
h=1;L=3;D=4;
f1= 2; %(value obtained from external function)
v1=velocity1(f1);
%Inner function:
function v1=velocity1(f)
v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
end
end
Передача структуры параметров в функцию:
Общее решение - MATLAB передает структуру с постоянными параметрами всем функциям, которыеиспользует их:
param.K=0.5; % minor loss coefficient (square edged)
param.g=9.8; % gravity in m/s2
param.h=1;param.L=3;param.D=4;
f1= 2; %(value obtained from external function)
v1=velocity1(f1, param);
function v1=velocity1(f, par)
K = par.K;
g = par.g;
h=par.h;L=par.L;D=par.D;
v1= sqrt((2*g*h)/(1+(f*(L./D))+K));
end
Существуют и другие подходы, но я не могу перечислить их все ...