2015-06-07 4 views
0

Когда проблема граничного значения и граничные условия записываются в разные файлы и вызывается в функции bvp4c, кажется, что переменные, названные в этих внешних файлах, не распознаются.Как глобальные переменные могут использоваться в bvp4c в Matlab?

Чтобы уточнить, позвольте привести в качестве примера проблему, с которой я сейчас работаю. Основной файл

clearvars 
% Creating a grid of x values for MATLAB to solve on and an initial guess for y(x) and y'(x) 
solinit=bvpinit(linspace(0,1,100),[1 0]); % solinit = bvpinit(x,yinit) forms the initial guess for a boundary value problem solver. 
solution=bvp4c(@bvp,@bc,solinit); 
plot(solution.x,solution.y); 

краевая probem (bvp.m) является

% Diff*y''+2*i*Epsilon*y=0 
% Diff*y2'+2*i*Epsilon*y1=0, y2=y1' 
% y1'=      y2 
% y2'=-2*i*Epsilon/Diff*y1 
function yprime=bvp(t,y) 
% Treating y1,y2 as components of y, [y1,y2], yprime as their derivative, [y1',y2'] 
yprime=[y(2);-2*i*Epsilon/Diff*y(1)]; 

и граничные условия (bc.m) задаются

% Boundary conditions 
function res=bc(y0,y1) 
% Return the residue 
res=[-Ratio*y0(2)-y1(1);Ratio*y1(2)-y0(1)]; % The vectors y0 and y1 are the solutions at x=0 and x=1 

При замене переменные Diff, Epsilon и Ratio на 1, 3 и 100 соответственно, есть хорошее решение, данное на графике.

При написании этого с переменными, даже при добавлении

global Diff Epsilon Ratio 

к главному файлу или ко всем файлам, я получаю ошибки, такие как

Undefined функции или переменной «Эпсилон ».

Предпочтительным способом обработки переменных было бы определить их один раз в основном файле. Есть ли способ сделать это?

+1

«При замене переменных» «BC» и? ['bvp4c'] (http://www.mathworks.com/help/matlab/ref/bvp4c.html) - это численный решатель. Все параметры должны иметь определение для работы решателя. Он читается так, как будто вы используете ['global'] (http://www.mathworks.com/help/matlab/ref/global.html?refresh=true) правильно; хотя вы можете взглянуть на [более элегантный способ] (http://www.mathworks.com/help/matlab/math/parameterizing-functions.html) совместного использования данных между функциями. – TroyHaskin

ответ

0

В дополнение к основной функции, эта команда должна быть добавлена ​​в «БВП» функций слишком

глобальное соотношение Diff Эпсилон

Смежные вопросы