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

hs0014 2007-03-26 09:56:56
我下了一个求解逆矩阵的函数,运行发现全是零,大家帮忙看一下在哪里出错了。下面是我的代码

#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");
}
}
...全文
217 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
caimsh 2007-03-26
  • 打赏
  • 举报
回复
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
}
ufoteam 2007-03-26
  • 打赏
  • 举报
回复
看起来跟被混淆的的C#代码一样痛苦
ufoteam 2007-03-26
  • 打赏
  • 举报
回复
好长长长长长长长长长长长长长长长长长长长长
长长长长长长长长长长长长长长长长长长长长长
长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧