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

📄 分段线性插值.cpp

📁 数值计算程序:分段线性插值
💻 CPP
字号:
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <Malloc.h>
#include <iostream.h>
double f(double x)
{
 return exp(x)+10*x-2;
}
double f(double x,double y)
{
   return y-2.0*x/y;
}
void main()
{
  cout<<"******分段线性插值******"<<endl;
  double x0,y1=0,a=0,b=0,temp;
  double *x,*y;
  int num;
  cout<<"输入要分的段数:";
  cin>>num;
  x=(double *)malloc(sizeof(double)*num);
  y=(double *)malloc(sizeof(double)*num);
  int i,j,seg=0;
  while(seg<num)
  {
    cout<<"x["<<seg<<"]=";
    cin>>x[seg];
    y[seg]=f(x[seg]);
	seg++;
  }
  for(i=0;i<seg-1;i++)
	  for(j=0;j<seg-1;j++)
	  {
		  if(x[j]>x[j+1]) 
		  {temp=x[j];x[j]=x[j+1];x[j+1]=temp;
		   temp=y[j];y[j]=y[j+1];y[j+1]=temp;
		  }
		  else if(x[j]==x[j+1])
		    cout<<"Can't have same values!"<<endl;
	  }
	 
  cout<<"Please input x:";
  while(cin>>x0)
  {
  for(i=0;i<seg;i++)
  {
     if(x0>=x[i] && x0<=x[i+1])
     {
       if(i!=seg)
       {
       y1+=(x0-x[i+1])/(x[i]-x[i+1])*y[i]+(x0-x[i])/(x[i+1]-x[i])*y[i+1]/1.0;
       a=(y[i]-y[i+1])/(x[i]-x[i+1])/1.0;
       b=(x[i]*y[i+1]-x[i+1]*y[i])/(x[i]-x[i+1])/1.0;
       }
       else y1+=0;
     }
  }
  if(b==0) cout<<"Li(x)="<<a<<"x"<<endl;
  else if(b>0) cout<<"Li(x)="<<a<<"x+"<<b<<endl;
  else cout<<"Li(x)="<<a<<"x"<<b<<endl;
  cout<<"f(x)="<<f(x0)<<"  "<<"一次分段插值:S1="<<y1<<endl;
  cout<<"误差是:"<<fabs(f(x0)-y1)<<endl;
  y1=0;a=0;b=0;
  }
  free(x);
  free(y);
  getch();
  return;
}

⌨️ 快捷键说明

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