24小时热门版块排行榜    

Znn3bq.jpeg
查看: 292  |  回复: 2
当前主题已经存档。

ning903

木虫 (职业作家)

笨笨家族小海豚

[交流] 【求助】懂MATLAB的前辈

我是一名的学生,一个MATLAB新手,刚学习2个礼拜左右吧,呵呵。这几天碰到了一个问
题,考虑了好久,还是没有解决,所以特向您请教。
函数文件ff1.m 程序如下:
function ff1=ff1(x)
if x<0
    y=-1
elseif x==0
    y=0
elseif x>0
    y=1
end
在命令窗口调用该程序:ff1(4)
则运行结果为:y=1
但是将程序中的分支语句后面加上“;”即改为如下形式:
function ff1=ff1(x)
if x<0
    y=-1;
elseif x==0
    y=0;
elseif x>0
    y=1;
end
在命令窗口调用该程序:ff1(4)
则没有任何运行结果。
Question1:我的理解是:加上“;”后,其实是执行了语句,但屏幕不显示运算结果“y=1”。
不知我的理解对否?若不对,麻烦您解答
但是我尝试了另外一个程序,结果就出乎我的意料,我不知该如何解释了。
函数文件ff2.m 程序如下:
function ff2=ff2(x)
if x<0
    ff2=x^2;
elseif x>=0&x<2
    ff2=2-3*x;
elseif x>=2&x<4
    ff2=sin(2*x);
else
    ff2=exp(2*x);
end
在命令窗口调用该程序:ff2(3)
则运行结果为:ans =-0.2794
Question2: 为何此处就可以显示运算结果?而在ff1.m中就不行?
Question3: 为何运算结果赋值给了ans,而不是ff2?
将程序中的分支语句后面的“;”去掉,即改为如下形式:
function ff2=ff2(x)
if x<0
    ff2=x^2
elseif x>=0&x<2
    ff2=2-3*x
elseif x>=2&x<4
    ff2=sin(2*x)
else
    ff2=exp(2*x)
end
在命令窗口调用该程序:ff2(3)
则运行结果为:ff2 = -0.2794
ans =-0.2794
我的疑问是:为何运算结果同时赋值给了ff2和ans?而ff1.m中就仅仅赋值给了y??
我想了好久,始终没想明白,麻烦您解答,谢谢!!

[ Last edited by sunxiao on 2009-3-9 at 08:49 ]
回复此楼

» 猜你喜欢

小海豚来到小木虫,各位达达多多关照!!! 感触我的温度
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hitzhang

木虫 (正式写手)

★ ★
csfn(金币+2,VIP+0):many thanks,今后多来逛逛,交流经验,共享资源:-)
>>ff2(3)的运行结果没有付值给任何变量,matlab只好把他放在默认的输出变量里面即ans,但是>>a=fft(3)是把运算结果放在变量a里面。至于其他的乱七八糟的输出就是程序里面的;问题,如果没有那么相关语句的运行结果会打印在命令窗口里如果你需要的话。
2楼2008-11-20 14:02:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dnp

荣誉版主 (知名作家)

小木虫浪子

优秀版主

★ ★ ★ ★ ★ ★
csfn(金币+6,VIP+0):many thanks,新的计算区建立,今后多来逛逛,交流经验,共享资源:-)
首先解释一下‘;’在matlab中的作用,就是控制一个m文件中的一段命令在运行之后得到的结果是否要在命令窗口输出,如果一段代码运行结果要在命令窗口输出,则该语句后面就不用加‘;’,正如您上面的运行中显示的,这样就可以回答您的第一和第二个问题。

而对于输出结果为什么是那样,在matlab中是这样的:
当运行一个m文件,而且是带参数输入的,如果m文件中的某一段代码语句后面没有‘;’,则相当于在命令窗口中输入了这段代码,正如提问程序中所言的,有‘;’的,则相当于在命令窗口中输入了: ff2=sin(2*3)(最后一个m文件),结果自然会在命令窗口中显示ff2值,同时,这又是在一个函数即m文件中,因此输入那个命令相当于运行了该程序,matlab会给出整个函数的运行结果。如果m文件命名如您那样的形式,同时在命令窗口中输入时没有按照function后面的形式输入,matlab默认运行结果是在ans中,如果按照function后面的形式全部输入,即以ff2=ff2(3)形式输入,则会将输出结果赋值给ff2(在此建议最好不要将变量名与函数名相同)。因此,就会出现您那样不同的结果。而如果以ff2=ff2(x);的形式在命令窗口中输入,则在命令窗口中没有任何结果显示(除非在m文件中有代码后面没有输入‘;’),但在workspace中有该变量:ff2出现,双击打开就是该函数的运行结果。

看点书,多试试就知道了,这个是最基本的概念和规则。
What would Jesus do?
3楼2008-11-20 23:36:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ning903 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 评审有感 +14 popular289 2026-05-18 23/1150 2026-05-20 17:39 by lincyb
[基金申请] 提交了我也来说说感想 +6 fummck 2026-05-20 6/300 2026-05-20 17:29 by 姜太公烤鱼
[基金申请] 面上本子正文33页,违规吗?会被低分嘛? +10 1234567wang 2026-05-17 12/600 2026-05-20 16:48 by metal_D
[论文投稿] Sci. Bull. 悲剧经验 +6 jyang1999 2026-05-16 7/350 2026-05-20 16:39 by feng6531
[基金申请] 今年审到国自然15份,谈谈感受 +19 国自然国社科中 2026-05-17 20/1000 2026-05-20 14:14 by 仲夏夜的星星
[有机交流] 反应很差,大量原料没有反应 5+3 Mr.Zot 2026-05-19 6/300 2026-05-20 10:36 by xtlilibin
[基金申请] 河北省自然科学基金 +3 Peterchao 2026-05-18 3/150 2026-05-20 08:57 by 霸_霸
[教师之家] 上海大学实验技术岗位非升即走 +12 嘻嘻哈哈乐呵呵 2026-05-15 13/650 2026-05-20 08:34 by xli1984
[文学芳草园] 献血感触 +6 呀呀好傻 2026-05-19 11/550 2026-05-19 22:26 by 而立得乐
[考博] 云南大学材料与能源学院解琳课题组钙钛矿博士招生 +3 光伏爱好者 2026-05-17 5/250 2026-05-19 19:13 by 光伏爱好者
[基金申请] 2026山东省优青 +3 luckinging 2026-05-14 4/200 2026-05-19 16:15 by 52wls
[考博] 26/27申博自荐-锂/钠电池方向 5+3 狗头军师. 2026-05-15 4/200 2026-05-19 09:10 by moonboat
[基金申请] 同样的基金本子,换个专家直接从C变A! (金币-10) +3 国自然国社科中 2026-05-19 3/150 2026-05-19 08:50 by Equinoxhua
[基金申请] 别被青基扩招骗了!26年科研内卷才刚刚开始 +3 国自然国社科中 2026-05-14 4/200 2026-05-19 08:48 by archvillain
[基金申请] 国自然上会要求 +5 无名者登山 2026-05-18 9/450 2026-05-18 17:50 by BlakeReary
[硕博家园] 我在等一个没有答案的答案 +3 Love_MH 2026-05-17 3/150 2026-05-18 02:22 by 竹林孤影
[文学芳草园] 半夜喝咖啡 +3 myrtle 2026-05-15 5/250 2026-05-18 01:03 by 小沈2018
[考博] 光量子物理方向 博士招生 1人(2026.09) +3 sandyworld 2026-05-15 4/200 2026-05-17 14:38 by sandyworld
[有机交流] 求助2,4-二氯-5-嘧啶甲醛的合成方法 20+3 光吃不拉 2026-05-14 6/300 2026-05-16 19:46 by Equinoxhua
[考博] 26应届毕业生考博求助 +3 wo一定上岸 2026-05-13 3/150 2026-05-14 21:47 by 明海天涯
信息提示
请填处理意见