可以不用if-else,直接写函数即可:
>> f=@(c) 1(c==0) + (06508-03436log10(c+eps))(c>0&c<=0783) + 0(c>0783);>> f(0)
ans = 1
>> f(05)
ans = 07542
>> f(08)
ans = 0
其中
eps表示一个接近于0的数(1e-16),用以避免代入c=0时造成对数函数真数等于0,且又不会对结果造成影响
原公式中lgc做底数为10的对数log_10(x)理解,如果表示自然对数,则将代码中log10改为log即可
matlab分段函数编写的 *** 作方法和步骤如下:
1、第一步,在计算机桌面上打开MATLAB软件,如下图所示。
2、其次,完成上述步骤后,单击matlab软件左上方的“新建”按钮以创建脚本文件,如下图所示。
3、接着,完成上述步骤后,定义变量,如下图红框标注所示。
4、然后,完成上述步骤后,建立一个循环来求解分段函数,如下图所示。
5、随后,完成上述步骤后,使用piot(x,y)指令绘制图形,如下图所示。
6、最后,完成上述步骤后,显示最终分段函数的效果,如下图所示。这样,问题就解决了。
用来查找a中小于0项的位置。
>> a=[1,-1,-3;2,3,5;2,-2,-4]
a=
1-1-3
235
2-2-4
>> b=find(a<0)
b=
4
6
7
9
虚数
>> a=3+4j;
>> b=5+6j;
>> c=ab
c=
-9.000000000000000+38.000000000000000i
>> format long g %关闭format long
>> c
c=
-9+38i
虚数计算
>> A=[3,4;5,6]+i[1,2;7,8]
A=
3+1i4+2i
5+7i6+8i
>> A=[3,4;5,6]+i[1,2;7,8];
>> A+10i
ans=
3+11i4+12i
5+17i6+18i。
扩展资料
注意事项:
1、A[]可以用来表示空矩阵。
2、设A[234;678;012],则可以用下面方法取出A中的元素:A(1,2)=3,A(3,3)=2;
两个数字中第一个是行,第二个是列。
运算符
MATLAB中所用运算符共有三类:
(1)、算术运算符:加减乘除,平方开方
(2)、关系运算符:大于小于等。
(3)、逻辑运算符:与或非。
算术运算符:矩阵相乘与阵列相乘,“/”,“./”矩阵右除与阵列右除,“\”,“.\”矩阵左除与阵列左除。
2.变量的规定与运算
在矩阵表示中,每一行的各元素之间可以用空格或者,来分开。行与行之间用;分开,在矩阵名处加上一个单引号代表转置。凡是以“i”或“j”结尾的变量都视为虚数变量。
正常情况下MATLAB保留四位一下小数,但是如果在前面加上一句formatlong保留更多位。
作为示例,首先在M文件内编写如下函数:
% function operation
function [s,n] = calsum(n)
s = 0;
for i = 1:n
s = s + i;
end
以函数句柄形式调用,函数名作为参数,如下所示:
>> funame = @eg_sum;
>> [sum,n] = feval(funame,100)
函数输出:
sum =
5050
n =
100
在MATLAB中输入对数函数主要分为以下两种类型:
一、直接型
以e、2或者是10为底的对数的话,直接输入:y=log(x),y=log2(x),y=log10(x)。例如,a1=log(27183);知a2=log2(2);a3=log10(10)。
二、转换性
如果需要求的对数函数是 y=log5(25)这道种不以e、2、10为底的对数,首先需要根据对版数换底公式转换成y=log25/log5来求解。例如,要求解log5(25)、log3(9)、log2(4)这三个对数函数的值权,需要写为:a1=log(25)/log(5);a2=log(4)/log(2);a3=log(9)/log(3)。
函数文件需要在编辑器中提前编好程序。点击上面的“+”号,有一个function,点开就可以编写函数。
我的是中文版,和你的对照着可以
函数文件不可以直接运行,必须保存为m文件后,在你的主程序内调用,平常用的很多函数都是这么用的,比如说求余函数 rem(x,y) ,如果没有x,y的实际值是没有函数的实际意义的。
附上我以前的一些简单的自定义函数吧。
记得一定要保存m文件在调用
举个简单的例子建立一个myfunctionm,然后在文件中写。
functiony=myfunction(a,b)
其中a,b是输入函数的参数,y是函数返回的值。当需要返回多个值时,可以将y看作一个数组,或者直接将函数的开头写成如function [x,y]=myfunction(x,y)的形式。
然后就是定义函数的内容,通俗的说就是怎样由输入参数a,b得到返回值y。比如最简单的y=a+b。
总结一下,将下面的代码
function y=myfunction(a,b)
y=a+b;
保存为一个m文件myfunctionm,调用方式如下。
num=myfunction(3,4);
这样就可以由函数中的y=a+b得到num的值是3+4=7。mpl的118行case 3,sys=mdlOutputs(t,x,u);flag=3表示此时要计算输出,即y=fo(t,x,u),找到mdlOutputs函数(在218行),如上,如果sys=[]表示没有输出,我们改成sys=fo(t,x,u)或sys=Cx+Du %sys此时为输出y好像快完了,嘻嘻,在sfuntmpl的124行case 4,sys=mdlGetTimeOfNextVarHit(t,x,u);flag=4表示此时要计算下一次采样的时间,只在离散采样系统中有用(即上文的mdlInit ializeSizes中提到的ts设置ts(1)不为0)连续系统中只需在mdlGetTimeOfNextVarHit函数中写上sys=[];这个函数主要用于变步长的设置,具体实现大家可以用edit vsfunc看vsfuncm这个例子最后一个,在sfuntmpl的130行case 9,sys=mdlTerminate(t,x,u);flag=9表示此时系统要结束,一般来说写上在mdlTerminate函数中写上sys=[]就可,如果你在结束时还要设置什么,就在此函数中写关于sfuntmpl这个s函数的模板讲完了。s函数还可以带用户参数,下面给个例子,和simulink下的gain模块功能一样,大伙自己 看吧,我睡觉去了,累了。function [sys,x0,str,ts] = sfungain(t,x,u,flag,gain)switch flag,case 0,sizes = simsizes;sizesNumContStates = 0;sizesNumDiscStates = 0;sizesNumOutputs = 1;sizesNumInputs = 1;sizesDirFeedthrough = 1;sizesNumSampleTimes = 1;sys = simsizes(sizes);x0=[];str=[];ts=[0,0];case 3,sys=gainu;case {1,2,4,9},sys = [];end做好了s函数后,simulink--user-defined function下拖一个S-Function到你的模型,就可以用了,在simulink----user-defined function还有个s-Function Builder,他可以生成用c语言写的s函数在matlab的workspace下打sfundemos,可以看到很多演示s函数的程序。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)