📄 2_1.cpp
字号:
#include <fstream>
#include <iostream>
using namespace std;
void main()
{
long double u;
cin>>u;
ifstream fin;
ofstream fout;
fin.open("input.txt");
fout.open("output.txt");
int n;
long double P0,Pn,s;
int i,j,k;
fin>>n>>P0>>Pn;
long double *x=new long double[n+1];
long double *y=new long double[n+1];
long double *h=new long double[n];
long double *a=new long double[n+1];
long double *b1=new long double[n+1];
long double *b2=new long double[n+1];
long double *c=new long double[n+1];
long double *g=new long double[n+1];
long double *m=new long double[n+1];
while (u!=0)
{
for (i=0;i<=n;i++)
{
fin>>x[i]>>y[i];
}
for (i=0;i<n;i++)
{
h[i]=x[i+1]-x[i];
}
c[0]=1;
g[0]=3*(y[1]-y[0])/h[0]-P0*h[0]*0.5;
for (k=1;k<n;k++)
{
a[k]=h[k]/(h[k]+h[k-1]);
c[k]=1-a[k];
g[k]=3*(c[k]*(y[k+1]-y[k])/h[k]+a[k]*(y[k]-y[k-1])/h[k-1]);
}
a[n]=1;
g[n]=3*(y[n]-y[n-1])/h[n-1]+Pn*h[n-1]*0.5;
b1[0]=2;
b2[0]=0.5;
for (i=1;i<=n;i++)
{
b1[i]=2-a[i]*b2[i-1];
b2[i]=c[i]/b1[i];
}
g[0]=g[0]*0.5;
for (j=1;j<=n;j++)
{
g[j]=(g[j]-a[j]*g[j-1])/b1[j];
}
m[n]=g[n];
for (k=n-1;k>=0;k--)
{
m[k]=g[k]-b2[k]*m[k+1];
}
for (i=n-1;i>=0;i--)
{
if (u>=x[i])
{
s=0;
s=s+(h[i]+2*(u-x[i]))*(u-x[i+1])*(u-x[i+1])*y[i]/(h[i]*h[i]*h[i]);
s=s+(h[i]-2*(u-x[i+1]))*(u-x[i])*(u-x[i])*y[i+1]/(h[i]*h[i]*h[i]);
s=s+(u-x[i])*(u-x[i+1])*(u-x[i+1])*m[i]/(h[i]*h[i]);
s=s+(u-x[i+1])*(u-x[i])*(u-x[i])*m[i+1]/(h[i]*h[i]);
break;
}
}
cout<<s<<endl;
cin>>u;
}
fin.close();
fout.close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -