数值分析四次实验

第一次:牛顿插值

//n次牛顿插值的算法
#include<stdio.h>
#include<math.h>

void main(void)
{
    double f[10][10],resx,resy;
    int n,i,j;
    double x[10] = {0.40,0.55,0.65,0.80,0.90};;
    f[0][0]=0.41075;
    f[1][0]=0.57815;
    f[2][0]=0.69675;
    f[3][0]=0.88811;
    f[4][0]=1.02652;
    //scanf("%d",&n);
    //scanf("%lf",&x[i]);
    //scanf("%lf",&f[i][0]);
    n=5;
    /*Calculate*/
    for(j=1; j<=n-1; j++)
    {
        for(i=j; i<=n-1; i++)
        {
            f[i][j]=(f[i][j-1]-f[i-1][j-1])/(x[i]-x[i-j]);
        }
    }
    /*Print*/
    printf("xi\t");
    printf("fxi     \t",j);
    for(j=1; j<=n-1; j++)
        printf("%d阶差商     \t",j);
    printf("\n");
    for(i=0; i<=n-1; i++)
    {
        printf("%0.2f\t",x[i]);
        for(j=0; j<=i; j++)
        {
            printf("c[%d][%d]=%.5f ",i,j,f[i][j]);
        }
        printf("\n");
    }
    /*Calculate for res*/
    resx=0.596;
    resy=0.0;
    for(i=0;i<n;i++){
        double temp=f[i][i];
        for(j=0;j<i;j++){
            temp*=(resx-x[j]);
        }
        resy+=temp;
        printf("N_[%d](%.3f)=%.5f\n",i,resx,resy);
    }
    return 0;
}

第二次实验:龙贝格

#include<cstdio>
#include<cmath>
#include<algorithm>

using namespace std;

#define P 0.00000001
#define e 2.71828183
#define MAXReTeat 10
#define a 0
#define b 1
#define b acos(-1)

double f(double x) { //被积函数
    //return 4.0/(1+x*x);
       return exp(x)*cos(x);
}


double Romberg() {
    int m,n,k;
    double y[MAXReTeat],h,eT,T,xk,s,q,S;
    h=b-a;
    y[0]=h*(f(a)+f(b))/2.0;//计算T1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               1(h)=1/2(b-a)(f(a)+f(b));
    m=1;n=1;
    eT=P+1;
    printf("              k             2^k           T(2^K)        S(2^K-1)        C(2^K-2)        R(2^K-3)\n");
    printf("%15d\t%15d\t%15.5f\n",m-1,(int)(pow(2,m-1)+1e-10),y[0]);
    while(eT>=P) {
        S=0.0;
        for(k=0; k<n; k++) {
            xk=a+(k+0.5)*h;
            S+=f(xk);
        }
        printf("%15d\t%15d\t",m,(int)(pow(2,m)+1e-10));
        T=(y[0]+h*S)/2.0;
        printf("%15.5f\t",T);
        s=1.0;
        for(k=1; k<=min(4,m); k++) {
            s=4.0*s;// Pow(4,m)
            q=(s*T-y[k-1])/(s-1.0);//[pow(4,m)T`m`(h/2)-T`m`(h)]/[pow(4,m)-1]
            y[k-1]=T;
            if(k==1)printf("%15.5f\t",q);
            if(k==2)printf("%15.5f\t",q);
            if(k==3)printf("%15.5f\t",q);
            T=q;
            if(k==min(4,m))puts("");
        }
        eT=fabs(q-y[m-1]);
        y[m]=q;
        m=m+1;
        n*=2;
        h=h/2.0;
    }
    return q;
}
int main() {
    double result = Romberg();
    printf("龙贝格算法计算结果:%.7f",result);
    return 0;
}

高斯列主元消元法

c++

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课题一: 线性方程组的迭代法 一、实验内容 1、设线性方程组 = x = ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 ) 2、设对称正定阵系数阵线方程组 = x = ( 1, -1, 0, 2, 1, -1, 0, 2 ) 3、三对角形线性方程组 = x = ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 ) 试分别选用Jacobi 迭代法,Gauss-Seidol迭代法和SOR方法计算其解。 二、实验要求 1、体会迭代法求解线性方程组,并能与消去法做以比较; 2、分别对不同精度要求,如 由迭代次数体会该迭代法的收敛快慢; 3、对方程组2,3使用SOR方法时,选取松弛因子 =0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者; 4、给出各种算法的设计程序和计算结果。 三、目的和意义 1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较; 2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序; 3、体会上机计算时,终止步骤 (予给的迭代次数),对迭代法敛散性的意义; 4、体会初始解 x ,松弛因子的选取,对计算结果的影响。 课题二:数值积分 一、实验内容 选用复合梯形公式,复合Simpson公式,Romberg算法,计算 (1) I = (2) I = (3) I = (4) I = 二、实验要求 1、 编制数值积分算法的程序; 2、 分别用两种算法计算同一个积分,并比较其结果; 3、 分别取不同步长 ,试比较计算结果(如n = 10, 20等); 4、 给定精度要求 ,试用变步长算法,确定最佳步长。 三、目的和意义 1、 深刻认识数值积分法的意义; 2、 明确数值积分精度与步长的关系; 3、 根据定积分的计算方法,可以考虑二重积分的计算问题。 四、流程图设计

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值