
给你“rinvc ”
不知道是不是你要的,随便找了个数值分析算法里头的
#include "stdlibh"
#include "mathh"
#include "stdioh"
int rinv(n,a)
int n;
double a[];
{ int is,js,i,j,k,l,u,v;
double d,p;
is=malloc(nsizeof(int));
js=malloc(nsizeof(int));
for (k=0; k=n-1; k++)
{ d=00;
for (i=k; i=n-1; i++)
for (j=k; j=n-1; j++)
{ l=in+j; p=fabs(a[l]);
if (p>d) { d=p; is[k]=i; js[k]=j;}
}
if (d+10==10)
{ free(is); free(js); printf("errnot inv\n");
return(0);
}
if (is[k]!=k)
for (j=0; j=n-1; j++)
{ u=kn+j; v=is[k]n+j;
p=a[u]; a[u]=a[v]; a[v]=p;
}
if (js[k]!=k)
for (i=0; i=n-1; i++)
{ u=in+k; v=in+js[k];
p=a[u]; a[u]=a[v]; a[v]=p;
}
l=kn+k;
a[l]=10/a[l];
for (j=0; j=n-1; j++)
if (j!=k)
{ u=kn+j; a[u]=a[u]a[l];}
for (i=0; i=n-1; i++)
if (i!=k)
for (j=0; j=n-1; j++)
if (j!=k)
{ u=in+j;
a[u]=a[u]-a[in+k]a[kn+j];
}
for (i=0; i=n-1; i++)
if (i!=k)
{ u=in+k; a[u]=-a[u]a[l];}
}
for (k=n-1; k>=0; k--)
{ if (js[k]!=k)
for (j=0; j=n-1; j++)
{ u=kn+j; v=js[k]n+j;
p=a[u]; a[u]=a[v]; a[v]=p;
}
if (is[k]!=k)
for (i=0; i=n-1; i++)
{ u=in+k; v=in+is[k];
p=a[u]; a[u]=a[v]; a[v]=p;
}
}
free(is); free(js);
return(1);
}
%% 连续空间系统状态方程
% X_dot(t) = A(t)X(t) + B(t)W(t)
%% 转化为离散时间系统状态方程
% X(k+1) = FX(k) + GW(k)
T = 01;% T为采样时间间隔
[F,G]=c2d(A,B,T);
卡尔曼滤波只是一个算法,而C51是基于标准C语言扩展而来的,你只要明白卡尔曼滤波的数学表达算法,就能用C语言写出来卡尔曼滤波的程序,所以,C语言完全可以写出来卡尔曼滤波算法,C51自然也就能
但是,这里有个但是!!!
C51虽然是基于标准C语言扩展的,但是,C51是用在51内核单片机上的,而以51内核为内核组成的单片机,大都硬件架构简单,内存容量小,没有专用的硬件乘法器,而且是8位的,基于以上原因,在实际应用中,51单片机是无法完成卡尔曼滤波的
1 是没有专用硬件乘法/除法器
2 卡尔曼滤波是一种递归算法,需要极大的内存支持,51一般只有几K内存,不足以支持庞大的
卡尔曼滤波算法
所以,如果你一定要卡尔曼滤波算法,换个强大的MCU吧
以上就是关于C语言下的卡尔曼滤波程序,编译有错啊,比如 #include "rinv.c"这个文件在哪儿还有整个程序没有函数体全部的内容,包括:C语言下的卡尔曼滤波程序,编译有错啊,比如 #include "rinv.c"这个文件在哪儿还有整个程序没有函数体、连续系统卡尔曼滤波的Matlab程序、C51能不能实现卡尔曼滤波,如果可以能不能给我代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)