| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1608 人关注过本帖
标题:追赶法解线性方程组出线的问题!
只看楼主 加入收藏
xiaozhu3333
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-9-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
追赶法解线性方程组出线的问题!
/*************************************************************************
Program:marks(math3-7.c)
Programmer:zhuhao'feng
TESTED/COMPILED-Windows xp/Borland Turbo c 2.0
*************************************************************************/
#include<stdio.h>
#include<math.h>
void main()
{
    float a[3][3] = {5,1,0,1,5,1,0,1,5}, b[3] = {17,14,7},x[3] = {0},y[3] = {0};
    float temp;
    int i,j,k;
    for(i = 0;i < 3;i ++)
    {
    temp = 0;
    for(j = 0,k = i + 1;j < i;j ++)
        temp += a[j][i]*a[i][j];
    a[i][i] = a[i][i] - temp;
    a[i][k] = a[i][k]/a[i][i];
    }
    y[0] = b[0]/a[0][0];
    for(i = 1;i < 3;i ++)
    {
    temp = 0;
    for(j = 0;j < i;j ++)
        temp += y[j]*a[i][j];
    y[i] = (b[i] - temp)/a[i][i];
    }
    printf("the changed array is:\n");
    for(i = 0;i < 3;i ++)
    {
    for(j = 0;j < 3;j ++)
        printf("%10.5f",a[i][j]);
    printf("|%10.5f\n",y[i]);
    }
    x[2] = y[2];
    for(i = 1;i >= 0;i --)
    {
    temp = 0;
    for(j = 2;j > i;j --)
        temp += x[j]*a[i][j];
    x[i] = y[i] - temp;
    }
    printf("the array answer is x[3]=[");
    for(i = 0;i < 3;i ++)
    printf("%10.5f",x[i]);
    printf("]\n");
}
我调试的时候发现数组b[0]的值在红线处自动变化。
我在windows和Linux下都调试出线问题
请高手解答
搜索更多相关主题的帖子: 线性方程 
2009-09-17 22:06
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:14 
不是在你红线外出界哟,
for(i = 0;i < 3;i ++)
    {
    temp = 0;
    for(j = 0,k = i + 1;j < i;j ++)
        temp += a[j][i]*a[i][j];
    a[i][i] = a[i][i] - temp;
    a[i][k] = a[i][k]/a[i][i]; /* 是在这条,如i值是2,a[i][k]就是越限了。 */
   }

努力—前进—变老—退休—入土
2009-09-17 22:13
xiaozhu3333
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-9-17
收藏
得分:0 
谢谢楼您提出来的问题!
当时我也想过这个问题,
追赶法解线性方程组的时,下面代码
    for(i = 0;i < 3;i ++)
    {
    temp = 0;
    for(j = 0,k = i + 1;j < i;j ++)
        temp += a[j][i]*a[i][j];
    a[i][i] = a[i][i] - temp;
    a[i][k] = a[i][k]/a[i][i];
    }
当i = 2越界后。a[i][i]就变为了a[2][2],是数组的最后一个变量了。
而a[i][k]变为a[2][3]没法赋值。
从而达到了LU分解的目的。
个人观点!
2009-09-17 22:45
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
在TC上可以通过,在别的编译器上可能会提示错误。你的想法应适何在TC编译上。

努力—前进—变老—退休—入土
2009-09-17 22:58
xiaozhu3333
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-9-17
收藏
得分:0 
我调试的时候发现数组b[0]的值在红线处自动随机变化。
这是为什么?
请高手解答
2009-09-17 23:24
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
谈不上高手,讨论讨论。
原因就在你的a[i][k]越界时赋了值,b数组首地址是接在a数组后,a[2][3]刚好是b的首地址,你对a[2][3]赋值,就是对b[0]赋了值。b[0]被改动,就不是原值了。

努力—前进—变老—退休—入土
2009-09-17 23:38
快速回复:追赶法解线性方程组出线的问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019867 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved