3个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>
#define N 3 /* 3个未知数,3个方程组 */
float **p = NULL;
float b[N * (N + 1)] ={2,1,1,28,
5,2,2,66,
10,5,4,137};
/* 3元方程组的数据, 自己可以随意修改数值, 还可以修改N 和浮点数组实现任意多阶方程组求解*/
float ** build_array(int r, int c)
{
int i = 0;
float *p1 = malloc(r * c * sizeof(float));
float **p2 = malloc( r * sizeof(float *));
for(i = 0; i < r; i++)
{
p2[i] = &p1[i * c];
}
return p2;
}
void free_room(float **p)
{
free(*p);
free(p);
}
void init(int row, int cul)
{
int i, j;
int cnt = 0;
for(i = 0; i < row; i++)
{
for(j = 0; j < cul; j++)
{
p[i][j] = b[cnt++];
}
}
}
void gs(float **p, int row, int cul) /* 高斯消元法*/
{
int i = 0;
int j = 0;
float tmp1,tmp2;
for(i = 0; i < row; i++)
{
tmp1 = p[i][i];
for(j = 0; j < cul; j++)
{
p[i][j] /= tmp1;
}
int k;
for(k = i + 1; k < row; k++)
{
tmp2 = p[k][i];
for(j = 0; j < cul; j++)
{
p[k][j] -= tmp2 * p[i][j];
}
}
}
}
void qiujie(int hang)
{
float y[hang];
int m = 0;
float tmp3;
int z = 0;
for(m = hang-1; m >= 0; m--)
{
tmp3 = 0;
for(z = hang-1; z > m; z--)
{
tmp3 += p[m][z] * y[z];
}
printf("y[%d] = %f\n", m, y[m] = (p[m][hang] - tmp3));
}
}
int main(void)
{
int m = 0;
int x = 0;
p = build_array(N, N+1);
init(N, N+1);
gs(p, N, N+1);
for(m = 0; m < N; m++)
{
for(x = 0; x < N + 1; x++)
{
printf(" %2f ", p[m][x]);
}
printf("\n");
}
qiujie(N);
free_room(p);
}
#include <stdlib.h>
#include <malloc.h>
#include <math.h>
#define N 3 /* 3个未知数,3个方程组 */
float **p = NULL;
float b[N * (N + 1)] ={2,1,1,28,
5,2,2,66,
10,5,4,137};
/* 3元方程组的数据, 自己可以随意修改数值, 还可以修改N 和浮点数组实现任意多阶方程组求解*/
float ** build_array(int r, int c)
{
int i = 0;
float *p1 = malloc(r * c * sizeof(float));
float **p2 = malloc( r * sizeof(float *));
for(i = 0; i < r; i++)
{
p2[i] = &p1[i * c];
}
return p2;
}
void free_room(float **p)
{
free(*p);
free(p);
}
void init(int row, int cul)
{
int i, j;
int cnt = 0;
for(i = 0; i < row; i++)
{
for(j = 0; j < cul; j++)
{
p[i][j] = b[cnt++];
}
}
}
void gs(float **p, int row, int cul) /* 高斯消元法*/
{
int i = 0;
int j = 0;
float tmp1,tmp2;
for(i = 0; i < row; i++)
{
tmp1 = p[i][i];
for(j = 0; j < cul; j++)
{
p[i][j] /= tmp1;
}
int k;
for(k = i + 1; k < row; k++)
{
tmp2 = p[k][i];
for(j = 0; j < cul; j++)
{
p[k][j] -= tmp2 * p[i][j];
}
}
}
}
void qiujie(int hang)
{
float y[hang];
int m = 0;
float tmp3;
int z = 0;
for(m = hang-1; m >= 0; m--)
{
tmp3 = 0;
for(z = hang-1; z > m; z--)
{
tmp3 += p[m][z] * y[z];
}
printf("y[%d] = %f\n", m, y[m] = (p[m][hang] - tmp3));
}
}
int main(void)
{
int m = 0;
int x = 0;
p = build_array(N, N+1);
init(N, N+1);
gs(p, N, N+1);
for(m = 0; m < N; m++)
{
for(x = 0; x < N + 1; x++)
{
printf(" %2f ", p[m][x]);
}
printf("\n");
}
qiujie(N);
free_room(p);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
东莞大凡
2024-11-14 广告
2024-11-14 广告
标定板认准大凡光学科技,专业生产研发厂家,专业从事光学影像测量仪,光学投影测量仪.光学三维测量仪,光学二维测量仪,光学二维测量仪,光学三维测量仪,光学二维测量仪.的研发生产销售。东莞市大凡光学科技有限公司创立于 2018 年,公司总部坐落于...
点击进入详情页
本回答由东莞大凡提供
展开全部
输入数据以后判定一下解的情况,然后用克莱姆法则算一下.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询