我的程序实现不了!——一道《计算方法》的题目
*这是一题《计算方法》的编程题目:已知直升飞机旋转机翼外形轮廓上的某些形值点(共19个点)的横坐标和列坐标,用数值积分来求机翼的面积
*/
#include "stdafx.h"
#include <math.h>
#include <iostream.h>
#define N 18 //共N+1个节点
#define Q 4 //采用柯特斯公式,即选用M+1个节点
double X[N],Y[N];
double f(int n,double x)//拉格朗日插值函数
{
double p,y=0;
for(int k=0;k<=n;k++)
{
p=1;
for(int j=0;j<=n&&k!=j;j++)
{
p*=(x-X[j])/(X[k]-X[j]);
}
y+=p*Y[k];
}
return y;
}
void main()
{
double A[N],B[N];
double y[Q],M[Q],K;//分别存放所需节点的x值、y值和最终结果
double a,b;//分别存放最前节点和最后节点的x值
int i,j;
cout<<"请依次输入节点的值x,y:"<<endl;
for(i=0;i<=N;i++)
{
cin>>A[i]>>B[i];
}
a=y[0]=B[0];
b=y[Q]=B[N];
for(i=1;i<Q;i++)
{
y[i]=a+i*(b-a)/Q;
}
int k=0;
while(k<=Q)
{//选择在插值计算中所需的节点
double T,z[N];
for(i=0;i<=N;i++)
{
X[i]=A[i];
Y[i]=B[i];
}
for( i=0;i<N;i++)
z[i]=X[i];
for(i=0;i<N;i++)
{
X[i]-=y[k];
X[i]=fabs(X[i]);
}
for(i=0;i<N-1;i++)
for(int j=i;X[j]>X[j+1]&&j>=0;j--)
{
T=X[j];X[j]=X[j+1];X[j+1]=T;
T=Y[j];Y[j]=Y[j+1];Y[j+1]=T;
T=z[j];z[j]=z[j+1];z[j+1]=T;
}
for(i=0;i<N;i++)
X[i]=z[i];
M[k]=f(N,y[k]);
k++;
}
K=(b-a)*(7M[0]+32M[1]+12M[2]+32M[3]+7M[4])/90;
cout<<"翅膀面积为:"<<K<<endl;
}
问题点数:0、回复次数:0Top




