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

📄 b.c

📁 求解差值真的范围场馆哟个自行车不是你沙发是但书
💻 C
字号:
#include<stdio.h>
#include<math.h>
void tridag(double a[],double b[],double c[],double r[],double u[],int n)
{
	int j;
   const int nmax=100;
   double gam[100];
   double bet=b[1];
   if(b[1]==0.0)
   {
      return;
   }
   u[1]=r[1]/bet;
   for(j=2;j<=n;j++)
   {
    gam[j]=c[j-1]/bet;
	bet=b[j]-a[j]*gam[j];
	if(bet==0.0)
	{
	 return;
	}
	u[j]=(r[j]-a[j]*u[j-1])/bet;
   }
   for(j=n-1;j>=1;j--)
   {
    u[j]=u[j]-gam[j+1]*u[j+1];
   }
}


double b3(double x)
{
	if(fabs(x)>=2)
		return 0.0;
	else if(fabs(x)<=1)
		return fabs(x)*fabs(x)*fabs(x)/2.0-x*x+2.0/3.0;
	else
		return -fabs(x)*fabs(x)*fabs(x)/6.0+x*x-2*fabs(x)+4.0/3.0;
}



void BSpline(double x[],double y[],double h,int n,int k,double m,double y0,double yn)
{
	int i;
	double s=0;
	double F[100];
	double a[100];
	double b[100];
	double c1[100];
	double F1[100];
	double c[100];
	if(k==2)
	{
		for(i=2;i<n-1;i++)
			F[i]=6*y[i];
		F[1]=6*y[1]-y[0]+h*h*y0/6.0;
		F[n-1]=6*y[n-1]-y[n]+h*h*yn/6.0;
        for(i=2;i<n;i++)
			a[i]=1;
		for(i=1;i<n-1;i++)
			c1[i]=1;
		for(i=1;i<n;i++)
			b[i]=4;
	    tridag(a,b,c1,F,c,n-1);
        c[0]=y[0]-(h*h/6.0)*y0;
		c[n+2]=2*c[0]-c[1]+h*h*y0;
		c[n]=y[n]-(h*h/6.0)*yn;
		c[n+1]=2*c[n]-c[n-1]+h*h*yn;
	}
	else
	{
		for(i=1;i<n;i++)
			F[i]=6*y[i];
		F[0]=6*y[0]+2*h*y0;
		F[n]=6*y[n]-2*h*yn;
		for(i=2;i<=n;i++)
			a[i]=1;
		a[n+1]=2;
		for(i=1;i<=n+1;i++)
			b[i]=4;
		for(i=2;i<=n;i++)
			c1[i]=1;
		c1[1]=2;
		for(i=1;i<=n+1;i++)
			F1[i]=F[i-1];
        tridag(a,b,c1,F1,c,n-1);
		c[n+2]=c[1]-2*h*y0;
		c[n+1]=c[n-1]+2*h*yn;

	}
	    s=c[6]*b3(m)+c[0]*b3(m-1)+c[1]*b3(m-2)+c[2]*b3(m-3)+c[3]*b3(m-4)+c[4]*b3(m-5)+c[5]*b3(m-6);
        printf("%f\n",s);
}




main()
{
	double m=3.0/2.0;
	double x[]={1,2,3,4,5};
	double y[]={2,4,8,4,2};
	double c[100]={0};
    BSpline(x,y,1,4,2,m,0,0);
}

⌨️ 快捷键说明

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