Gauss
#include<stdio.h>
int main(){
double a[11][11],b[11],x[11];
FILE *p;
if((p=fopen("euq.txt","r"))==NULL){
printf("file open failed");
}
for(int m=1;m<=10;m++){
for(int n=1;n<=10;n++){
fscanf(p,"%lf",&a[m][n]);
printf("%.2lf\t",a[m][n]);
}
printf("\n");
}
printf("\n");
for(int m=1;m<=10;m++){
fscanf(p,"%lf",&b[m]);
printf("%.2lf\t",b[m]);
}
printf("\n\n");
for(int m=1;m<=9;m++){
for(int n=m+1;n<=10;n++){
double ch=a[n][m]/a[m][m];
for(int i=m;i<=10;i++){
a[n][i]-=ch*a[m][i];
}
}
}
for(int m=1;m<=10;m++){
for(int n=1;n<=10;n++){
printf("%.2lf\t",a[m][n]);
}
printf("\n");
}
printf("\n");
x[10]=b[10]/a[10][10];
printf("%.2lf\t",x[10]);
for(int m=9;m>=1;m--){
double sum=0;
for(int n=m+1;n<=10;n++){
sum+=x[n]*a[m][n];
}
x[m]=(b[m]-sum)/a[m][m];
printf("%.2lf\t",x[m]);
}
printf("\n");
for(int m=1;m<=10;m++){
double ans=0;
for(int n=1;n<=10;n++){
ans+=a[m][n]*x[n];
}
ans-=b[m];
printf("%lf\t",ans);
}
}
平方根
#include<stdio.h>
#include<math.h>
#define num 8 //方程的个数
int main(){
double a[num+1][num+1],b[num],c[num][num]={0},x[num],y[num]={0};
FILE *p;
if((p=fopen("euq2.txt","rw"))==NULL)
printf("file open error");
printf("矩阵a\n");
for(int m=1;m<=num;m++){
for(int n=1;n<=num;n++){
fscanf(p,"%lf",&a[m][n]);
printf("%.2lf\t",a[m][n]);
}
printf("\n");
}
printf("\n矩阵b\n");
for(int m=1;m<=num;m++){
fscanf(p,"%lf",&b[m]);
printf("%.2lf\t",b[m]);
}
printf("\n");
printf("\n");
for(int i=1;i<=num;i++){
double sum1=0;
for(int k=1;k<=i-1;k++){
sum1+=c[i][k]*c[i][k];
}
c[i][i]=sqrt(a[i][i]-sum1);
for(int j=i+1;j<=num;j++){
double sum2=0;
for(int k=1;k<=i-1;k++){
sum2+=c[j][k]*c[i][k];
}
c[j][i]=(a[j][i]-sum2)/c[i][i];
}
}
printf("分解矩阵L\n");
for(int m=1;m<=num;m++){
for(int n=1;n<=num;n++){
printf("%.2lf\t",c[m][n]);
}
printf("\n");
}
printf("\n");
for(int i=1;i<=num;i++){
int sum1=0;
for(int k=1;k<=i-1;k++){
sum1+=c[i][k]*y[k];
}
y[i]=(b[i]-sum1)/c[i][i];
}
for(int i=num;i>=1;i--){
int sum2=0;
for(int k=i+1;k<=num;k++){
sum2+=c[k][i]*x[k];
}
x[i]=(y[i]-sum2)/c[i][i];
}
printf("方程的解x\n");
for(int m=1;m<=num;m++){
printf("%.2lf\t",x[m]);
}
printf("\n");
printf("验证\n");
for(int m=1;m<=num;m++){
int sum3=0;
for(int n=1;n<=num;n++){
sum3+=a[m][n]*x[n];
}
printf("%.2lf\t",sum3-b[m]);
}
}
zuiganfa
#include<stdio.h>
#define num 10
int main(){
double A[num+1][num+1],B[num+1],a[num+1],b[num+1],c[num+1]={0},u[num+1],L[num+1],x[num+1],y[num+1];
FILE *p;
if((p=fopen("euq3.txt","rw"))==NULL)
printf("file open error");
printf("矩阵a\n");
for(int m=1;m<=num;m++){
for(int n=1;n<=num;n++){
fscanf(p,"%lf",&A[m][n]);
printf("%.2lf\t",A[m][n]);
}
printf("\n");
}
printf("\n矩阵b\n");
for(int m=1;m<=num;m++){
fscanf(p,"%lf",&B[m]);
printf("%.2lf\t",B[m]);
}
printf("\n");
printf("\n");
for(int m=1;m<=num;m++){
b[m]=A[m][m];
}
for(int m=1;m<=num-1;m++){
c[m]=A[m][m+1];
}
for(int m=2;m<=num;m++){
a[m]=A[m][m-1];
}
printf("a,b,c\n");
for(int m=1;m<=num;m++){
printf("%.2lf\t%.2lf\t%.2lf\n",a[m],b[m],c[m]);
}
L[1]=b[1];
for(int i;i<=num-1;i++){
u[i]=c[i]/L[i];
L[i+1]=b[i+1]-a[i+1]*u[i];
}
y[1]=B[1]/L[1];
for(int i=2;i<=num;i++){
y[i]=(B[i]-a[i]*y[i-1])/L[i];
}
x[num]=y[num];
for(int i=num-1;i>=1;i--){
x[i]=y[i]-u[i]*x[i+1];
}
printf("\n方程解x:");
for(int i=1;i<=num;i++){
printf("%.2lf\t",x[i]);
}
printf("\n");
printf("验证:");
for(int m=1;m<=num;m++){
double sum=0;
for(int n=1;n<=num;n++){
sum+=A[m][n]*x[n];
}
printf("%.2lf\t",sum-B[m]);
}
}