如早颤坦果你的主程序是普通的m程序,不是function,而子程序是function,这两个程序是不能写在一起的
举个例子:
%主程序
a=1
b=2
c=addfun(a,b)
% 子程序
function c=addfun(a,b)
c=a+b;
return
以上是不能写在一个m文件里的。
但是
function mainfun()
clc
a=1
b=2
c=addfun(a,b)
% 子程序
function c=addfun(a,b)
c=a+b
return
这样子时可以的,可以直接运行。不过当程序运行结束后,陆桐你将无法查看主程序和子程序的变量的值
Matlab两个颤慧一维数组合并为一个茄拦答数衡拿组,可以这样 *** 作:
>a=[1,2,3,4]'%将行向量转置成列向量
>b=[4,3,2,1]'%将行向量转置成列向量
>c=[a,b]
function testglobal u0
tspan= (0:0.01:25).'
u0_list = logspace(-1,2,30).'
bw = zeros(size(u0_list))
bw1 = bw
options = odeset('RelTol',1e-13,'AbsTol',1e-13)
pause_en = 0
for i_u0 = 1:length(u0_list)
u0 = u0_list(i_u0)
xinit= [u0,0]
xinit1 = [0,sqrt(u0^2+1)-1]
find_3dB = 0
[t,x]= ode45(@odefun,tspan,xinit,options)
[t1,x1] = ode45(@odefun1,tspan,xinit1,options)
u_div_u0 = (x(:,1)/u0).^2
u_div_u01= (x1(:,1)/u0).^2
fprintf('u0=%6.3f\n',u0)
plot(t,u_div_u0,t1,u_div_u01)
if pause_en
pause
else
pause(0.5)
end
for i_t=1:length(t)-1
if u_div_u0(i_t)==0.5 ||...
(u_div_u0(i_t)-0.5)*(u_div_u0(i_t+1)-0.5)<0
find_3dB = 1
break
end
end
if find_3dB
bw(i_u0) = 2*t(i_t)
else
fprintf('error!\n')
end
for i_t1=1:length(t1)-1
if u_div_u01(i_t1)==0.5 ||...
(u_div_u01(i_t1)-0.5)*(u_div_u01(i_t1+1)-0.5)<0
find_3dB = 1
break
end
end
if find_3dB
bw1(i_u0) = 2*t1(i_t1)
else
fprintf('error!\n')
end
end
loglog(u0_list,bw,'-*b',u0_list,bw1,'-*r')
axis([0.09,110,1,50])
set(gca,'xtick',[0.1,0.5,1,5,10,50,100])
set(gca,'ytick',[1,2,5,10,20,50])
end
function y=odefun(t,x)
global u0
y= zeros(size(x))
delta= 2*(sqrt(u0^2+1)-1)/u0^2
y(1) = x(2)
y(2) = -(delta-1/sqrt(x(1)^2+1))*x(1)
end
function y=odefun1(t,x)
global u0
y= zeros(size(x))
y(1) = x(2)
y(2) = (1-sqrt((u0^2+1)/(x(1)^2+1)))*x(1)
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)