c语言计算线性函数 c语言运算函数详解

用c语言编程求线性方程组的解

#include "stdlib.h"

10年积累的成都网站设计、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站策划后付款的网站建设流程,更有黄陵免费网站建设让你可以放心的选择与我们合作。

#include "math.h"

#include "stdio.h"

int rgauss(n,a,b)

int n;

double a[],b[];

{ int *js,l,k,i,j,is,p,q;

double d,t;

js=malloc(n*sizeof(int));

l=1;

for (k=0;k=n-2;k++)

{ d=0.0;

for (i=k;i=n-1;i++)

for (j=k;j=n-1;j++)

{ t=fabs(a[i*n+j]);

if (td) { d=t; js[k]=j; is=i;}

}

if (d+1.0==1.0) l=0;

else

{ if (js[k]!=k)

for (i=0;i=n-1;i++)

{ p=i*n+k; q=i*n+js[k];

t=a[p]; a[p]=a[q]; a[q]=t;

}

if (is!=k)

{ for (j=k;j=n-1;j++)

{ p=k*n+j; q=is*n+j;

t=a[p]; a[p]=a[q]; a[q]=t;

}

t=b[k]; b[k]=b[is]; b[is]=t;

}

}

if (l==0)

{ free(js); printf("fail\n");

return(0);

}

d=a[k*n+k];

for (j=k+1;j=n-1;j++)

{ p=k*n+j; a[p]=a[p]/d;}

b[k]=b[k]/d;

for (i=k+1;i=n-1;i++)

{ for (j=k+1;j=n-1;j++)

{ p=i*n+j;

a[p]=a[p]-a[i*n+k]*a[k*n+j];

}

b[i]=b[i]-a[i*n+k]*b[k];

}

}

d=a[(n-1)*n+n-1];

if (fabs(d)+1.0==1.0)

{ free(js); printf("fail\n");

return(0);

}

b[n-1]=b[n-1]/d;

for (i=n-2;i=0;i--)

{ t=0.0;

for (j=i+1;j=n-1;j++)

t=t+a[i*n+j]*b[j];

b[i]=b[i]-t;

}

js[n-1]=n-1;

for (k=n-1;k=0;k--)

if (js[k]!=k)

{ t=b[k]; b[k]=b[js[k]]; b[js[k]]=t;}

free(js);

return(1);

}

徐世良老师的.原地工作全选主元的高斯消元.用的符号有点诡异,而且将矩阵以线性表输入的.

我也写过一个,不过估计你不太喜欢用我的,这个用来解b也是矩阵的.

#include stdio.h

#include stdlib.h

#include math.h

void swap(double *a,double *b){

double temp;

temp=*a;

*a=*b;

*b=temp;

}

void printMatrix(int n,int m,double **a){

int i,j;

for (i=0;in;i++){

for (j=0;jm;j++) printf("%e\t",a[i][j]);

printf("\n");

}

}

int rgauss(int n,int m,double **a,double **b){//,double *det){

int *colex,rowex,s,i,j,k;

double d,t;

// *det=1;

s=0;

colex=malloc(n*sizeof(int));

for (k=0;kn;k++){

d=0.0;

for (i=k;in;i++){

for (j=k;jn;j++){

t=fabs(a[i][j]);

if (td){

d=t;

colex[k]=j;

rowex=i;

}

}

}

if (d+1.0==1.0){

free(colex);

printf("Singular Matrix!\n");

return 0;

}

else{

if (colex[k]!=k){

for (i=0;in;i++)

swap(a[i]+colex[k],a[i]+k);

s=s+colex[k]-k;

}

if (rowex!=k){

for (j=0;jn;j++)

swap(a[rowex]+j,a[k]+j);

for (j=0;jm;j++)

swap(b[rowex]+j,b[k]+j);

s=s+rowex-k;

}

}

d=a[k][k];

// *det=*det*d;

for (j=k+1;jn;j++) a[k][j]/=d;

for (j=0;jm;j++) b[k][j]/=d;

for (i=k+1;in;i++){

for (j=k+1;jn;j++)

a[i][j]-=a[i][k]*a[k][j];

for (j=0;jm;j++)

b[i][j]-=a[i][k]*b[k][j];

}

}

for (i=n-2;i-1;i--)

for (j=i+1;jn;j++)

for (k=0;km;k++)

b[i][k]-=a[i][j]*b[j][k];

colex[n-1]=n-1;

for (i=n-1;i-1;i--)

if (colex[i]!=i)

for (j=0;jm;j++) swap(b[colex[i]]+j,b[i]+j);

// if (s1) *det=-*det;

return 1;

}

void main(){

#define N 2

#define M 1

double input_a[]={1,1,1,2};

double input_b[]={1,2};

double *a[N],*b[N];

int i;

for (i=0;iN;i++){

a[i]=input_a+N*i;

b[i]=input_b+M*i;

}

rgauss(N,M,a,b);

printf("方程解为:\n");

printMatrix(N,M,b);

printf("\n");

}

用c语言程序写一个函数,求线性代数方程组AX=b,要有通用性。非常感谢帮忙。

高斯-赛德尔迭代法

#include stdio.h

#include conio.h

#include alloc.h

#include math.h

#define N 100

float *GauseSeidel(float *a,int n)

{

int i,j,nu=0;

float *x,dx;

x=(float *)malloc(n*sizeof(float));

for(i=0;i =n-1;i++)

x[i]=0.0;

do

{

for(i=0;i =n-1;i++)

{

float d=0.0;

for(j=0;j =n-1;j++)

d+=*(a+i*(n+1)+j)*x[j];

dx=(*(a+i*(n+1)+n)-d)/(*(a+i*(n+1)+i));

x[i]+=dx;

}

if(nu =N)

{

printf( "迭代发散\n ");

exit(1);

}

nu++;

}

while(fabs(dx) 1e-6);

return x;

}

main()

{

int i;

float *x;

float c[12]={5,2,1,8,2,8,-3,21,1,-3,-6,1};

float *GauseSeidel(float *,int);

x=GauseSeidel(c,3);

clrscr();

for(i=0;i =2;i++)

printf( "x[%d]=%f\n ",i,x[i]);

getch();

}

c语言如何定义一个线性函数y=kx+b的系数k,b,从键盘读取这两个系数,并读取任意?

float k,b,x,y;

printf("请输入k,b:");

scanf("%f%f",k,b);

printf("请输入x:");

scanf("%f",x);

y=k*x十b;

printf("y=%f\n",y);

c语言解线性方程组的编程题 【做的好会多给分】

以下算法的适用条件:A的各阶主子式不为零

另外还可以采用

直接法:

消元法:Gauss-Jordan消元法,

分解法:Dolittle分解 (我用的是Courant分解法),追赶法,对称正定矩阵的LDL‘分解

----------

迭代法:

Jacobi迭代

Gauss-Seidel迭代

松弛迭代

-----------------

你上网可以搜索一下,或者看看数值计算方面的书

OK, 你看看这个, 另外还加了注释 :

Courant分解算法:

aX = b, 作 A=LU, L是下三角矩阵, U是上三角矩阵

即L =

| L11

| L21 L22

| L31 L32 L33

| ..............

| Ln1 Ln2 ........Lnn

U =

| 1 U12 ..... U1n

| 空格 1 ..... U2n

| 空格 空格 ........

| 空格 空格 空格 空格 空格1

---------------------------------------------------

aX = b ----- LUX = b

记 UX = y,

由Ly = b得到

因为无法输出数学符号,以下采用[i, j]Ai 表示对Ai从i到j求和

yi = (bi - [j=1, i-1]Lij yj) / Lii i = 1, 2, ..., n

由UX = y得到

xi = yi - [j=i+1, n]uij xj j = n, n-1, ..., 2, 1

你在纸上验证一下就明白了

--------------------------------------------------------------

以下采用Courant分解 解 aX = b, 经检查,程序运行正确

这是运行结果:

--------------------------------------------------------------

Input n value(dim of Ax=b): 3

Now input the matrix a(i, j), i, j = 0, ..., 2:

1 2 1 -2 -1 -5 0 -1 6

Now input the matrix b(i), i = 0, ..., 2:

24 -63 50

Solve...x_i =

7.000000

4.000000

9.000000

--------------------------------------------------------------

#include "stdafx.h"

#include stdio.h

#include math.h

#define MAX_N 20

int main(int argc, char* argv[])

{

int n; // 未知数个数

int i, j, k;

static double a[MAX_N][MAX_N], b[MAX_N], x[MAX_N], y[MAX_N];

static double l[MAX_N][MAX_N], u[MAX_N][MAX_N];

printf("\nInput n value(dim of Ax=b): ");

scanf("%d", n);

if(n MAX_N)

{

printf("The input n is larger than MAX_N, please redefine the MAX_N.\n");

return 1;

}

if(n = 0)

{

printf("Please input a number between 1 and %d.\n", MAX_N);

return 1;

}

// {{ 程序输入

printf("Now input the matrix a(i, j), i, j = 0, ..., %d:\n", n-1);

for (i=0; in; i++)

for (j=0; jn; j++)

scanf("%lf", a[i][j]);

printf("Now input the matrix b(i), i = 0, ..., %d:\n", n-1);

for(i=0; in; i++)

scanf("%lf", b[i]);

// }} 程序输入

for(i=0; in; i++)

u[i][i] = 1; //

for(k=0; kn; k++)

{

for(i=k; in; i++) // 计算L的第k列元素

{

l[i][k] = a[i][k];

for(j=0; j=k-1; j++)

l[i][k] -= (l[i][j]*u[j][k]);

}

for(j=k+1; jn; j++) //计算U的第k行元素

{

u[k][j] = a[k][j];

for(i=0; i=k-1; i++)

u[k][j] -= (l[k][i]*u[i][j]);

u[k][j] /= l[k][k];

}

}

for(i=0; in; i++) // 解Ly = b

{

y[i] = b[i];

for(j=0; j=i-1; j++)

y[i] -= (l[i][j]*y[j]);

y[i] /= l[i][i];

}

for(i=n-1; i=0; i--) // 解UX = Y

{

x[i]=y[i];

for(j=i+1; jn; j++)

x[i] -= (u[i][j]*x[j]);

}

printf("Solve...x_i = \n"); // 输出结果

for(i=0; in; i++)

printf("%f\n", x[i]);

return 0;

}

用C语言求解Ax=b的齐次线性方程组。 最好采用带子函数的输入形参为(A,b),返回结果为x;

#include "stdio.h"

int main()

{

int a,b,x;

scanf("%d %d",a,b);

if( a==0 )printf("error");

else {

x=b/a;

printf("%d\n",x);

}

return 0;

}


标题名称:c语言计算线性函数 c语言运算函数详解
地址分享:http://azwzsj.com/article/doojgic.html