数值分析常用的几个小程序C++实现
来源:互联网 发布:舟山淘宝代运营诈骗案 编辑:程序博客网 时间:2024/06/05 21:22
最近对数值分析比较感兴趣,就把王能超先生的《数值分析简明教程》(第二版)拜读了下。编程中最没用的东西是源代码,最有用的东西是算法和数据结构。闲话不多说,po代码,让自己能有个记忆1.秦九韶算法
#include <iostream>#define IndexMaxLength 100using namespace std;int main(void){ float a[IndexMaxLength], x, v;//a[]是各项的系数 int i, n, k; cout << "含x的项的个数: "; cin >> n; cout << "x的值为: "; cin >> x; for (i = 0; i <= n; i++) { cout << "各项的系数a[" << i << "]: "; cin >> a[i]; } v = a[n]; k = 1; do { v = x*v + a[n - k]; k = k + 1; } while (k <= n); cout << "运算结果: " << v << endl; system("pause"); return 0;}
2.拉格朗日插值公式
#include <iostream>#include <cmath>#define IndexMaxLength 100using namespace std;int main(void){ float a, b, t, x[IndexMaxLength], y[IndexMaxLength];//a 即所求点的横坐标,b为纵坐标 int n, i, j, k; cout << "a = "; cin >> a; cout << "n = "; cin >> n; for (i = 0; i <= n; i++) { cout << "x[" << i << "]: "; cin >> x[i]; cout << "y[" << i << "]: "; cin >> y[i]; } k = 0; b = 0; for (k = 0; k <= n; k++) { t = 1; for (j = 0; j <= n; j++) { if (j != k) t = t*(a - x[j]) / (x[k] - x[j]); } b = b + t*y[k]; } cout << "b = " << b; system("pause"); return 0;}
再来一发,改进的欧拉公式:
“`
include
include
using namespace std;
float fun(float, float);
int main(void)
{
float x0, y0, h, x1, y1, yp, yc;
/*
h:步长
N:步数
x0、y0为”老值“
x1、y1为”新值“ 即本步计算结果
*/
int N, n;
cout << “======请输入初值=======” << endl;
cout << “x0 = “;
cin >> x0;
cout << “y0 = “;
cin >> y0;
cout << “h = “;
cin >> h;
cout << “N = “;
cin >> N;
for (n = 1; n <= N; n++)
{
x1 = x0 + h;
yp = y0 + h*fun(x0, y0);
yc = y0 + h*fun(x1, yp);
y1 = ((float)1 / 2)*(yp + yc);//查了好久,强制转换啊!!!
cout << “yp = ” << yp << endl;
cout << “yc = ” << yc << endl;
cout << “x1 = ” << x1 << endl;
cout << “y1 = ” << y1 << endl;
x0 = x1;
y0 = y1;
}
system("pause");return 0;
}
float fun(float a, float b)
{
float m;
m = b - 2 * a / b;
return(m);
}
4.经典四阶龙格库塔方法
`#include
include
using namespace std;
float fun(float, float);
int main(void)
{
float x0, y0, x1, y1, K1, K2, K3, K4, h;
int N, n;
cout << “======请输入初值=======” << endl;
cout << “x0 = “;
cin >> x0;
cout << “y0 = “;
cin >> y0;
cout << “h = “;
cin >> h;
cout << “N = “;
cin >> N;
for (n = 1; n <= N; n++)
{
cout << “===================” << endl;
x1 = x0 + h;
K1 = fun(x0, y0);
K2 = fun(x0 + (h / 2), y0 + (h / 2) * K1);
K3 = fun(x0 + (h / 2), y0 + (h / 2) * K2);
K4 = fun(x1, y0 + h * K3);
y1 = y0 + (h / 6) * (K1 + 2 * K2 + 2 * K3 + K4);
cout << “x1 = ” << x1 << endl;
cout << “y1 = ” << y1 << endl;
x0 = x1; y0 = y1;}system("pause");return 0;
}
float fun(float a, float b)
{
float m;
m = b - 2 * a / b;
return(m);
}`
- 数值分析常用的几个小程序C++实现
- 常用数值分析算法(c++)
- 初学C的几个小程序之一
- 几个c 的小程序记录
- 几个常用C语言函数的分析
- 数值分析 Lab 1 的C程序示例
- C语言编程常用数值计算的高性能实现
- C小程序 - 分析一个多线程的小程序
- c语言基础,常用的几个练习小题目
- C语言比较有意思的几个小程序
- 分析一个小程序的实现
- 几个常用的小函数
- 几个常用的小接口
- Objective C 实现简单的小程序
- io的几个小程序
- Python的几个小程序
- 几个有意思的小程序
- scala的几个小程序
- hdu 5900 QSC and Master 区间dp
- [经验]tableview的contentSize默默自己在变。
- SSLHandshakeException: Received fatal alert: handshake_failure
- leetcode 29
- Java基础之运算符
- 数值分析常用的几个小程序C++实现
- 51nod 1201 整数划分(dp)
- cordova开发教程
- NandFlash ECC 校验算法原理与实现
- android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a vi
- Android打开系统相册页面
- 一些小知识点
- 二叉树的递归遍历以及非递归遍历
- ubuntu 14.04 开启root登录