永发信息网

求c语言编程用追赶法求解三对角方程组2x1+x2=1,x1+3x2+x3=2,x2+x3+x4=2,2x3+x4=0悬10分

答案:1  悬赏:0  手机版
解决时间 2021-03-22 17:32
  • 提问者网友:沉默的哀伤
  • 2021-03-22 13:06
求c语言编程用追赶法求解三对角方程组2x1+x2=1,x1+3x2+x3=2,x2+x3+x4=2,2x3+x4=0悬10分
最佳答案
  • 五星知识达人网友:山河有幸埋战骨
  • 2021-03-22 13:32
//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 {
max_r=k;
for (i=k+1;i {
if (abs(array[i][col])>abs(array[max_r][col]))
{
max_r=i;
}
}
if (max_r!=k)
{
for (j=k;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 {
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 {
array[i][j]=array[i][j]*ta-array[k][j]*tb;
}
}
}
}
for (i=k;i {
if (array[i][col]!=0)
{
return -1;
}
}
if (k {
for (i=k-1;i>=0;i--)
{
unuse_x_num=0;
for (j=0;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 {
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 {
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 {
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 {
printf("x%d=%d\n",i+1,result[i]);
}
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯