定义函数

今天写代码,有这么一个小需求,把下图这种函数存起来,然后需要的时候直接f(x)调用即可。

syms t
f(t) = 6.8325/31.2834*(t/31.2834).^5.8325+0.0355;
f(1)

输出如下:

(11776458799446781745235478509123152584204402148589076107170397814784*35184372088832^(333/400)*1100686785803767^(67/400))/1778207819741065749175205515179961799530525717937163894599563129249164422846114600496707569 + 71/2000

牛批,这是人看的吗?

网上查找了一下,vpa()函数说的人很多,但是位数也太多了,虽然也有方法设置位数,但我发现直接double()也可以,4位小数一般也够用了。

>> vpa(f(1))ans =0.035500000414807970186928389994056
---------------------------------------
>> double(f(1))ans =0.0355

但感觉还是不太方便,每次输出都要套个函数,可不可以直接就设置matlab输出结果以小数显示呢?

有看到推荐用format函数,这个确实是可以控制输出格式,但是我发现对于f(1)这种情况不适用:

>> format short
>> 1/2ans =0.5000>> f(1)ans =(11776458799446781745235478509123152584204402148589076107170397814784*35184372088832^(333/400)*1100686785803767^(67/400))/1778207819741065749175205515179961799530525717937163894599563129249164422846114600496707569 + 71/2000>> format long
>> 1/2ans =0.500000000000000>> f(1)ans =(11776458799446781745235478509123152584204402148589076107170397814784*35184372088832^(333/400)*1100686785803767^(67/400))/1778207819741065749175205515179961799530525717937163894599563129249164422846114600496707569 + 71/2000

这个问题暂时搁置一下,起码目前我们知道有double()这种略显繁琐的解决方式。

我想记录一下今天犯的一个有点蠢的错误,发生在定义函数的过程中。网上教程很简单嘛,官方的我也看了,syms x一下,然后f = 2 * x + 1这样子就可以了。结果如下:

>> syms x
>> f = 2 * x + 1f =2*x + 1>> f(1)ans =2*x + 1

什么情况?为什么不给我返回具体值呢?我在中间发生的曲折求索就不多说了,问题出在f = 2 * x + 1,是要f(x) = 2 * x + 1才对!f后面要带括号加上自变量!

>> syms x
f(x) = 2 * x + 1
f(1)f(x) =2*x + 1ans =3

定义函数的话,网上还有一种匿名函数的方法也挺简单的,格式如下:

>> f = @(x)(2 * x + 1)f =包含以下值的 function_handle:@(x)(2*x+1)>> f(1)ans =3

求反函数

然后我今天还有一个求反函数的需求,网上查一下是finverse这个函数,简单用法如下:

>> syms x
f(x)=2*x+1
g(x)=finverse(f)f(x) =2*x + 1g(x) =x/2 - 1/2>> g(1)ans =0>> g(3)ans =1

但是如果用f = @(x)(2 * x + 1)这种方式定义,用finverse求反函数就会有如下的小问题,可能有相应的解决方式,但是我已经不想去探究了。

>> f = @(x)(2*x+1)f =包含以下值的 function_handle:@(x)(2*x+1)>> g=finverse(f)
检查对函数 'finverse' 的调用中是否缺失参数或参数数据类型不正确。

精度问题

>> syms t
f(t)=6.8325/31.2834*(t/31.2834).^5.8325+0.0355;
double(f(1))ans =0.0355>> g(t)=finverse(f);
g(0.0355)ans =0>> g(f(1))ans =(1100686785803767*((53919893334301279589334030174039261347274288845081144962207220498432*35184372088832^(333/400)*1100686785803767^(67/400))/1778207819741065749175205515179961799530525717937163894599563129249164422846114600496707569)^(400/2333))/35184372088832>> double(g(f(1)))ans =1>> g(double(f(1)))ans =(1100686785803767*1868129017^(400/2333)*983615734031752000^(1933/2333))/34607901978602775065252593664000>> double(g(double(f(1))))ans =1.0000

所以尽量避免中间过程的过度,不然一步步的误差积累下来可能结果就差得远了。

总结

  • 定义函数用syms的方式
  • 求反函数用finverse的方式

【MATLAB】函数定义与反函数相关推荐

  1. matlab函数定义

    matlab定义函数,和C语言类似,定义一个从华氏度到摄氏度的函数如下 function D =F2C()for i=0: 10F = input('==>Temperature in F:', ...

  2. matlab函数定义和调用

    Matlab函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Matlab提供了许多内建函数,比如disp().但你也可以 ...

  3. matlab函数定义格式

    http://blog.sina.com.cn/s/blog_4936c31d01014qwo.html 总结matlab中函数定义的一些内容:1, 函数定义格式 在matlab中应该做成M文件,文件 ...

  4. matlab函数定义放置或嵌套错误,函数定义放置或嵌套错误怎么解决?

    本帖最后由 为什么_Mp1bR 于 2020-8-22 10:15 编辑 程序大致如下,有些不必要的地方就没贴上来,请帮我看看哪里出错了,是一个子函数出现错误提示: function shiyan13 ...

  5. matlab函数定义详解

    但凡经过编程熏陶的人,在学习其他一门陌生的编程语言时,往往会与已经学过的语言相比较.而语法的比较往往是情不自禁的.在matlab中,函数的概念或许没有其他语言那么广泛,特性没有那么丰富,但基本的功能都 ...

  6. matlab函数定义,matlab定义函数【详细说明】

    有不少用户在使用电脑的过程中可能会碰到matlab定义函数的情况.大部分用户电脑技术都是菜鸟水平,面对matlab定义函数的问题,无法自行解决.不少用户都来咨询小编matlab定义函数要怎么处理?其实 ...

  7. [matlab]函数定义与使用

    matlb中函数的定义和使用和其他语言还是有很大差别的,本文就来介绍一下函数的基本用法 1. 基本结构 function y = test(x1,x2)y = x1 + x2; end 主要matla ...

  8. matlab传函转zpk形式,matlab函数定义和根轨迹绘制

    1传递函数的定义方法 (1)传递函数分子和分母以多项式形式给出 >> num=[] >> den=[] >> g=tf(num,den) 或 >> g= ...

  9. r语言 matlab 函数定义,R语言-编写自定义函数 ZZ

    一.函数构造器 每一个R函数都包括三个部分:函数名,程序主体以及参数集合,在编写自定义R函数时,需要将三个部分各自储存在一个R对象中.这里需要使用function函数,形如: my_function ...

最新文章

  1. oracle scott用户
  2. 每日一博 - 延时任务的多种实现方式解读
  3. 通过shell例子来学习循环结构的语法
  4. 设计爬虫Hawk背后的故事
  5. 前端开发:小程序--第一步
  6. 【POJ - 1275】Cashier Employment(差分约束,建图)
  7. tomcat优化-有改protocol 和 缓存 集群方案
  8. LeetCode MySQL 1571. 仓库经理
  9. live-server 箭头函数
  10. linux系统python的版本怎么升级,python---linux下升级python的版本
  11. 设计师拥有一流导航,即是全世界
  12. 盗版,盗版给了我们什么?
  13. 《GPU高性能编程CUDA实战》代码整理
  14. 拓端tecdat|R语言对苏格兰独立民意调查的Meta分析
  15. 感谢大家的热情与温暖
  16. jQuery第六章课后作业
  17. 华为云服务查找手机_华为云服务里面的手机找回需要什么条件
  18. 巧做“士兵突击”的个性日历
  19. Element Plus的分页组件el-pagination显示英文
  20. 判断是否为直角三角形

热门文章

  1. OPPO K7X手机刷root 获取magisk 强解锁BL coloros11教程
  2. 2022-2027年中国纤维素生物燃料行业市场全景评估及发展战略规划报告
  3. 武汉php工程师,Laravel 招聘:[武汉][10-20k][光谷][CmsTop新项目]高级PHP工程师 | Laravel China 社区...
  4. webstrom设置启动时可选择打开项目,不打开最近的项目
  5. sql常用的语句及其逻辑
  6. VOR系统收发信号模拟,完成测向功能仿真
  7. 开源私有云盘python_使用Seafile搭建个人专属私有云盘
  8. Web技术老矣,尚能Run否?| U4内核在Web开发平台的探索之路
  9. kubernetes核心资源内容
  10. MANIFEST.MF文件详解