sun1993 发表于 2007-10-13 00:02

怎样把几个函数放在同一个M文件中?

在浏览帖子时,知道了MATLAB中可以把几个函数放到同一个M文件中,
可是不知道到底该怎么操作,请教大家了,谢谢

花如月 发表于 2007-10-13 09:17

function fun
........
function fun1
.........
function fun2
........
照此写下去就可以了。这个问题一般书上都有,版面以前也有过不少谈论。

lxq 发表于 2007-10-13 16:28

回复 #2 花如月 的帖子

想请问一下花版主
如果一个主函数需要调用多个其他函数
能否把这些函数写在一个M文件中?

花如月 发表于 2007-10-13 16:32

回复 #3 lxq 的帖子

前辈好客气,我觉得可以。为了方便我把本版一个xls读写的例子做了修改。不知道是不是你想要的调用方式?function xlswt
%%%%%%%%开始读取原始数据
clear,clc;
filename='d:\lb025.xls';%滤波后数据存储的文件名,不要更改.xls后缀
filename2='d:\025.xls';%将要滤波的文件路径\\不要更改
sheet='4';%读取excel文档名称为4的表单
t=xlsread(filename2,sheet,'a10:a56');%读取a10到a56的数据,可以根据实际情况更改以满足实际需要
y1=xlsread(filename2,sheet,'f10:f56');
t1=0.05:0.05:23.5;%路基宽度根据实际情况更改
t1=t1';
y11=resample(y1,10,1);%按10:1重新采样使曲线更平滑
a1=denoise(y11,5,'db8');%a=denoise(s,lev,INH) s为待滤波信号,lev是分解层数,一般取3~7,INH为滤波小波基可采用db2~db10,sym2~sym8,coif1~coif5,dmey等等
xlswrite(filename,t1,'a1:a470');
xlswrite(filename,a1,'b1:b470');
figure(1);
subplot(3,1,1);plot(t,y1);
title('原始数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
subplot(3,1,2);plot(t1,y11);
title('重采样数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
subplot(3,1,3);plot(t1,a1);
title('滤波数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
y2=xlsread(filename2,sheet,'j10:j56');
y21=resample(y2,10,1);
a2=denoise(y21,5,'db8');
xlswrite(filename,a2,'c1:c470');
figure(2);
subplot(3,1,1);plot(t,y2);
title('原始数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
subplot(3,1,2);plot(t1,y21);
title('重采样数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
subplot(3,1,3);plot(t1,a2);
title('滤波数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
y3=xlsread(filename2,sheet,'n10:n56');
y31=resample(y3,10,1);
a3=denoise(y31,5,'dmey');
xlswrite(filename,a3,'d1:d470');
figure(3);
subplot(3,1,1);plot(t,y3);
title('原始数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
subplot(3,1,2);plot(t1,y31);
title('重采样数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
subplot(3,1,3);plot(t1,a3);
title('滤波数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
%%%提取滤波后原始观测位置对应的数据
lbt=xlsread(filename,'sheet1','a1:a470');
lbt1=lbt(10:10:end);
lby1=xlsread(filename,'sheet1','b1:b470');
lby11=lby1(10:10:end);
lby2=xlsread(filename,'sheet1','c1:c470');
lby21=lby2(10:10:end);
lby3=xlsread(filename,'sheet1','d1:d470');
lby31=lby3(10:10:end);
xlswrite(filename,lbt1,'f1:f47');
xlswrite(filename,lby11,'g1:g47');
xlswrite(filename,lby21,'h1:h47');
xlswrite(filename,lby31,'i1:i47');
%---------denoise.m-------实现小波去噪
function a=denoise(s,lev,INH)
=wavedec(s,lev,INH);
a=wrcoef('a',c,l,INH,lev);
%----需要的子函数还可以继续写----这样实际上是把主函数和字函数写到一个m文件里,存为xlswt.m。调试的时候个人觉得方便些,用run或者在命令行直接输入xlswt
我用的一般就下边2种方式:
(1)把主程序和子程序都写到一个m文件里(和汇编语言有些类似),适合文件不太长的情形。上边的就是一个例子
(2)主程序写的一个文件里,被调用的子函数写到一起。
不知道其他版友都是怎么做的?欢迎分享啊
原始帖子位置:http://forum.vibunion.com/thread-52855-1-1.html(包含025.xls文件)

[ 本帖最后由 花如月 于 2007-10-13 16:44 编辑 ]

lxq 发表于 2007-10-13 16:42

回复 #4 花如月 的帖子

谢谢了
花版主的MATLAB学识着实让人钦佩

花如月 发表于 2007-10-13 16:49

回复 #5 lxq 的帖子

:loveliness:客气了,要学习的地方还很多呢。

jimin 发表于 2007-10-13 17:09

原帖由 lxq 于 2007-10-13 16:42 发表 http://www.chinavib.com/forum/images/common/back.gif
谢谢了
花版主的MATLAB学识着实让人钦佩
花版主确实不错 写的诗词也很好
很早的时候 偶就注意了
第一次看到花如月这个名字还以为是个mm
:loveliness:

花如月 发表于 2007-10-13 17:15

回复 #7 jimin 的帖子

多谢前辈赞誉:handshake ,知道你比较忙。空了的时候多回来看看,看你贡献给神经网络初学者的资料。写的真是很棒,受益匪浅!

sun1993 发表于 2007-10-13 18:33

谢谢,花版主和lxq两位高手的讨论,让我收获颇丰

VibrationMaster 发表于 2007-10-14 16:20

几个函数写在一个文件中,外界只能调用第一个函数。
如果真是想调用非第一个函数,那么必须通过第一个函数来管理。这比较麻烦

[ 本帖最后由 VibrationMaster 于 2007-10-14 16:22 编辑 ]

花如月 发表于 2007-10-14 16:32

回复 #11 VibrationMaster 的帖子

确实如此,这种方法也只是对于比较小的程序。把主程序作为第一个函数,其他的被调用的函数续写到后边。看起来是一个主程序和子程序都写到了一个m文件里了,貌似方便了一点点:loveliness:

eight 发表于 2007-10-14 17:11

以 m 文件命名的函数:相当于 main 函数

写在同一个 m 文件中:第一个函数相当于公有函数,其他函数相当于私有函数

写在不同 m 文件中:全部都相当于公有函数

gaoshsh 发表于 2007-10-14 20:46

高手讨论就是不一样,长见识了!

liushuiwuxin 发表于 2009-3-26 11:16

受益匪浅。太感谢啦!!

mervynallstar 发表于 2009-5-19 16:13

初来咋到

好幸运找到了这个论坛,以后请大家多多指教
页: [1] 2
查看完整版本: 怎样把几个函数放在同一个M文件中?