当前位置: 首页 > news >正文

matlab使用教程(23)—优化函数的参数

        本博客向您介绍如何存储或访问向 MATLAB 复合函数(如 fzero integral)传递的数学函数的额外参数。
        MATLAB 复合函数基于某个值范围计算数学表达式。这些函数之所以称为复合函数是因为它们是接受函数句柄(函数的指针)作为输入的函数。这些函数的每一个都要求目标函数具有特定数量的输入变量。例如, fzero integral 接受恰好具有一个输入变量的函数的句柄。
        假设您需要在系数 b 和 c 具有不同的值时,计算三次多项式 x3 + bx + c 的零点。尽管您可以创建接受三个输入变量(x、b 和 c)的函数,但无法将需要所有这三个输入的函数句柄传递给 fzero。不过,您可以利用匿名函数或嵌套函数的属性来定义其他输入的值。

1.使用嵌套函数参数化

        定义参数的一种方法是使用嵌套函数 - 完全包含于程序文件中另一个函数内的函数。对于此示例,将创建一个名为 findzero.m 的文件,该文件包含父函数 findzero 和嵌套函数 poly
function y = findzero(b,c,x0)
y = fzero(@poly,x0);
function y = poly(x)
y = x^3 + b*x + c;
end
end
        该嵌套函数定义具有一个输入变量 x 的三次多项式。父函数接受参数 b c 作为输入值。将 poly 嵌套于findzero 内的原因是,嵌套函数共享其父函数的工作区。因此, poly 函数可以访问您传递给 findzero b c 的值。
        要求 b = 2 c = 3.5 时多项式的零点,如果使用开始点 x0 = 0 ,则可以从命令行调用 findzero
x = findzero(2,3.5,0)
x =
-1.0945

2.使用匿名函数进行参数化

        访问额外参数的另一种方法是使用匿名函数。匿名函数是可以在单个命令中定义而无需创建一个单独程序文件的函数。这些函数可以使用当前工作区中可用的任何变量。例如,创建用于描述三次多项式的匿名函数的句柄并求零点:
b = 2;
c = 3.5;
cubicpoly = @(x) x^3 + b*x + c;
x = fzero(cubicpoly,0)
x =
-1.0945
        变量 cubicpoly 是具有一个输入 x 的匿名函数的函数句柄。匿名函数的输入以包含在括号中的形式显示,并紧跟用于创建函数句柄的 @ 符号之后。由于在您创建 cubicpoly b c 位于工作区中,因此匿名函数不需要这些系数的输入。无需为匿名函数创建中间变量 cubicpoly 。可以将函数句柄的整个定义包含在对 fzero 的调用中:
b = 2;
c = 3.5;
x = fzero(@(x) x^3 + b*x + c,0)
x =
-1.0945
        您也可以使用匿名函数调用在函数文件中定义的更复杂的目标函数。例如,假设存在具有以下函数定义的名为 cubicpoly.m 的文件:
function y = cubicpoly(x,b,c)
y = x^3 + b*x + c;
end
        在命令行上,定义 b c ,然后使用调用 cubicpoly 的匿名函数调用 fzero
b = 2;
c = 3.5;
x = fzero(@(x) cubicpoly(x,b,c),0)
x =
-1.0945
        注意 要更改参数的值,必须创建一个新匿名函数。例如:
b = 10;
c = 25;
x = fzero(@(x) x^3 + b*x + c,0);

http://www.lryc.cn/news/140692.html

相关文章:

  • 基于“互联网+ 服务供应链”的汽车道路救援系统对策分析
  • 浅谈泛在电力物联网在电力设备状态在线监测中的应用
  • 低通滤波器和高通滤波器
  • VS中插入Qt插件后配置项目笔记
  • Hugo·Stack主题·使用及修改
  • 实战:大数据Spark简介与docker-compose搭建独立集群
  • 嵌入性视角下的企业集成创新网络演化过程
  • 回归预测 | MATLAB实现FA-ELM萤火虫算法优化极限学习机多输入单输出回归预测(多指标,多图)
  • 数据结构数组栈的实现
  • 成集云 | 抖店连接器客户静默下单催付数据同步钉钉 | 解决方案
  • 【算法专题突破】双指针 - 复写零(2)
  • 【Java从0到1学习】11 Java集合框架
  • uniapp使用uni.chooseLocation()打开地图选择位置
  • 学习笔记|课后练习解答|电磁炉LED实战|逻辑运算|STC32G单片机视频开发教程(冲哥)|第八集(下):课后练习分析与解答
  • 前端高频面试题 js中堆和栈的区别和浏览器的垃圾回收机制
  • 自然语言处理:大语言模型入门介绍
  • 使用秘籍|如何实现图数据库 NebulaGraph 的高效建模、快速导入、性能优化
  • 对于pycharm 运行的时候不在cmd中运行,而是在python控制台运行的情况,如何处理?
  • Spring MVC 二 :基于xml配置
  • springboot aop方式实现接口入参校验
  • 解决git上传远程仓库时的大文件提交
  • HTML学习笔记02
  • <C++> 内存管理
  • 【Java】ByteBuffer类的arrayOffset方法详解+示例
  • 【C++】C++ 引用详解 ⑤ ( 函数 “ 引用类型返回值 “ 当左值被赋值 )
  • Git,分布式版本控制工具
  • LeetCode 面试题 02.02. 返回倒数第 k 个节点
  • SpeedBI数据可视化工具:丰富图表,提高报表易读性
  • 编写Dockerfile制作Web应用系统nginx镜像
  • 记录一次微服务连接Nacos异常-errorMsg: Illegal character in authority at index 7: