chunshui2003 发表于 2013-5-9 16:06

如何在function函数中调用其他.m文件

.m文件包含的内容为大量的已知数值的基本参数,命名为basic_para.m。因为这些参数需要在多个程序中使用(包括function函数),如果修改其中之一,在其他的文件中也要相应做出修改。这样做一来繁琐,二来可能因疏忽导致某个文件中的参数没有修改从而造成计算结果的错误。
在非函数命名文件中可以调用basic_para(直接输入文件名即可),但尝试在function调用时却没有任何结果,只好手动的复制粘贴。
想请教一下大家,像这样的情况如何在命名的function函数文件中调用上述的basic_para.m文件。

ChaChing 发表于 2013-5-9 22:32

...但尝试在function调用时却没有任何结果...
不应该会如此!?
与在非函数文件中都同样直接输入文件名调用

chunshui2003 发表于 2013-5-10 09:02

ChaChing 发表于 2013-5-9 22:32 static/image/common/back.gif
不应该会如此!?
与在非函数文件中都同样直接输入文件名调用

ChaChing前辈,你好!我所做的是求解一个二阶常微分方程组,用ode45,具体的程序如下:
基本参数,命名为basic_para.m:


%------------------------- 系统基本参数 -------------------------%

m = 300*10^3;               
Ke = 0.5*10^10;            
De = 0.5*10^5;            
g = 9.81;                  

b = 0.2;
n = 2.5;
tau0 = 0.5;               
n0 = 0.079;
m0 = -0.25;               
xi = 1.5;                  
R = 2.925;                  
L = 0.43;                  
v = 3.537;                  
c = 2.5*10^-3;            
gamma = 1.3*10^-3;         
delta_P = 0.5*10^6;




系统运动微分方程,命名为equ_seal


function uu = equ_seal(T,u)

global w
basic_para;

Ra = 2*v*c/gamma;
Rv = R*c*w/gamma;
lambda = n0*Ra.^m0 * (1 + (Rv/Ra).^2).^((1+m0)/2);
sigma = lambda*L/c;
B = 2 - ((Rv/Ra).^2 - m0) / ((Rv/Ra).^2 + 1);
E = (1+xi)/(1+xi+2*sigma);
mu0 = 2*sigma^2/(1+xi+2*sigma) * E*(1-m0);
mu1 = 2*sigma^2/(1+xi+2*sigma) * (E/sigma + B/2 * (1/6 + E));
mu2 = sigma/(1+xi+2*sigma) * (1/6 + E);
mu3 = pi*R*delta_P/lambda;
T = L/v;

K0 = mu3*mu0;
D0 = mu1 * mu3 * T;



%-------------------------- 变换后涉及到的阻尼和刚度表达式 -----------------------%

e = sqrt(u(1)^2 + u(3)^2);            

tauf = tau0 * (1-e).^b;
mf = mu2*mu3*T^2;                     
D = D0 * (1-e^2).^(-n);               
K = K0 * (1-e^2).^(-n);               

M = m + mf;
K1 = (Ke + K - tauf^2 * w^2 * mf) / (M*w^2);
K2 = tauf * D/(M*w);
D1 = (De + D)/(M*w);
D2 = 2*tauf*mf/M;               
G = -m*g / (M*c*w^2);

%-------------------------- 系统运动微分方程 -----------------------%

uu = zeros(4,1);
uu(1) = u(2);
uu(2) = -D1*u(2) - D2*u(4) - K1*u(1) - K2*u(3);
uu(3) = u(4);
uu(4) =D2*u(2) - D1*u(4) + K2*u(1) - K1*u(3) + G;         



最后求解系统运动微分方程




% 求解系统运动微分方程

clc
clear all
global w
tic

w_sub = 300:100:500;

y0 = ;

for i = 1:length(w_sub)
    w = w_sub(i);
    period = 2*pi;
    step = period/200;
    tsapn = 0:step:1200*period;

    disp(w)
    = ode45('equ_seal',tsapn,y0);

end

toc





                系统会提示
“??? Error using ==> gamma
Not enough input arguments.

Error in ==> equ_seal at 30
Ra = 2*v*c/gamma;”

但比较奇怪的是为什么直到gamma出现才显示错误提示,basic_para中的第一个参数应该是m才对。如果将basic_para中的每一个参数都输入到equ_seal函数中则不会出现任何问题。请教一下ChaChing这是什么情况造成的。









chybeyond 发表于 2013-5-10 09:32

本帖最后由 chybeyond 于 2013-5-10 09:48 编辑

gamma这个变量你换一下,与matlab自带的函数冲突

chunshui2003 发表于 2013-5-11 18:34

chybeyond 发表于 2013-5-10 09:32 static/image/common/back.gif
gamma这个变量你换一下,与matlab自带的函数冲突

非常感谢你的帮助!确实如你所说,将gamma更改为其他名称后就可以了。以前不知道gamma还是matlab的自带函数,这回学习到了新的东西。
页: [1]
查看完整版本: 如何在function函数中调用其他.m文件