程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 幾道數值計算題目的c語言實現

幾道數值計算題目的c語言實現

編輯:關於C語言

注:個人習慣原因,帶了點c++語句
一、 用牛頓法\求在\附近的實根,取四位有效數字。

#include<iostream> 
#include<cstdio> 
#include<cstdlib> 
#include<cmath> 
#include<algorithm> 
 
using namespace std; 
 
const double eps=1e-4; 
const double x0=2; 
 
double FunOfSet(double x) 

    return pow(x,3.0)-3*x-1; 

 
void ProGetRes() 

    double Begin=x0-1,End=x0+1; 
    double Mid; 
    while(fabs(FunOfSet(Begin)-FunOfSet(End))>eps) 
    { 
        Mid=(Begin+End)/2; 
        if(FunOfSet(Begin)*FunOfSet(Mid)<0) 
            End=Mid; 
        else Begin=Mid; 
    } 
    printf("The root of fuction beside 2 is: %.4f\n",Mid) ; 

int main() 

    ProGetRes(); 
    return 0; 

二、 用高斯消去法求解下列方程組
   \

#include<iostream>  
#include<cstdio>  
#include<cstdlib>  
#include<cmath>  
 
using namespace std; 
 
const int LenOfMatrix=3; 
 
double a[LenOfMatrix+1][LenOfMatrix+2]={{0,0,0,0,0},{0,2,-1,-1,4},{0,3,4,-2,11},{0,3,-2,4,11}}; 
double Res[LenOfMatrix+1]; 
void GussPro() 

    int i,j,k,MaxPos,n=3; 
    double mmax; 
    for(k=1;k<n-1;k++) 
    { 
        mmax=-1; 
        for(i=k;i<=n;i++) 
            if(fabs(a[i][k])>mmax) 
            { 
                mmax=a[i][k]; 
                MaxPos=i; 
            } 
        double temp; 
        for(j=1;j<=n+1;j++) 
        { 
            temp=a[k][j]; 
            a[k][j]=a[MaxPos][j]; 
            a[MaxPos][j]=temp; 
        } 
        for(i=k+1;i<=n;i++) 
            for(j=k+1;j<=n+1;j++) 
                a[i][j]=a[i][j]-(a[i][k])*(a[k][j])/(a[k][k]); 
    } 
    Res[n]=(a[n][n+1])/(a[n][n]); 
    double sum; 
    for(k=n-1;k>=1;k--) 
    { 
        sum=0; 
        for(j=k+1;j<=n;j++) 
            sum+=(a[k][j])*(Res[j]); 
        Res[k]=(a[k][n+1]-sum)/(a[k][k]); 
    } 
    cout<<"For the follow matrix :"<<endl; 
    cout<<"2x1-1x2-1x3=4"<<endl; 
    cout<<"3x1+4x2-2x3=11"<<endl; 
    cout<<"3x1-2x2+4x3=11"<<endl; 
    cout<<"The answer is:  "; 
    for(i=1;i<=n;i++) 
        printf("x[%d]=%.4f  ",i,Res[i]); 
    cout<<endl; 

int main() 

    GussPro(); 
    return 0; 

三、已知函數表

 

x     1.1275

1.1503

1.1735

1.1972

f(x)  0.1191

0.13954

0.15932

0.17903

 

應用拉格朗日插值公式計算f(1.1300)的近似值。


#include<iostream>  
#include<cstdio>  
#include<cstdlib>  
#include<cmath>  
#include<algorithm>  
 
using namespace std; 
 
const int LenOfNum=4; 
double x[]={1.1275,1.1503,1.1735,1.1972}; 
double y[]={0.1191,0.13954,0.15932,0.17903}; 
double Li[LenOfNum]; 
int i,j; 
void GetLi(double x0) 

    for(i=0;i<LenOfNum;i++) 
    { 
        Li[i]=1; 
        for(j=0;j<LenOfNum;j++) 
            if(i!=j)Li[i]*=((x0-x[j])/(x[i]-x[j])); 
    } 
}  
 
void ProLag() 

    double x0=1.1300; 
    double res=0; 
    GetLi(x0); 
    for(i=0;i<LenOfNum;i++) 
        res+=(y[i]*Li[i]); 
    printf("f(1.1300)= %f\n",res); 

int main() 

    ProLag(); 

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>

using namespace std;

const int LenOfNum=4;
double x[]={1.1275,1.1503,1.1735,1.1972};
double y[]={0.1191,0.13954,0.15932,0.17903};
double Li[LenOfNum];
int i,j;
void GetLi(double x0)
{
 for(i=0;i<LenOfNum;i++)
 {
  Li[i]=1;
  for(j=0;j<LenOfNum;j++)
   if(i!=j)Li[i]*=((x0-x[j])/(x[i]-x[j]));
 }
}

void ProLag()
{
 double x0=1.1300;
 double res=0;
 GetLi(x0);
 for(i=0;i<LenOfNum;i++)
  res+=(y[i]*Li[i]);
 printf("f(1.1300)= %f\n",res);
}
int main()
{
 ProLag();
}

 摘自 int64Ago的專欄
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved