继续以解一元多次方程割线法为例

use std::f64;
pub fn get_next_x(com_fn:impl Fn(f64)->f64,x0:f64,x1:f64)->f64{let res1=&f_compute(&com_fn,x1);let res0=&f_compute(&com_fn,x0);x1-res1*((x1-x0)/(res1-res0))
}
pub fn f_compute(com_fn:impl Fn(f64)->f64,x:f64)->f64{com_fn(x)
}fn main() {let tol=1e-8_f64;let x0=-10.0_f64;let x1=10.0_f64;let mut x_i:f64;let mut x_isub1:f64;let mut x_iplus1:f64;let mut ans:f64;  let mut finished;let mut fn_comp;for i in 1..20{fn_comp=move |x:f64| x.powi(i+1)+x.powi(i)-1.0_f64;x_i=x1;x_isub1=x0;ans=0.0_f64; finished=false;    for _n in 1..2000 {x_iplus1=get_next_x(fn_comp,x_isub1,x_i);if (x_iplus1-x_i).abs()<tol {  ans=x_iplus1;finished=true;break;}         x_isub1=x_i;x_i=x_iplus1;}if finished{println!("function{},解:{}",i,ans);        }else{println!("function{},找不到解",i);                  }       }
}
PS F:\learn\rustlearn> rustc learn4.rs                                                                                                                                                                             PS F:\learn\rustlearn> .\learn4.exe                                                                                                                                                                                function1,解:0.6180339887498948
function2,解:0.7548776662466918
function3,解:0.8191725133961645
function4,解:0.0012008970334152279
function5,解:0.8812714616336657
function6,解:0.00001800013706088066
function7,解:0.9115923534820559
function8,解:-0.999999980000001
function9,解:0.9295701282320228
function10,解:-0.9999999998
function11,解:10.000000000244464
function12,解:-0.9999999999979999
function13,解:10.000000000002444
function14,解:-0.9999999999999793
function15,解:10.000000000000027
function16,解:-0.9999999999999999
function17,解:9.999999999999986
function18,解:-1
function19,解:10

下面定义了一个闭包

 fn_comp=move |x:f64| x.powi(i+1)+x.powi(i)-1.0_f64;

下面闭包作为参数

pub fn f_compute(com_fn:impl Fn(f64)->f64,x:f64)->f64{com_fn(x)
}

闭包作为返回值

pub fn get_fn(i:i32)->impl Fn(f64)->f64{move |x:f64| x.powi(i+1)+x.powi(i)-1.0_f64
}
use std::f64;
pub fn get_next_x(com_fn:impl Fn(f64)->f64,x0:f64,x1:f64)->f64{let res1=&f_compute(&com_fn,x1);let res0=&f_compute(&com_fn,x0);x1-res1*((x1-x0)/(res1-res0))
}
pub fn f_compute(com_fn:impl Fn(f64)->f64,x:f64)->f64{com_fn(x)
}pub fn get_fn(i:i32)->impl Fn(f64)->f64{move |x:f64| x.powi(i+1)+x.powi(i)-1.0_f64
}fn main() {let tol=1e-8_f64;let x0=-10.0_f64;let x1=10.0_f64;let mut x_i:f64;let mut x_isub1:f64;let mut x_iplus1:f64;let mut ans:f64;  let mut finished;let mut fn_comp;for i in 1..20{fn_comp=get_fn(i);x_i=x1;x_isub1=x0;ans=0.0_f64;    finished=false;    for _n in 1..2000 {x_iplus1=get_next_x(&fn_comp,x_isub1,x_i);if (x_iplus1-x_i).abs()<tol {  ans=x_iplus1;finished=true;break;}            x_isub1=x_i;x_i=x_iplus1;}if finished{println!("function{},解:{}",i,ans);        }else{println!("function{},找不到解",i);                  }       }
}

rust(12)-闭包,闭包作为返回值,闭包作为参数相关推荐

  1. Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数

    Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数 内容大纲 1.函数的初识 2.函数的定义 3.函数的调用 4.函数的返回值 5.函数的参数 1.函数初识 # def ...

  2. 关于ExecuteNonQuery执行存储过程的返回值 、、实例讲解存储过程的返回值与传出参数、、、C#获取存储过程的 Return返回值和Output输出参数值...

    关于ExecuteNonQuery执行存储过程的返回值 用到过ExecuteNonQuery()函数的朋友们在开发的时候肯定这么用过. if(cmd.ExecuteNonQuery("xxx ...

  3. 函数二的变量作用域,多函数执行,返回值,函数参数,拆包,引用

    函数二 一.变量作用域 1.局部变量是函数内部变量,在函数临时保存数据,函数调用完则销毁,在函数外访问即报错 2.全局变量函数内外都可访问,当不同函数都要用到某一变量时,则可使用全局变量 def fu ...

  4. 王亟亟的Python学习之路(10)-函数对象的作用域,函数作为返回值,闭包

    转载请注明出处:王亟亟的大牛之路 本来打算把工作的事周末做掉点,但是发现在外面浪并不能迅速集中投入,为了避免不必要的BUG 还是明天在家做吧,那么久写一篇Python的文章吧,毕竟背着Mac出门不做些 ...

  5. C++ 笔记(02)— 程序结构(头文件说明、命名空间、函数返回值、函数参数、注释、语句结束符、cin/cout)

    先看以下代码 #include <iostream> #include <string> using namespace std;int main() // main() 是程 ...

  6. Python基础day05【函数(局部变量、全局变量、多函数执行流程、函数返回值、函数参数)、拆包、引用、可变与不可变类型、函数注意事项】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day05[函数(函数传参的两种形式.函数形参).拆包.引用.可变与不可变类型.引 ...

  7. C++代码片段(一)萃取函数返回值类型,参数类型,参数个数

    函数的类型主要集中在以下几种 函数指针 函数对象,是一个类对象,内部重载的operator()函数是一个函数指针 lambda,匿名函数对象,同函数对象 function对象 后三者都是类对象,可以看 ...

  8. dotnet 获得存储过程返回值和输出参数有什么不同 @@IDENTITY SCOPE_IDENTITY()

    存储过程1: Create PROCEDURE CreateNewUser @UserName varchar(50), @Password varchar(50), @Description var ...

  9. 【函数的定义、调用(嵌套调用、递归调用)、声明、函数的分类(有无返回值、有无参数)、变量(自动变量与静态变量、局部变量与全局变量、只读变量)】(学习笔记7--函数)

    第一篇博文,打卡新星计划第三季3.4~4.4,希望能有质的飞跃,顶峰相见 一.自定义函数 1.函数的定义 函数在使用前也需要定义,定义的格式如下: 数据类型 函数名([数据类型 参数1],[数据类型 ...

  10. Java程序编写 • 【第9章 程序:理解逻辑,自来也,配合通灵兽释放技能(带返回值,带参数)】

    本章节总结 返回作业目录 练习一 <蛤蟆油炎弹之术> 忍者类 public class day13_05 {String name="自来也";public day13 ...

最新文章

  1. 反编译软件dnSpy中修改baml文件
  2. cytoscape插件centiscape的使用
  3. matlab-高数 polar 极坐标系 绘制阿基米德线,心形线
  4. (正则表达式学习)正则表达式语法
  5. 用java读取properties文件--转
  6. U102380-简单数据结构题【Trie】
  7. centos7 yum 安装mariadb
  8. atom编辑器 apm指令配置代理
  9. 1.SRE:Google运维解密 --- 介绍
  10. findfont: Font family [‘sans-serif‘] not found. Falling back to DejaVu Sans.
  11. win11还原win10磁贴方法ExplorerPatcher,替代Start 11、StartALLBack(开源免费~)
  12. 已删除的好友微信号怎么找回来
  13. 蓝凌LKS-kOA怎么样?
  14. java生成二维码合成背景图
  15. Airbnb创始人:屌丝的逆袭之路
  16. 25岁,想转行到 IT,应怎样入门?
  17. J9数字论:如何去在Web2和Web3的融合中获得自己的优势呢?
  18. TL5000系列可调谐激光器
  19. 泰拉瑞亚 (Terraria v1.4.1.2) ---PC
  20. elasticsearch 打分 源码_Elasticsearch搜索之explain评分分析

热门文章

  1. BZOJ 1293 [SCOI2009]生日礼物
  2. python 学习笔记十九 django深入学习四 cookie,session
  3. 在VC中如何使用OCX控件 【来源:http://blog.csdn.net/wulang1114/article/details/4806089】
  4. 补充部分官方文档里没有的Client Library以及代码提示Schema更新(三)
  5. 手机和邮箱的正则表达式
  6. STL之set和multiset(集合)
  7. .net中从GridView中导出数据到excel(详细)
  8. 高效地加载图片(一) 高效地加载大图
  9. 编程中定义的方法报异常问题
  10. 轻量级的网页Rank算法,365Rss.cn的Rank技术解释以及算法讨论(一)