c++ 求解三元一次方程组

一个常规的方程组不过使用的都是字母给出的方程是C1=b0+b1*I1+b2*I2C2=b0+b1*I3+b2*I4C3=b0+b1*I5+b2*I5其中I1至I6都是已知... 一个常规的方程组 不过使用的都是字母
给出的方程是 C1=b0+b1*I1+b2*I2
C2=b0+b1*I3+b2*I4
C3=b0+b1*I5+b2*I5
其中 I1至I6都是已知的 但是我需要计算时带进去既是用字母运算 然后后面再赋值 希望哪位大大给个编好的程序。。看了半天实在是不会 希望哪位大大帮写个程序
展开
 我来答
百度网友e9042513a
推荐于2016-12-02 · TA获得超过6984个赞
知道大有可为答主
回答量:2388
采纳率:0%
帮助的人:3510万
展开全部
解三元方程

方程形式
a1*X + b1*Y + c1*Z = d1
a2*X + b2*Y + c2*Z = d2
a3*X + b3*Y + c3*Z = d3

#include <stdio.h>

void equation2(double *x, double *y, double a1, double b1, double c1, double a2, double b2, double c2);
void equation3(double *x, double *y, double *z, double a1, double b1, double c1, double d1, double a2, double b2, double c2, double d2, double a3, double b3, double c3, double d3);

void equation2(double *x, double *y, double a1, double b1, double c1, double a2, double b2, double c2)
{
*x = (c1 * b2 - c2 * b1) / (a1 * b2 - a2 * b1);
*y = (c1 - a1 * *x) / b1;

}

void equation3(double *x, double *y, double *z, double a1, double b1, double c1, double d1, double a2, double b2, double c2, double d2, double a3, double b3, double c3, double d3)
{
equation2(x, y, a1 * c2 - a2 * c1, b1 * c2 - b2 * c1, d1 * c2 - d2 * c1, a1 * c3 - a3 * c1, b1 * c3 - b3 * c1, d1 * c3 - d3 * c1);
*z = (d1 - a1 * *x - b1 * *y) / c1;

}

int main(void)
{
double x, y, z;
double a1, b1, c1, d1;
double a2, b2, c2, d2;
double a3, b3, c3, d3;

a1 = 75982;
b1 = 56291;
c1 = 32609;
d1 = 191000900;

a2 = 43608;
b2 = 35117;
c2 = 34569;
d2 = 152065100;

a3 = 73648;
b3 = 35117;
c3 = 28039;
d3 = 161731100;

equation3(&x, &y, &z, a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3);

printf("x=%15.12f\ny=%15.12f\nz=%15.12f\n",x,y,z);
}
匿名用户
2009-06-22
展开全部
高斯消去法求线性方程组Ax=b的解,比如方程组为:
2x0+6x1-x2=-12
5x0-x1+2x2=29
-3x0-4x1+x2=5
程序如下,已编译通过:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>
#include <conio.h>

int GS(int,double**,double *,double);
double **TwoArrayAlloc(int,int);
void TwoArrayFree(double **);

int main()
{
int i,n;
double ep,**a,*b;
n = 3;
ep = 1e-4;
a = TwoArrayAlloc(n,n);
b = (double *)calloc(n,sizeof(double));
if(b == NULL)
{
printf("内存分配失败\n");
exit(1);
}
a[0][0]= 2; a[0][1]= 6; a[0][2]=-1;/* 将这里的系数替换为自己方程中的系数即可 */
a[1][0]= 5; a[1][1]=-1; a[1][2]= 2;
a[2][0]=-3; a[2][1]=-4; a[2][2]= 1;
b[0] = -12; b[1] = 29; b[2] = 5;
if(!GS(n,a,b,ep))
{
printf("不可以用高斯消去法求解\n");
exit(0);
}
printf("该方程组的解为:\n");
for(i=0;i<3;i++)
printf("x%d = %.2f\n",i,b[i]);
TwoArrayFree(a);
free(b);
getch();
return 0;
}

int GS(int n,double **a,double *b,double ep)
{
int i,j,k,l;
double t;
for(k=1;k<=n;k++)
{
for(l=k;l<=n;l++)
if(fabs(a[l-1][k-1])>ep)
break;
else if(l==n)
return(0);
if(l!=k)
{
for(j=k;j<=n;j++)
{
t = a[k-1][j-1];
a[k-1][j-1]=a[l-1][j-1];
a[l-1][j-1]=t;
}
t=b[k-1];
b[k-1]=b[l-1];
b[l-1]=t;
}
t=1/a[k-1][k-1];
for(j=k+1;j<=n;j++)
a[k-1][j-1]=t*a[k-1][j-1];
b[k-1]*=t;
for(i=k+1;i<=n;i++)
{
for(j=k+1;j<=n;j++)
a[i-1][j-1]-=a[i-1][k-1]*a[k-1][j-1];
b[i-1]-=a[i-1][k-1]*b[k-1];
}
}
for(i=n-1;i>=1;i--)
for(j=i+1;j<=n;j++)
b[i-1]-=a[i-1][j-1]*b[j-1];
return(1);
}

double **TwoArrayAlloc(int r,int c)
{
double *x,**y;
int n;
x=(double *)calloc(r*c,sizeof(double));
y=(double **)calloc(r,sizeof(double*));
for(n=0;n<=r-1;++n)
y[n]=&x[c*n];
return (y);
}

void TwoArrayFree(double **x)
{
free(x[0]);
free(x);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式