数值分析常用的几个小程序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);
}`这里写图片描述

原创粉丝点击