C语言下的卡尔曼滤波程序,编译有错啊,比如 #include "rinv.c"这个文件在哪儿?还有整个程序没有函数体?

C语言下的卡尔曼滤波程序,编译有错啊,比如 #include "rinv.c"这个文件在哪儿?还有整个程序没有函数体?,第1张

给你“rinv.c ”

不知道是不是你要的,随便找了个数值分析算法里头的

#include "stdlib.h"

#include "math.h"

#include "stdio.h"

int rinv(n,a)

int n

double a[]

{ int *is,*js,i,j,k,l,u,v

double d,p

is=malloc(n*sizeof(int))

js=malloc(n*sizeof(int))

for (k=0k=n-1k++)

{ d=0.0

for (i=ki=n-1i++)

for (j=kj=n-1j++)

{ l=i*n+jp=fabs(a[l])

if (p>d) { d=pis[k]=ijs[k]=j}

}

if (d+1.0==1.0)

{ free(is)free(js)printf("err**not inv\n")

return(0)

}

if (is[k]!=k)

for (j=0j=n-1j++)

{ u=k*n+jv=is[k]*n+j

p=a[u]a[u]=a[v]a[v]=p

}

if (js[k]!=k)

for (i=0i=n-1i++)

{ u=i*n+kv=i*n+js[k]

p=a[u]a[u]=a[v]a[v]=p

}

l=k*n+k

a[l]=1.0/a[l]

for (j=0j=n-1j++)

if (j!=k)

{ u=k*n+ja[u]=a[u]*a[l]}

for (i=0i=n-1i++)

if (i!=k)

for (j=0j=n-1j++)

if (j!=k)

{ u=i*n+j

a[u]=a[u]-a[i*n+k]*a[k*n+j]

}

for (i=0i=n-1i++)

if (i!=k)

{ u=i*n+ka[u]=-a[u]*a[l]}

}

for (k=n-1k>=0k--)

{ if (js[k]!=k)

for (j=0j=n-1j++)

{ u=k*n+jv=js[k]*n+j

p=a[u]a[u]=a[v]a[v]=p

}

if (is[k]!=k)

for (i=0i=n-1i++)

{ u=i*n+kv=i*n+is[k]

p=a[u]a[u]=a[v]a[v]=p

}

}

free(is)free(js)

return(1)

}

#include <stdlib.h>

#include <math.h>

#include <stdio.h>

#include <iostream.h>

int rinv(double a[],int n)

void main()

{

int i,j

static double a[4][4]={0.2368,0.2471,0.2568,1.2671,1.1161,0.1254,0.1397,0.1490,0.1582,1.1675,0.1768,0.1871,0.1968,0.2071,1.2168,0.2271}

static double b[4][4]

for(i=0i<=3i++)

for(j=0j<=3j++)

b[i][j]=a[i][j]

i=rinv(a[0],4)

if(i!=0)

{cout<<"MAT A IS:"<<endl

for(i=0i<=3i++)

{for(j=0j<=3j++)

printf("%13.7e",b[i][j])

printf("\n")

}

printf("\n")

cout<<"MAT A- IS:"<<endl

for(i=0i<=3i++)

{for(j=0j<=3j++)

printf("%13.7e",a[i][j])

printf("\n")

}

}

}

int rinv(double a[],int n)

{ int *is,*js,i,j,k,l,u,v

double d,p

is=(int *)malloc(n*sizeof(int))

js=(int *)malloc(n*sizeof(int))

for(k=0k<=n-1k++)

{d=0.0

for(i=ki<=n-1i++)

for(j=kj<=n-1j++)

{

l=i*n+jp=fabs(a[1])

if (p>d){d=pis[k]=ijs[k]=j}

}

if (d+1.0==1.0)

{free(is)free(js)

printf("err**not inv\n")

return(0)

}

if(is[k]!=k)

for(j=0j<=n-1j++)

{u=k*n+jv=is[k]*n+j

p=a[u]a[u]=a[v]a[v]=p

}

if(js[k]!=k)

for(i=0i<=n-1i++)

{u=i*n+kv=i*n+js[k]

p=a[u]a[u]=a[v]a[v]=p

}

l=k*n+k

a[1]=1.0/a[1]

for(j=0j<=n-1j++)

if(j!=k)

{u=k*n+ja[u]=a[u]*a[1]}

for(i=0i<=n-1i++)

if(i!=k)

for(j=0j<=n-1j++)

if(j!=k)

{u=i*n+j

a[u]=a[u]-a[i*n+k]*a[k*n+j]

}

for(i=0i<=n-1i++)

if(i!=k)

{u=i*n+ka[u]=-a[u]*a[l]}

}

for(k=n-1k>=0k--)

{if(js[k]!=k)

for(j=0j<=n-1j++)

{u=k*n+jv=js[k]*n+j

p=a[u]a[u]=a[v]a[v]=p

}

if(is[k]!=k)

for(i=0i<=n-1i++)

{u=i*n+kv=i*n+is[k]

p=a[u]a[u]=a[v]a[v]=p

}

}

free(is)free(js)

return(1)

}

问题1:rinv函数要声明.如果不声明,就把函数放到main前面去.

问题2:=rinv(a,4)不能这么写,因为a是一个二维数组,而你的函数定义为一维的,因此我改为i=rinv(a[0],4)效果是一样的.

你本身传递的就是数组,并不需要返回数组,直接在你的函数内更改二维数组的值的就行了(注意,如果在是函数内创建的数组,再返回会有问题,出了函数这个变量就无效了),比如如下

#include<stdio.h>

void fun(int (*pIntPtr)[4]) {

*(*pIntPtr + 0)=20//将a[0][0]改为20

*(*(pIntPtr+3) + 2)=30//将a[3][2]改为30

}

int main() {

int A[4][4] = {{10,2,3,1},{12,4,5,1},{14,7,8,1},{15,9,2,1}}

int i,j

fun(A)

for(i=0i<4i++)

{

for(j=0j<4j++) printf("%4d",A[i][j])

printf("\n")

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7925466.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存