首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

求逆矩阵的有关问题,大家帮忙看一下

2011-12-31 
求逆矩阵的问题,大家帮忙看一下我下了一个求解逆矩阵的函数,运行发现全是零,大家帮忙看一下在哪里出错了。

求逆矩阵的问题,大家帮忙看一下
我下了一个求解逆矩阵的函数,运行发现全是零,大家帮忙看一下在哪里出错了。下面是我的代码

#include   <stdio.h>
#include   <math.h>
#include   <stdlib.h>
#include   <string.h>

double   b[9];
double   a[9]={1,0,0,0,1,4,4,0,1};

int   gaus(double   a[],double   b[],int   n)

    {   int   *js,l,k,i,j,is,p,q;
        double   d,t;
        js=(int   *)malloc(n*sizeof(int));
        l=1;
        for   (k=0;k <=n-2;k++)
            {   d=0.0;
                for   (i=k;i <=n-1;i++)
                    for   (j=k;j <=n-1;j++)
                        {   t=fabs(a[i*n+j]);
                            if   (t> d)   {   d=t;   js[k]=j;   is=i;}
                        }
                if   (d+1.0==1.0)   l=0;
                else
                    {   if   (js[k]!=k)
                            for   (i=0;i <=n-1;i++)
                                {   p=i*n+k;   q=i*n+js[k];
                                    t=a[p];   a[p]=a[q];   a[q]=t;
                                }
                        if   (is!=k)
                            {   for   (j=k;j <=n-1;j++)
                                    {   p=k*n+j;   q=is*n+j;
                                        t=a[p];   a[p]=a[q];   a[q]=t;
                                    }
                                t=b[k];   b[k]=b[is];   b[is]=t;
                            }
                    }
                if   (l==0)
                    {   free(js);   printf( "fail\n ");
                        return(0);
                    }
                d=a[k*n+k];


                for   (j=k+1;j <=n-1;j++)
                    {   p=k*n+j;   a[p]=a[p]/d;}
                b[k]=b[k]/d;
                for   (i=k+1;i <=n-1;i++)
                    {   for   (j=k+1;j <=n-1;j++)
                            {   p=i*n+j;
                                a[p]=a[p]-a[i*n+k]*a[k*n+j];
                            }
                        b[i]=b[i]-a[i*n+k]*b[k];
                    }
            }
        d=a[(n-1)*n+n-1];
        if   (fabs(d)+1.0==1.0)
            {   free(js);   printf( "fail\n ");
                return(0);
            }
        b[n-1]=b[n-1]/d;
        for   (i=n-2;i> =0;i--)
            {   t=0.0;
                for   (j=i+1;j <=n-1;j++)
                    t=t+a[i*n+j]*b[j];
                b[i]=b[i]-t;
            }
        js[n-1]=n-1;
        for   (k=n-1;k> =0;k--)
            if   (js[k]!=k)
                {   t=b[k];   b[k]=b[js[k]];   b[js[k]]=t;}
        free(js);
        return(1);
    }

void   main()
{
int   i;
memset(b,0,9   *   sizeof(double));
        gaus(a,b,3);
for(i=1;i <10;i++)
{
printf( "%d   ",b[i-1]);
if((i%3)==0)
printf( "\n ");
}
}

[解决办法]
好长长长长长长长长长长长长长长长长长长长长
长长长长长长长长长长长长长长长长长长长长长
长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长
[解决办法]
看起来跟被混淆的的C#代码一样痛苦
[解决办法]
LZ是不是没分清C#和C啊~~用的是C哦~
下面是我用C#写的~
using System;
using System.Collections.Generic;

public class MyClass
{
public static void Main()
{

int [,] a = new int[4,4]{ {1,1,1,1},{2,2,2,2},{3,3,3,3},{4,4,4,4} };
//a={ 1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4 };

for (int i=0;i <4;i++)
{
for(int j=i+1;j <4;j++)
{
int temp;
temp=a[i,j];
a[i,j]=a[j,i];
a[j,i]=temp;
}
}
for(int i=0;i <4;i++)
{
for(int j=0;j <4;j++)
{
Console.Write( "{0} ",a[i,j]);



}
Console.WriteLine();
}
Console.ReadLine();
}

#region Helper methods

private static void WL(object text, params object[] args)
{
Console.WriteLine(text.ToString(), args);
}

private static void RL()
{
Console.ReadLine();
}

private static void Break()
{
System.Diagnostics.Debugger.Break();
}

#endregion
}

热点排行