数值分析实验误差分析.doc

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a[j][i] =temp;
c[i]=temp;//保存首行信息
}
//消去l=aik/akk
k=j;
while(k<n-1){
i=j;
b[0] =a[k+1][j];//保留第一个系数防止后面破坏
for(;i<n+1;i++)
{
//b[1]=b[0]*c[i]/a[j][j];
a[k+1][i]=b[0]*c[i]/a[j][j]-a[k+1][i];
}
// showarray(a);
for (i=0;i<n;i++)
{
cout<<"x"<<i<<"="<<x[i];
}
cout<<endl;
}
void showarray(float a[n][n+1])
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n+1;j++)
{
cout<<"x2"<<a[i][j]<<" ";
x3=-(b-sqrt(q))/2;
x4=c/xБайду номын сангаас;
printf("%f\n",x1);
printf("%f\n",x2);
printf("%f\n",x3);
printf("%f\n",x4);
}
佛山科学技术学院
实验报告
课程名称数值分析实验
实验项目Lagrange插值
专业班级09计算机科学与技术2班姓名张国烽学号2009314215
i
0
1
2
3
xi
0.40
0.55
0.65
0.80
yi
0.41075
0.57815
0.69675
0.88811
五、实验结果及分析
1.拉格朗日插值
2.牛顿插值
六、思考题
(无)
七、心得体会及实验改进建议
通过这次实验我对拉格朗日插值和牛顿插值的原理的认识变得更加的深刻,明白了跟多编写此程序时要注意的问题。
八、实验代码
void getdata()
{
cin>>n;
for(int i=0;i<n+1;i++)
{
cin>>xi[i]>>yi[i];
}
cin>>value_x;
}
void init(),
{
int i,j;
for(i=0;i<n+1;i++)
{
fenzi[i]=value_x-xi[i];
}
for(i=0;i<n+1;i++)
void main()
{
int i,j;
int n;//行数
// printf("请输入行数\n");
// printf("n= ");
// scanf("%d",&n);
float a[3][4]={{2,1,-3,1},{4,1,-2,4},{3,1,-1,6}};
float b[3][4]={{0.101,2.304,3.555,1.183},{-1.347,3.712,4.623,2.137},{-2.835,1.072,5.643,3.035}};
sum*=fenzi[j]/fenmu[k][j];
}
sum*=yi[k];
result+=sum;
}
//printf("result=%lf\n",result);
cout<<"result="<<result<<endl;
}
int main()
{
getdata();
init();
result();
构造一个函数y=f(x)通过全部节点,即 (i=0、1、…n)
再用f(x)计算插值,即
2.拉格朗日(Lagrange)多项式插值
Lagrange插值多项式:
3.牛顿(Newton)插值公式
四、实验内容步骤
1.给定 ,构造Lagrange插值函数计算 。
2.已知4个点的函数值如下表,用Newton插值法求x=0.596时的函数值。
if(j ==n)
{
cout<<endl;
}
}
}
system("pause");
return 0;
}
佛山科学技术学院
实验报告
课程名称数值分析实验
实验项目高斯消去法解方程
专业班级09计算机科学与技术2班姓名张国烽学号2009314215
指导教师成绩日期
一、实验目的
1.掌握求解线性方程组的高斯消去法---列选主元在计算机上的算法实现。
2.程序具有一定的通用性,程序运行时先输入一个数n表示方程含有的未知数个数,然后输入每个线性方程的系数和常数,求出线性方程组的解。
指导教师成绩日期
一、实验目的
1.掌握利用Lagrange插值法及Newton插值法求函数值并编程实现。
2.程序具有一定的通用性,程序运行时先输入节点的个数n,然后输入各节点的值( ),最后输入要求的自变量x的值,输出对应的函数值。
二、实验设备
安装有C、C++或MATLAB的计算机。
三、实验原理
1.插值的基本原理(求解插值问题的基本思路)
(1)选主元,找 使得
(2)如果 ,则矩阵 奇异,程序结束;否则执行(3)。
(3)如果 ,则交换第 行与第 行对应元素位置, , 。
(4)消元,对 ,计算 对 ,计算
步骤2:回代过程:
(1)若 则矩阵奇异,程序结束;否则执行(2)。
(2) 对 ,计算
四、实验内容步骤
利用列选主元高斯消去法求解线性方程组
{
for(j=0;j<n+1;j++)
{
fenmu[i][j]=xi[i]-xi[j];
}
}
}
void result()
{
float sum=1,result=0;
for(int k=0;k<n+1;k++)
{
sum=1;
for(int j=0;j<n+1;j++)
{
if(j==k) continue;
实验报告
课程名称数值分析实验
实验项目误差分析
专业班级姓名学号
指导教师成绩日期
一、实验目的
1.了解误差分析对数值计算的重要性。
2.掌握避免或减小误差的基本方法。
二、实验设备
安装有C、C++或MATLAB的计算机。
三、实验原理
根据不同的算法,得到的结果的精度是不一样的。
四、实验内容步骤
求方程ax2+bx+c=0的根,其中a=1,b= -(5×108+1),c=5×108
采用如下两种计算方案,在计算机上编程计算,将计算结果记录下来,并分析产生误差的原因。
方案一:
方案二:
要求:编写程序实现该算法;调试程序,检查输出结果。
五、实验结果及分析
比起方案一,方案二更为精确。
六、思考题
思考题:为了防止误差危害现象的产生,以保证计算结果的可靠性,数值运算中应注意哪些原则?试举例说明。
八、实验代码
#include<stdio.h>
#include<iostream>
#include <cmath>
using namespace std;
//高斯消去法
void Gauss(float a[3][4]);
void showarray(float a[3][4]);
const int n=3;
二、实验设备
安装有C、C++或MATLAB的计算机。
三、实验原理
1.高斯消去法基本思路
设有方程组 ,设 是可逆矩阵。高斯消去法的基本思想就是将矩阵的初等行变换作用于方程组的增广矩阵 ,将其中的 变换成一个上三角矩阵,然后求解这个三角形方程组。
2.列主元高斯消去法计算步骤
将方程组用增广矩阵 表示。
步骤1:消元过程,对
八、实验代码
#include<stdio.h>
#include<math.h>
void main()
{
float a=1,b=-(500000000+1),c=500000000,q;
float x1,x2,x3,x4;
q=b*b-4*a*c;
x1=(-b+sqrt(q))/2;
x2=(-b-sqrt(q))/2;
}
k =k+1;
}
}
//求解
for (i=0;i<n;i++)
{
x[i] =0;
}
float sum=0;
for (i=n-1;i>=0;i--)
{
for(j=i+1;j<n;j++)
{
sum =sum+a[i][j]*x[j];
}
x[i] =(a[i][n]-sum)/(a[i][i]);
sum =0;
#include<iostream>
#include<string>
#include<cmath>
#define Max 100
using namespace std;
float xi[Max],yi[Max],value_x;
int n;
float fenzi[Max],fenmu[Max][Max];
五、实验结果及分析
第一组数据为:x0=0.333333 x1=7.33333 x2=2.33333
第二组数据为:x0=0.398234 x1=0.0137951 x2=0.335144
六、思考题
七、心得体会及实验改进建议
本次实验因为对高斯消去法基本思路的认识不够深刻,使我在实验中遇到了非常多的小错误,所以修改程序占用了很多的时间。经过和同学的讨论,知道实验步骤一的消元过程存在着错误。
答:数值运算的时候,要注意运算负号的优先级,模糊的时候要加上括号以避免错误。调用函数的时候,要注意类型的对应。例如调用pow ( double , double )的时候,里面的参数是double型的。
七、心得体会及实验改进建议
通过这次的实验,更加清楚调用函数的时候该注意一些小问题,例如数据的类型和调用函数。同时让我更了解分析误差以及如何去缩小误差。
Gauss(a);
Gauss(b);
}
void Gauss(float a[n][n+1])
{
int max=0;
int i,j,k;
float b[n+1];//临时
float c[n+1];//
float x[n];//求解的x集合
float temp;
int couts=0;
// showarray(a);
for (j=0;j<n;j++)
{
max =j;
i=j;
//选主元素
for (;i<n;i++)
{
if(abs(a[i][j])>abs(a[max][j]))
{max =i;}
}
//交换
i=j;
for (;i<n+1;i++)
{
temp =a[max][i];
a[max][i]=a[j][i];
相关文档
最新文档