计算方法(一)用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的输入层和输出层的单元个数 ...
随机推荐
- Linux安装Monaco字体
Linux安装字体的方式其实很简单,就是调用 fc-cache -f -v 命令,其实我们可以什么都不添加直接调用这个命令可以看到它会去/usr/share/fonts/truetype等目录以及你自 ...
- N3292x IBR介绍
N3292x IBR介绍 1 IBR启动流程 图1-1 IBR启动流程 CHIP_CFG[0] Mode 0 Boot from IBR Recovery Mode with crystal inpu ...
- 在Linux-0.11中实现基于内核栈切换的进程切换
原有的基于TSS的任务切换的不足 进程切换的六段论 1 中断进入内核 2 找到当前进程的PCB和新进程的PCB 3 完成PCB的切换 4 根据PCB完成内核栈的切换 5 切换运行资源LDT 6 利用I ...
- underscorejs-each学习
2.1 each 2.1.1 语法: _.each(list, iteratee, [context]) 2.1.2 说明: 依次对集合的所有元素进行某种操作,原样返回list.接收3个参数,list ...
- eval("表达式")
eval就是把字符串转成可执行代码eval("表达式");表达式被翻译成JavaScript代码执行比如eval("alert('test')");等于aler ...
- Python Django开始
1.创建工程 C:\procedure\projects>django-admin startproject mysite 2.同步数据库 C:\procedure\projects\mysit ...
- 百度地图LBS云平台读写数据操作类
最近写了个叫<行踪记录仪>的手机软件,用了百度云来记录每个用户的最近位置,以便各用户能在地图上找到附近的人,为此写了个类来读写数据,大致如下: import java.util.Array ...
- C++进阶阅读
推荐的阅读顺序:level 1从<<essential c++>>开始,短小精悍,可以对c++能进一步了解其特性以<<c++ primer>>作字典和课 ...
- 点击itemView选中checkbox
在Listview中如果item中含有checkbox会使itemview的setonitemchecklistingner失效,我们可以通过设置checkbox的clickbale的值为false来 ...
- 强联通 HDU 1269
第一道强联通的题目纪念一下! 主要是模版 tarjan算法 #include <iostream> #include <cstdlib> #include <cstdio ...