matlab子函数中if语句不能运行
endif -> end
试试
MATLAB中我们常常用到条件判断语句结构,通过实例介绍这个结构的用法:
1、if.....end结构,运行下面的句子,此条件语句是判断5是否大于3,如果大于3,就将1赋值给;
2、if....else...end 结构,我们以如下内容进行判断:
运行以上语句,结果如下a1=1,a2=1,判断a1是否大于a2,显然不大于,然后就执行else语句,给a赋值为2;
3、if..elseif...else...end 结构
我们以如下语句为例,进行此条件结构的示例
运行以上语句,结果如下:
a1=a2=1,判断a1>a2?不满足,执行elseif语句,a1<a2,不满足,执行else语句,a=3
MATLAB IF 条件语句用法以及实例如下:
1、if语句是一种选择判断语句,可以和for语句结合使用,也可以单独使用,这里创建了3个变量,作出了一个简单判断如果a小于b,b等于a,需要注意的是if语句后面要有end语句结束,如下图所示:
2、运行脚本之后,在命令行窗口可以看到b已经等于a了,如下图所示:
3、if嵌套语句,这里作出的判断是如果a小于b,b等于a,如果继续b还大于c,b等于c,如下图所示:
4、运行脚本,在命令行窗口可以看到b等于a,这里是因为b变量只满足第一个条件,如下图所示:
5、if语句中的else语句,else是否则的意思,这里作出的判断是如果a小于b,b等于a,如果满足a小于b条件下,b大于c,b就等于c,否则b=c-a,如下图所示:
6、运行脚本,在命令行可以看出结果b=c-a,只满足第一个条件,第二个条件不满足进去else语句里面去了,如下图所示:
主要问题:
你在主程序中定义了全局变量
global M m ave
要想在函数中使用这几个全局变量,需要在函数中也用同样的语句进行声明才行,否则在函数中出现的标识符会被理解为局部变量或函数的名字。
另外,主程序中的alpha和eta也不会自己跑到函数中去,也需要声明成全局变量,或者把定义移到函数中去。
其实,你所定义的几个全局变量(以及alpha和eta)在主程序中并没有其他用处,这样的话,不如把这些变量直接在函数中作为局部变量来定义和使用,例如:
function sigma=julei(A)
M=max(A);
m=min(A);
ave=mean(A);
eta(1,:)=M./sum(M);
eta(2,:)=ave./sum(ave);
eta(3,:)=m./sum(m);
sigma(3,3)=0;
alpha=0;
for i=1:size(A,1)
for j=1:size(A,2)
if A(i,j)>=ave(j)
sigma(i,1)=sigma(i,1)+(A(i,j)-ave(j))/((1+alpha)*M(j)-ave(j))*eta(i,j);
sigma(i,2)=sigma(i,2)+((1+alpha)*M(j)-A(i,j))/((1+alpha)*M(j)-ave(j))*eta(i,j);
else
sigma(i,2)=sigma(i,2)+(A(i,j)-(1-alpha)*m(j))/(ave(j)-(1-alpha)*m(j))*eta(i,j);
sigma(i,3)=sigma(i,3)+((ave(j)-A(i,j))/(ave(j)-(1-alpha)*m(j)))*eta(i,j);
end
end
end
这样,主程序就很简单了:
A=[80,20,100;40,30,30;10,90,60];
S=julei(A)
输出:
S =
0.6667 0 0.3333
0 0.3685 0.6315
0.3333 0.4500 0.2167
A(i,j)>=ave(j) 想表达什么意思?
julei(A)是想干啥?没见过这种表达的。
if A(i,j)>=ave(j)
本身就表示的不对
新人求助matlab安装包做毕设要用
利用 MATLAB,可以从文件、其他应用程序、数据库以及外部设备访问数据。您可以从各种常用 文件格式(如 Microsoft Excel、文本或二进制文件、图像、语音和视频文件)以及诸如 netCDF 和 HDF 等科学文件中读取数据。借助文件 I\/O 函数,可以处理任意格式的数据文件。2、分析数据 利用 MATLAB,可以对数据进行...
捕鱼有一个版本是打红色乌龟然后爆全屏的是什么版本
好像叫恩芳海啸来袭。有金鲨有乌龟阵的。
彘是盐酸: 这个函数是单值的,应该设一个循环,多次调用这个函数,for i=-3:5 f(i) end
无为县13835121061: matlab中第二个elseif语句为什么不执行,求大神指教 - ?
彘是盐酸: 程序修改为: x4=linspace(103.104,220,10); len=length(x4); for i=1:len if x4(i)>=103.104&x4(i)<149.266; y4(i)=-0.0009*(x4(i)-103.104).^2-0.2886*(x4(i)-103.104)+50; elseif x4(i)>=149.266&x4(i)<197.62; y4(i)=0.0017*(x4(i)-149.266).^2-0.2532*(x4(i)-...
无为县13835121061: matlab的if没有执行问题 - ?
彘是盐酸: 本身你这个程序写得就不好,我估计你想实现的是下面的代码 qim=0; qie=(0:10)/10; t=0.5*(qim+qie==0.4); % t=0.5*(abs(qim+qie-0.4)plot(qie,t); 另外就是,在计算机当中0.1和0.4都不能精确存贮,所以这种写法本身就是比较危险的,严重依赖于0:0.1:1的具体生成方式.按我刚才的方式写也不保证对其它数据的正确性,如果你没有足够的知识来保证浮点运算的安全性最好还是按照诸如 abs(a-b)
无为县13835121061: 请问为什么Matlabif部分语句不执行 - ?
彘是盐酸: if语句肯定执行了,要不然A1全是0;程序里面又很多多余的语句,不是程序的问题
无为县13835121061: 为什么if语句不起作用 - ?
彘是盐酸: matlab程序不熟悉.if语句不起作用,看这样是否可以:测试看是否先进入了for循环,如随便打印一个值,是否进入.再if else输出测试输出值,看它是否进入了哪里.就判断if逻辑逻辑可以.
无为县13835121061: MATLAB编程时使用语句"if"出错求助 - ?
彘是盐酸: 程序改为如下应该就可以了!loc_h=zeros(20,20); BW2=zeros(64,128); hori=1; vert=1; for i=1:64 for j=2:128 if BW2(i,j)~=BW2(i,j-1) loc_h(hori,vert)=BW2(i,j); hori=hori+1; vert=vert+1; end end end loc_h
无为县13835121061: matlab 的if 语句执行不了 - ?
彘是盐酸: 同学,1<a<200,1<b<200,这种连着的不等号在多数程序语言中都是不允许的. 以1<a<200为例,它是从左向右运算的,1<a得到的逻辑值(1或者0)再与200比较,所以不管a是不是大于1,这个不等式都是成立的. 这里应该拆开写: 1<a && a<200 && 1<b && b<200.......
无为县13835121061: matlab中if语句的使用,报错 - ?
彘是盐酸: 你要看看的matlabworkspace(工作空间)里有没有theta变量,没有的话在执行上边的代码时必须先定义theta,再来执行
无为县13835121061: matlab if语句提示出错 - ?
彘是盐酸: >>a=[.....]; %矩阵a你自己输入 s=size(a); for i=1:2:s(1); for j=1:s(2)-1; if(a(i,j)==1) a(i+1,j+1)=1; end; end; end %到此处理完毕>>a
无为县13835121061: MATLAB for循环内if语句判断失败 - ?
彘是盐酸: 您好,反复看了看语法,没看到什么毛病,a从0.001以增量0.001递增是能够运行到0.01的,然后判断,输出lalala,完成.没看出语句有什么毛病,需要进一步调试查看检查,个人建议您将a的循环变化值存至一个数组里面,看看是否有0.01这个元素,还有就是matlab不建议使用循环语句,能够用矩阵还是优先使用矩阵,谢谢...