v=vol(l,w,h); 这语句是什么意思?

v=vol(l,w,h); 这语句是什么意思?,第1张

#include <stdioh> //C语言头文件

int v,ar1,ar2,ar3; //定义全局整形变量的 v,ar1,ar2,ar3

int vol(int a,int b,int c) //定义整形函数需要传递3个参数,传入3个整形数据

{

v=abc;

ar1=ab;

ar2=bc;

ar3=ac;

return v; //函数执行完成返回V的值

}

void main( ) //主main函数

{

int v,l,w,h;

printf("input length,width and height\n");

scanf("%d%d%d",&l,&w,&h); //输入三个整形数据

v=vol(l,w,h); //将输入的三个数据分别传入进入vol函数中进行计算

printf("v=%d s1=%d s2=%d s3=%d\n",v,ar1,ar2,ar3);

}

用线性方程组的常用解法(例如高斯消元法)求解式(4-22),需要的运算量数量级为p3。但若利用系数矩阵的对称性和Toeplitz性质,则可得到一些高效算法,Levinson-Durbin算法就是其中最著名、应用最广泛的一种,其运算量数量级为p2。这是一种按阶次进行递推的算法,即首先以AR(0)和AR(1)模型参数作为初始条件,计算AR(2)模型参数;然后根据这些参数计算AR(3)模型参数,等等,一直到计算出AR(p)模型参数为止。这样,当整个迭代计算结束后,不仅求得了所需要的p阶AR模型的参数,而且还得到了所有各低阶模型的参数。

Levinson算法的关键是要推导出由AR(k)模型的参数计算AR(k+1)模型的参数的迭代计算公式。对式(4-22)分析可知,Yule-Walker方程的系数矩阵具有以下两个特点:

(1)从0阶开始逐渐增加阶次,可看出,某阶方程的系数矩阵包含了前面各阶系数矩阵(作为其子矩阵)。

(2)系数矩阵先进行列倒序再进行行倒序(或先行倒序再列倒序)后矩阵不变。

设已求得k阶Yule-Walker方程

地球物理信息处理基础

的参数{ak,1,ak,2,…,ak,k, },现求解k+1阶Yule-Walker方程

地球物理信息处理基础

为此,将k阶方程的系数矩阵增加一列和增加一行,成为下列形式的“扩大方程”

地球物理信息处理基础

扩大方程中的Dk由下式来确定

地球物理信息处理基础

利用前述系数矩阵的第二个特点,将扩大方程的行倒序,同时列也倒序,得“预备方程”

地球物理信息处理基础

将待求的k+1阶Yule-Walker方程的解表示成“扩大方程”解和“预备方程”解的线性组合形式

地球物理信息处理基础

ak+1,i=ak,i-γk+1ak,k+1-i,i=1,2,…,k

式中γk+1是待定系数,称为反射系数。用k+1阶系数矩阵

地球物理信息处理基础

去左乘上式各项,得到

地球物理信息处理基础

由该式可求出

地球物理信息处理基础

地球物理信息处理基础

由扩大方程的第一个方程可求出

地球物理信息处理基础

从上面的推导中可归纳出如下由k阶模型参数求k+1阶模型参数的计算公式:

地球物理信息处理基础

ak+1,i=ak,i-γk+1ak,k+1-i,i=1,2,…,k (4-24)

地球物理信息处理基础

对于AR(p)模型,递推计算直到k+1=p为止。将模型参数代入式(1-135),即可计算功率谱估计值:

地球物理信息处理基础

若在-π<ω≤π范围内的N个等间隔频率点上均匀采样,则上式可写成

地球物理信息处理基础

若N>p,则上式中在N-1>i>p时,应取ap,i=0。

如果自相关函数值不是已知的,而只知道N个观测数据xN(n),n=0,1,…,N-1,首先要用式(4-5)由xN(n)估计出自相关函数值,得 ,m=0,1,…,p。然后再用Levin-son算法根据 来计算AR(p)模型的参数。

为了书写简单,今后将k阶AR模型系数或k阶线性预测系数ak,i写成aki,而对于k+1阶来说,为了下标明确,仍写成ak+1,i。

/----------------------- threadc ----------------------------/

#include <processh>

#include <memoryh>

void func(int arg1,int ar2)

{

}

void ThrdProc(void arg)

{

int x,y;

memcpy(&x,(char)arg,sizeof(int));

memcpy(&y,(char)arg+sizeof(int),sizeof(int));

func(x,y);

}

void main()

{

int arg1 = 0;

int arg2 = 2;

char arg[8] = {0};

memcpy(arg, &arg1, sizeof(int));

memcpy(arg+sizeof(int), &arg2, sizeof(int));

_beginthread(ThrdProc,0,arg);

}

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

原文地址: http://outofmemory.cn/langs/12177244.html

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

发表评论

登录后才能评论

评论列表(0条)

保存