如何用matlab写以下函数

如何用matlab写以下函数,第1张

可以不用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文件在调用

用function函数,再在主程序中调用就可以。
举个简单的例子建立一个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函数的程序。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10230155.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存