當前位置:編程學習大全網 - 編程語言 - 求c語言編程用追趕法求解三對角方程組2x1+x2=1,x1+3x2+x3=2,x2+x3+x4=2,2x3+x4=0懸10分

求c語言編程用追趕法求解三對角方程組2x1+x2=1,x1+3x2+x3=2,x2+x3+x4=2,2x3+x4=0懸10分

//2x1+x2=1,x1+3x2+x3=2,x2+x3+x4=2,2x3+x4=0

#include "stdio.h"

#include "math.h"

#define MAXNUM 10 //變量數量

int array[MAXNUM][MAXNUM]={{2,1,0,0,1},{1,3,1,0,2},{0,1,1,1,2},{0,0,2,1,0}};

int unuse_result[MAXNUM];

int GaussFun(int equ,int var,int result[])

{

int i,j,k,col,num1,num2;

int max_r,ta,tb,gcdtemp,lcmtemp;

int temp,unuse_x_num,unuse_index;

col=0;

for (k=0;k<equ && col<var;k++,col++)

{

max_r=k;

for (i=k+1;i<equ;i++)

{

if (abs(array[i][col])>abs(array[max_r][col]))

{

max_r=i;

}

}

if (max_r!=k)

{

for (j=k;j<var+1;j++)

{

temp=array[k][j];

array[k][j]=array[max_r][j];

array[max_r][j]=temp;

}

}

if (array[k][col]==0)

{

k--;

continue;

}

for (i=k+1;i<equ;i++)

{

if (array[i][col]!=0)

{

num1=abs(array[i][col]);

num2=abs(array[k][col]);

while (num2!=0)

{

temp=num2;

num2=num1%num2;

num1=temp;

}

gcdtemp=num1;

lcmtemp=(abs(array[i][col])*abs(array[k][col]))/gcdtemp;

ta=lcmtemp/abs(array[i][col]);

tb=lcmtemp/abs(array[k][col]);

if (array[i][col]*array[k][col]<0)

{

tb=-tb;

}

for (j=col;j<var+1;j++)

{

array[i][j]=array[i][j]*ta-array[k][j]*tb;

}

}

}

}

for (i=k;i<equ;i++)

{

if (array[i][col]!=0)

{

return -1;

}

}

if (k<var)

{

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

{

unuse_x_num=0;

for (j=0;j<var;j++)

{

if (array[i][j]!=0 && unuse_result[j])

{

unuse_x_num++;

unuse_index=j;

}

}

if (unuse_x_num>1)

{

continue;

}

temp=array[i][var];

for (j=0;j<var;j++)

{

if (array[i][j]!=0 && j!=unuse_index)

{

temp=array[i][j]*result[j];

}

}

result[unuse_index]=temp/array[i][unuse_index];

unuse_result[unuse_index]=0;

}

return var-k;

}

for (i=var-1;i>=0;i--)

{

temp=array[i][var];

for (j=i+1;j<var;j++)

{

if (array[i][j]!=0)

{

temp-=array[i][j]*result[j];

}

}

if (temp%array[i][i]!=0)

{

return -2;

}

result[i]=temp/array[i][i];

}

return 0;

}

void main()

{

int i,type;

int equnum,varnum;

int result[MAXNUM];

equnum=3;

varnum=3;

type=GaussFun(equnum,varnum,result);

if (type==-1)

{

printf("該方程無解!\n");

}

else if(type==-2)

{

printf("該方程有浮點數解,無整數解!\n");

}

else if (type>0)

{

printf("該方程有無窮多個解!自由變量數量為%d\n",type);

for (i=0;i<varnum;i++)

{

if (unuse_result[i])

{

printf("x%d 是不確定的\n",i+1);

}

else

{

printf("x%d:%d\n",i+1,result[i]);

}

}

}

else

{

printf("該方程的解為:\n");

for (i=0;i<varnum;i++)

{

printf("x%d=%d\n",i+1,result[i]);

}

}

}

  • 上一篇:請問今天有什麽好看的動畫
  • 下一篇:模擬信號的信號采集
  • copyright 2024編程學習大全網