数值分析常用的几个小程序C++实现

本文分享了数值分析中几种常见算法的C++实现,包括秦九韶算法、拉格朗日插值公式、改进的欧拉公式及四阶龙格库塔方法。通过具体示例代码展示了如何解决多项式计算与数值逼近等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近对数值分析比较感兴趣,就把王能超先生的《数值分析简明教程》(第二版)拜读了下。编程中最没用的东西是源代码,最有用的东西是算法和数据结构。
闲话不多说,po代码,让自己能有个记忆
1.秦九韶算法
#include <iostream>
#define IndexMaxLength 100
using 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 100
using 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);
}`这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值