声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 967|回复: 2

[编程技巧] 刚开始编程望各位大侠帮忙指正

[复制链接]
发表于 2006-11-17 21:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
function x=naivgauss(A,b);
n=length(b); x=zeros(n,1);
for k=1:n-1
    for i=k+1:n
        for j=k+1:n
            xmult=A(i,k)/A(k,k)
            A(i,j)=A(i,j)-xmult*A(i,j);
        end
        b(i)=b(i)-xmult*b(k);
    end
end
% back substitution
x(n)=b(n)/A(n,n);
for i=n-1:-1:1
    sum=b(i);
    for j=i+1:n
        sum=sum-A(i,j)*x(j);
    end
    x(i)=sum/A(i,j);
end


A=[0.001 2.000 3.000;-1.000 3.712 4.623;-2.000 1.072 5.643];
b=[1.000;2.000;3.000];
naivgauss(A,b)

xmult =

       -1000


xmult =

       -1000


xmult =

       -2000


xmult =

       -2000


xmult =

    0.5773


ans =

    0.0895
   -0.0819
    0.2985
事实上     用高斯消去法答案应该为-0.400    -0.09980    0.4000      且xmult 应该为三个值才对啊  怎么冒出5个    不知道哪里不行     刚开始编程望各位大侠帮忙指正!!!谢了先。

[ 本帖最后由 xinyuxf 于 2007-7-22 16:13 编辑 ]
回复
分享到:

使用道具 举报

发表于 2006-11-18 16:40 | 显示全部楼层
xmult出来的值是由于你的程序中
  1. xmult=A(i,k)/A(k,k)
复制代码


后边没有加分号造成的
改成
  1. xmult=A(i,k)/A(k,k);
复制代码

就好了

你的结果应该是ans给出来的三个值

至于和高斯消去法对不上,可能原因很多,说说你用的是什么算法吧
检查一下程序是否有什么地方搞错了
 楼主| 发表于 2006-11-18 17:15 | 显示全部楼层

麻烦看下 是不是循环语句出错了? 谢谢 (在线等!)

哦 谢谢   我的是用高斯顺序消去法(非选主元),为了看出哪里出问题,我特意将xmult,A都打出来。但是,程序出来后,在for j=k+1:n
            xmult=A(i,k)/A(k,k)
            A(i,j)=A(i,j)-xmult*A(i,j);   k列一直无法消去。将j=k+1:n改成j=k:n还是没办法消去k列(k列下三角应为零)。程序运行如下:
format  long;
A=[0.001 2.000 3.000;-1.000 3.712 4.623;-2.000 1.072 5.643];
b=[1.000;2.000;3.000];
naivgauss(A,b)

A =

  1.0e+003 *

   0.00000100000000   0.00200000000000   0.00300000000000
  -0.00100000000000   2.00371200000000   0.00462300000000
  -0.00200000000000   0.00107200000000   0.00564300000000


A =

  1.0e+003 *

   0.00000100000000   0.00200000000000   0.00300000000000
  -0.00100000000000   2.00371200000000   3.00462300000000
  -0.00200000000000   0.00107200000000   0.00564300000000


A =

  1.0e+003 *

   0.00000100000000   0.00200000000000   0.00300000000000
  -0.00100000000000   2.00371200000000   3.00462300000000
  -0.00200000000000   4.00107200000000   0.00564300000000


A =

  1.0e+003 *

   0.00000100000000   0.00200000000000   0.00300000000000
  -0.00100000000000   2.00371200000000   3.00462300000000
  -0.00200000000000   4.00107200000000   6.00564300000000


A =

  1.0e+003 *

   0.00000100000000   0.00200000000000   0.00300000000000
  -0.00100000000000   2.00371200000000   3.00462300000000
  -0.00200000000000   4.00107200000000   0.00592200424013


ans =

  -0.01149748295673
  -0.03403415510089
   0.36752025302399
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-19 18:33 , Processed in 0.061567 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表