当前位置:文档之家› 数值分析课程设计

数值分析课程设计

淮海工学院计算机工程学院课程设计报告书课程名:《数值分析》题目:数值分析课程设计班级:学号:姓名:数值分析课程设计课程设计要求1、研究第一导丝盘速度y与电流周波x的关系。

2、数据拟合问题运用样条差值方法求出温度变化的拟合曲线。

课程设计目的1、通过编程加深对三次样条插值及曲线拟合的最小二乘法的理解;2、学习用计算机解决工程问题,主要包括数据处理与分析。

课程设计环境visual C++ 6.0课程设计内容课程设计题目1:合成纤维抽丝工段中第一导丝盘的速度对丝的质量有很大的影响,第一丝盘的速度和电流周波有重要关系。

下面是一组实例数据:其中x代表电流周波,y代表第一导丝盘的速度课程设计题目3:在天气预报网站上获得你家乡所在城市当天24小时温度变化的数据,认真观察分析其变化趋势,在此基础上运用样条差值方法求出温度变化的拟合曲线。

然后将该函数曲线打印出来并与原来的温度变化数据形成的曲线进行比较,给出结论。

写出你研究的心得体会。

课程设计步骤1、利用最小二乘法写出题1的公式和算法;2、利用excel表格画出数据拟合后题1的图像;3、在Visual C++ 6.0中编写出相应的代码;4、搜索11月12日南通当地一天的温度变化数据;5、在Visual C++ 6.0中编写出相应的代码;6、利用excel表格画出数据拟合后题3的图像课程设计结果课程设计题目1数值拟合解:根据所给数据,在excel窗口运行:x=[49.2 50.0 49.3 49.0 49.0 49.5 49.8 49.9 50.2 50.2] y=[16.7 17.0 16.8 16.6 16.7 16.8 16.9 17.0 17.0 17.1]课程设计题目3数据为:X=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23];Y=[12,12,11,12,12,12,12,12,13,15,16,17,17,18,17,17,17,16,15,15,15,15,14,14];源代码为:第一题:#include<iostream>#include"math.h"using namespace std;//double x[100],y[100];int main(){int i;double k,b;double sum1=0,sum2=0,sum3=0,sum4=0;double x[10]={49.2,50.0,49.3,49.0,49.0,49.5,49.8,49.9,50.2,50.2};double y[10]={16.7,17.0,16.8,16.6,16.7,16.8,16.9,17.0,17.0,17.1};for(i=0;i<10;i++){sum1+=x[i]*y[i];sum2+=x[i];sum3+=y[i];sum4+=x[i]*x[i];}// cout<<sum1<<endl;k=sum1/sum4;b=(sum3-sum2*k)/10;cout<<"k="<<k<<" "<<"b="<<b<<endl;cout<<"y="<<k<<"x+"<<b<<endl;double start=x[0],end=x[9],result;for(double j=start;j<end;j+=0.01){result=k*j+b;cout<<"x="<<j<<" "<<"y= "<<result<<endl;}return 0;}第三题:#include<iomanip>#include"math.h"#include<iostream>using namespace std;double a[100],b[100],c[100],d[100];double aa[100],bb[100],cc[100],dd[100],M[100];void translate(double x[],double y[],int n){ //根据输入数据x[]和y[]求出三对角矩阵double h[100],f[100];int i,j;int flag=1;int k;float s;for(j=0;j<n-1;j++){h[j]=x[j+1]-x[j];}for(j=0;j<n-1;j++){f[j]=(y[j+1]-y[j])/h[j];}for(j=1;j<=n-2;j++){a[j]=h[j-1]/(h[j-1]+h[j]);c[j]=h[j]/(h[j-1]+h[j]);d[j]=6*(f[j]-f[j-1])/(h[j-1]+h[j]);}cout<<"a[i]"<<" ";for(i=1;i<=n-2;i++){cout<<setiosflags(ios::fixed)<<setprecision(5);cout<<a[i]<<" ";}cout<<endl;cout<<"c[i]"<<" ";for(i=1;i<=n-2;i++){cout<<setiosflags(ios::fixed)<<setprecision(5);cout<<c[i]<<" ";}cout<<endl;cout<<"d[i]"<<" ";for(i=1;i<=n-2;i++){cout<<setiosflags(ios::fixed)<<setprecision(4);cout<<d[i]<<" ";}cout<<endl;cout<<"b[i]"<<" ";for(i=1;i<=n-1;i++){b[i]=2;cout<<b[i]<<" ";}cout<<endl;for(i=0;i<n-2;i++){ //使数组下标从0开始aa[i]=a[i+1];cc[i]=c[i+1];dd[i]=d[i+1];}for(j=0;j<n-1;j++){ //使数组下标从0开始bb[j]=b[j+1];}//用追赶法求三对角矩阵for(k=0;k<n-2;k++){//注意此处不用循环,与高斯消去法不同。

因为存在许多零bb[k+1]=bb[k+1]-(aa[k+1]/bb[k])*cc[k];dd[k+1]=dd[k+1]-(aa[k+1]/bb[k])*dd[k];//a[i]=0.000000;}M[n-2]=dd[n-2]/bb[n-2];for(i=n-3;i>=0;i--){s=dd[i];s=s-cc[i]*M[i+1];//此处也不用循环M[i]=s/bb[i];}cout<<"此方程的解为:"<<endl;for(i=0;i<n-2;i++){cout<<"M["<<i+1<<"]="<<setiosflags(ios::showpoint)<<setprecision(4)<<M[i]<<endl;}for(k=n-1;k>=0;k--){ //使数组下标从0开始M[0]=M[n-1]=0;if(k==n-1||k==0)M[k]=0;elseM[k]=M[k-1];}for(i=0;i<n;i++){cout<<M[i]<<" ";}cout<<endl;//输出三次样条差值函数for(j=0;j<n-1;j++){if(j==0){cout<<"当"<<"("<<x[j]<<"≤x≤"<<x[j+1]<<")"<<"时候:"<<endl;cout<<"S(x)="<<M[j+1]/(6*h[j])<<"*(x-"<<x[j]<<")^3"<<"+"<<(y[j]-(M[j]*h[j]*h[j])/6.0)/h[j]<<"*("<<x[j+1]<<"-x)"<<"+"<<(y[j+1]-(M[j+1]*h[j]*h[j])/6.0)/h[j]<<"*(x-"<<x[j]<<")"<<endl;}else if(j==n-2){cout<<"当"<<"("<<x[j]<<"≤x≤"<<x[j+1]<<")"<<"时候:"<<endl;cout<<"S(x)="<<M[j]/(6*h[j])<<"*("<<x[j+1]<<"-x)^3"<<"+"<<(y[j]-(M[j]*h[j]*h[j]) /6.0)/h[j]<<"*("<<x[j+1]<<"-x)"<<"+"<<(y[j+1]-(M[j+1]*h[j]*h[j])/6.0)/h[j]<<"*(x-"<<x[j]<<")"<<endl;}else{cout<<"当"<<"("<<x[j]<<"≤x≤"<<x[j+1]<<")"<<"时候:"<<endl;cout<<"S(x)="<<M[j]/(6*h[j])<<"*("<<x[j+1]<<"-x)^3"<<"+"<<M[j+1]/(6*h[j])<<"*(x-"<<x[j]<<")^3"< <"+"<<(y[j]-(M[j]*h[j]*h[j])/6.0)/h[j]<<"*("<<x[j+1]<<"-x)"<<"+"<<(y[j+1]-(M[j+1]*h[j]*h[j])/6.0)/h[j]<<"*(x-"<<x[j]<<")"<<endl;}}}int main(){double x[100],y[100];int n;cout<<"请输入数据的个数n"<<endl;cin>>n;cout<<"请输入x[i]"<<endl;for(int i=0;i<=n-1;i++){cin>>x[i];}cout<<"请输入y[j]"<<endl;for(int j=0;j<=n-1;j++){cin>>y[j];}translate(x,y,n);// run(a,b,c,d,n);return 0;}运行结果为:图一图二图三图四图五《数值分析》课程设计报告- 10 -图六图七图八课程设计体会。

相关主题