|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 村里小黑 于 2021-12-15 21:51 编辑
再进行解多元一次方程组的时候,采用转换成矩阵的方法,得出的结果与实际有偏差
参考数据
18526.000000 17234.000000 18016.000000 5206.000000 19384.000000 86170.000000
19864.000000 14435.000000 19001.000000 7128.000000 19386.000000 90530.000000
13065.000000 13652.000000 18162.000000 5872.000000 18088.000000 77650.000000
11366.000000 14517.000000 12878.000000 7636.000000 19333.000000 77190.000000
17521.000000 19798.000000 16263.000000 5871.000000 18069.000000 86330.000000
11883.000000 13295.000000 10642.000000 6524.000000 16062.000000 68190.000000
本人实现方法
- int i, j, m, t; //i,j,m,k,t 作为循环计数变量;n表示有n个未知数,即n元;r表示有r个方程组成方程组。
- float b = 0;
- float temp = {0};
- if(r<n)
- sh_printf("方程有无穷解\n");
- if(r==n)
- {
- sh_printf("方程有唯一解\n");
- for(t=0; t<n-1; t++) //循环次数:当t=0时,仅将a[1][0],a[2][0],a[2][1]的值转换为0;t=1时,才将其转换成最简型阶梯矩阵。
- for(m=0; m<n; m++){ //m表示第m列
- while(1){
- if(buf[m][m] != 0)
- break;
- if((m + 1) >= n)
- break;
- for(i = 0; i < n + 1; i++){
- temp = buf[m][i];
- buf[m][i] = buf[m + 1][i];
- buf[m + 1][i] = temp;
- }
- }
- for(j=0; j<n; j++) //j表示第j行
- if(j!=m)
- {
- b= buf[j][m]/buf[m][m];
- for(i=0; i<n+1; i++) //因为一行的每个元素均要进行运算等式两边才会相等。
- buf[j][i] -= buf[m][i]*b;
- b = 0;
- }
- }
- for(j=0; j<n; j++) //为了将其转换成单位矩阵,见《线性代数》
- {
- buf[j][n] /=buf[j][j];
- buf[j][j] /=buf[j][j];
- }
- }
- for(j=0; j<r; j++)
- result[j] = buf[j][n];
复制代码
求大佬帮助,给出一个更优的可以直接测试的算法 |
|