计算方法(一)用C#实现数值迭代
平时,经常会遇到解方程,计算方法中常用的有二分法(精度太低,迭代次数多,一般没人用),牛顿迭代法,弦截法,网上大多都是C++或者Java的实现代码,很少有C#的,我在本科毕业论文中用到了这些,那时也需要做一个winfrom,所以就用了C#,因此今天正好借这篇文章,把我的代码修改一下,公布出来,当然,代码有很多不足,扩展性也比较差,所以还希望大家多多指教喽。
public static class Equation
{
//二分法
//[x1,x2]为近似解区间,e为求解精度,fun为求解方程
public static double Dichotomy(Func<double, double> fun, double x1, double x2, double e)
{
double x = ;
while (Math.Abs(x2 - x1) >= e)
{
x = (x1 + x2) / ;
if (fun(x1) * fun(x) < )
{
x2 = x;
}
if (fun(x2) * fun(x) < )
{
x1 = x;
}
if ( == fun(x))
{
return x;
}
}
return x;
} //牛顿迭代法
//fun为牛顿迭代公式!!f(x)=x-f(x)/f'(x)
//x1为方程初始解,e为方程求解精度
public static double Newton(Func<double, double> fun, double x1, double e)
{
int count = ;
double x2 = fun(x1);
while (Math.Abs(x2 - x1) >= e)
{
x1 = x2;
x2 = fun(x1);
count++;
}
return x2;
} //单点弦截法,即不动点迭代法
//f(x)=x0-(x-x0)/(f(x)-f(x0))*f(x0) x0为不动点,一般常选取区间的一个端点。
//x1为区间的另一个端点,e为方程解的精度
public static double Single(Func<double, double> fun, double x1, double e)
{
int count = ;
double x2 = fun(x1);
while (Math.Abs(x2 - x1) >= e)
{
x1 = x2;
x2 = fun(x1);
count++;
}
return x2;
} //割线法
public static double Sec(Func<double, double, double> fun, double x1, double x2, double e)
{
int count = ;
double x3 = ;
while (Math.Abs(x2 - x1) > e)
{
x3 = fun(x1, x2);
x1 = x2;
x2 = x3;
count++;
}
return x3;
}
}
计算方法(一)用C#实现数值迭代的更多相关文章
- 数值最优化:一阶和二阶优化算法(Pytorch实现)
1 最优化概论 (1) 最优化的目标 最优化问题指的是找出实数函数的极大值或极小值,该函数称为目标函数.由于定位\(f(x)\)的极大值与找出\(-f(x)\)的极小值等价,在推导计算方式时仅考虑最小 ...
- 并联机构逆运动学用MapleSim符号来解决
在多体机械中,平台的运动学分析(运动学问题)可以分为两类:正向运动学问题和逆向运动学问题.所谓正向运动学是指研究机构中一点(例如,机械手臂上终端操作机构或由并联机械操纵器支持的平台的中心)在空间中的位 ...
- 机械臂运动学逆解(Analytical solution)
计算机器人运动学逆解首先要考虑可解性(solvability),即考虑无解.多解等情况.在机器人工作空间外的目标点显然是无解的.对于多解的情况从下面的例子可以看出平面二杆机械臂(两个关节可以360°旋 ...
- Fluent经典问题答疑
原文链接1 原文链接28 什么叫边界条件?有何物理意义?它与初始条件有什么关系? 边界条件与初始条件是控制方程有确定解的前提. 边界条件是在求解区域的边界上所求解的变量或其导数随时间和地点的变化规律. ...
- 统计学习:逻辑回归与交叉熵损失(Pytorch实现)
1. Logistic 分布和对率回归 监督学习的模型可以是概率模型或非概率模型,由条件概率分布\(P(Y|\bm{X})\)或决 策函数(decision function)\(Y=f(\bm{X} ...
- C语言--嵌套循环
一.PTA实验作业 题目1 水果价格 1.本题PTA提交列表 2.设计思路 第一步:定义变量number,表示输入的编号 第二步:定义变量i,用来记录编号数目 第三步:输出菜单:[1] apple [ ...
- 真正理解拉格朗日乘子法和 KKT 条件
这篇博文中直观上讲解了拉格朗日乘子法和 KKT 条件,对偶问题等内容. 首先从无约束的优化问题讲起,一般就是要使一个表达式取到最小值: \[min \quad f(x)\] 如 ...
- 线性二次型调节器LQR/LQC算法解析及求解器代码(matlab)
参考链接:http://120.52.51.14/stanford.edu/class/ee363/lectures/dlqr.pdf 本文参考讲义中的第20页PPT,根据Hamilton-Jacob ...
- PRML5-神经网络(2)
本节来自<pattern recognition and machine learning>第5章. 接(PRML5-神经网络(1)) 5.5NN中的正则化 NN的输入层和输出层的单元个数 ...
随机推荐
- Multiple dex files define Lcom/sina/sso/RemoteSSO错误解决办法
在安卓上遇到了Multiple dex files define Lcom/sina/sso/RemoteSSO的编译错误 在网上找解决办法 搜到了解决办法是这样的 方案1:Eclipse->P ...
- META http-equiv 大全
META http-equiv 大全 HTTP-EQUIV类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助正确和精确地显示网页内容.常用的HTTP-EQUIV类型有: 1.Content ...
- 利用js加载本地图片预览功能
直接上代码: 经测试,除safari6包括6以下不支持,其他均可正常显示. 原因:safari6不支持filereader,同时不能使用IE滤镜导致失效. fix: 可以利用canvas,解决safa ...
- linux关机重启命令浅析
linux关机重启命令 今天我们来介绍下linux系统中常用到的关机重启命令—shutdown.halt.reboot.poweroff以及init. shutdown命令 以安全的方式关闭系统或重启 ...
- Java学习----你的选择是什么-条件结构
import java.util.Scanner; public class Student { public static void main(String[] args) { byte money ...
- Java简介(4)-关键字
abstract assert boolean break byte byte case catch char class const continue default do-while double ...
- PHP进度条
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- bzoj2487: Super Poker II
Description I have a set of super poker cards, consisting of an infinite number of cards. For each p ...
- IOS--UIAlertView的使用方法详细
IOS--UIAlertView的使用方法详细 // UIAlertView的常用方法 // 标准样式 UIAlertView *oneAlertView = [[UIAlertView allo ...
- Solr In Action 笔记(3) 之 SolrCloud基础
Solr In Action 笔记(3) 之 SolrCloud基础 在Solr中,一个索引的实例称之为Core,而在SolrCloud中,一个索引的实例称之为Shard:Shard 又分为leade ...