列主元消去法 最小二乘法 龙贝格公式 标准四阶龙格库塔的编程

要准确的

列主元消去法
include "math.h"
#include "stdio.h"
void zhuyuan (int k,int n,float a[20][21])
{int t,i,j;
float x,y;
x=fabs(a[k][k]);t=k;
for (i=k+1;i<=n;i++)
if (fabs(a[i][k])>x)
{x=fabs(a[i][k]);t=i;}
for (j=k;j<=n+1;j++)
{y=a[k][j];a[k][j]=a[t][j];a[t][j]=y;}
}
void xiaoyuan(int n,float a[20][21])
{int k,i,j;
for(i=0;i<n;i++)
{zhuyuan(i,n,a);
for (j=i+1;j<=n;j++)
for (k=i+1;k<=n+1;k++)
a[j][k]=a[j][k]-a[j][i]*a[i][k]/a[i][i];
}
}
void huidai(int n,float a[20][21],float x[20])
{int i,j;
x[n]=a[n][n+1]/a[n][n];
for (i=n-1;i>=0;i--)
{ x[i]=a[i][n+1];
for (j=i+1;j<=n;j++)
x[i]=x[i]-a[i][j]*x[j];
x[i]=x[i]/a[i][i];
}
}
void main ()
{int n,i,j;float a[20][21],m[20];
printf("please input n=");
scanf("%d",&n);
n=n-1;
printf("please input aij and bi:\n");
for (i=0;i<=n;i++)
{for(j=0;j<=n+1;j++)
{if(j==n+1)
printf("b%d=",i+1);
else
printf("a%d%d=",i+1,j+1);
scanf("%f",&a[i][j]);
}printf("\n");
}
for (i=0;i<=n;i++)
{for(j=0;j<=n+1;j++)
if(j==n+1)
printf("%f\n",a[i][j]);
else
printf("%f ",a[i][j]);
}
xiaoyuan(n,a);
huidai(n,a,m);
for (i=0;i<=n;i++)
printf("x%d=%f\n",i+1,m[i]);
printf("\n");
}
最小二乘法
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "math.h"
#define N 9//N个节点
#define M 2//M次拟合
#define K 2*M
void zhuyuan (int k,int n,float a[M+1][M+2])
{int t,i,j;
float x,y;
x=fabs(a[k][k]);t=k;
for (i=k+1;i<=n;i++)
if (fabs(a[i][k])>x)
{x=fabs(a[i][k]);t=i;}
for (j=k;j<=n+1;j++)
{y=a[k][j];a[k][j]=a[t][j];a[t][j]=y;}
}
void xiaoyuan(int n,float a[M+1][M+2])
{int k,i,j;
for(i=0;i<n;i++)
{zhuyuan(i,n,a);
for (j=i+1;j<=n;j++)
for (k=i+1;k<=n+1;k++)
a[j][k]=a[j][k]-a[j][i]*a[i][k]/a[i][i];
}
}
void huidai(int n,float a[M+1][M+2],float x[M+1])
{int i,j;
x[n]=a[n][n+1]/a[n][n];
for (i=n-1;i>=0;i--)
{ x[i]=a[i][n+1];
for (j=i+1;j<=n;j++)
x[i]=x[i]-a[i][j]*x[j];
x[i]=x[i]/a[i][i];
}
}
void main()
{float x_y[N][2],A[N][K+1],B[N][M+1],AA[K+1],BB[M+1],a[M+1][M+2],m[M+1];
int i,j,n;
printf("请输入%d个已知点:\n",N);
for(i=0;i<N;i++)
{
printf("(x%d y%d):",i,i);
scanf("%f %f",&x_y[i][0],&x_y[i][1]);
}
for(i=0;i<N;i++)
{
A[i][0]=1;
for(j=1;j<=K;j++)
A[i][j]=A[i][j-1]*x_y[i][0];
for(j=0;j<=M;j++)
B[i][j]=A[i][j]*x_y[i][1];
}
for(j=0;j<=K;j++)
for(AA[j]=0,i=0;i<N;i++)
AA[j]+=A[i][j];
for(j=0;j<=M;j++)
for(BB[j]=0,i=0;i<N;i++)
BB[j]+=B[i][j];
for(i=0;i<M+1;i++)
{a[i][M+1]=BB[i];
for(j=0;j<=M;j++)
a[i][j]=AA[i+j];}
n=M;
printf("正规系数矩阵为:\n");
for(i=0;i<=n;i++)
{for(j=0;j<=n+1;j++)
printf("%f ",a[i][j]);
printf("\n");}
xiaoyuan(n,a);
huidai(n,a,m);
printf("拟合曲线方程为:\ny(x)=%g",m[0]);
for(i=1;i<=n;i++)
{
printf(" + %g",m[i]);
for(j=0;j<i;j++)
{
printf("*X");
}
}
}

库塔
#include "stdio.h"
float f(float x,float y)
{float p;
p=x+y;
return p;
}
void main()
{float x,y,k1,k2,k3,k4,h,a,b;
int i,n;
printf("请输入区间:");
scanf("%f,%f",&a,&b);
printf("(%f,%f)\n",a,b);
printf("请输入步长h=");
scanf("%f",&h);
printf("请输入y的初值:");
scanf("%f",&y);
x=a;
printf("x=%f,y=%f\n",x,y);
n=(b-a)/h;
for(i=1;i<=n+1;i++)
{k1=h*f(x,y);
k2=h*f(x+h/2,y+k1/2);
k3=h*f(x+h/2,y+k2/2);
k4=h*f(x+h,y+k3);
y+=(k1+2*k2+2*k3+k4)/6;
x=a+h*i;
printf("x=%f,y=%f\n",x,y);
}
}
贝格
#include <stdio.h>
#include <math.h>
#include <conio.h>
double f(double x)
{double p;
p=1/x;
return p;}
void main()
{double T[6],S[5],C[4],R[3],ff,b,a,e;
int i,j,k;
scanf("%lf,%lf,%lf",&a,&b,&e);
T[0]=(b-a)*1/2*(f(a)+f(b));
for(k=1;k<6;k++)
{ff=0;
for(i=1;2*i<=pow(2,k);i++)
ff+=f(a+(b-a)/pow(2,k)*(2*i-1));
T[k]=1/2*T[k-1]+(b-a)/pow(2,k-1)*ff;}
for(i=0,j=-1,k=-2;i<5;i++,j++,k++)
{S[i]=(4*T[i+1]-T[i])/3;
if(i>0)
C[j]=(16*S[i]-S[i-1])/15;
if(j>0)
R[k]=(64*C[j]-C[j-1])/63;
if(k>0)
if((R[k]-R[k-1])<e)
break;}
printf("%lf",R[k]);
}
温馨提示:答案为网友推荐,仅供参考