⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 toeplz.cpp

📁 这是C++数值算法(第二版)的源代码,其中包含了目前一些比较常用的数值计算的算法.
💻 CPP
字号:
#include "nr.h"

void NR::toeplz(Vec_I_DP &r, Vec_O_DP &x, Vec_I_DP &y)
{
	int j,k,m,m1,m2,n,n1;
	DP pp,pt1,pt2,qq,qt1,qt2,sd,sgd,sgn,shn,sxn;

	n=y.size();
	n1=n-1;
	if (r[n1] == 0.0) nrerror("toeplz-1 singular principal minor");
	x[0]=y[0]/r[n1];
	if (n1 == 0) return;
	Vec_DP g(n1),h(n1);
	g[0]=r[n1-1]/r[n1];
	h[0]=r[n1+1]/r[n1];
	for (m=0;m<n;m++) {
		m1=m+1;
		sxn = -y[m1];
		sd = -r[n1];
		for (j=0;j<m+1;j++) {
			sxn += r[n1+m1-j]*x[j];
			sd += r[n1+m1-j]*g[m-j];
		}
		if (sd == 0.0) nrerror("toeplz-2 singular principal minor");
		x[m1]=sxn/sd;
		for (j=0;j<m+1;j++)
			x[j] -= x[m1]*g[m-j];
		if (m1 == n1) return;
		sgn = -r[n1-m1-1];
		shn = -r[n1+m1+1];
		sgd = -r[n1];
		for (j=0;j<m+1;j++) {
			sgn += r[n1+j-m1]*g[j];
			shn += r[n1+m1-j]*h[j];
			sgd += r[n1+j-m1]*h[m-j];
		}
		if (sgd == 0.0) nrerror("toeplz-3 singular principal minor");
		g[m1]=sgn/sgd;
		h[m1]=shn/sd;
		k=m;
		m2=(m+2) >> 1;
		pp=g[m1];
		qq=h[m1];
		for (j=0;j<m2;j++) {
			pt1=g[j];
			pt2=g[k];
			qt1=h[j];
			qt2=h[k];
			g[j]=pt1-pp*qt2;
			g[k]=pt2-pp*qt1;
			h[j]=qt1-qq*pt2;
			h[k--]=qt2-qq*pt1;
		}
	}
	nrerror("toeplz - should not arrive here!");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -