数值分析 C语言 代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息与软件工程学院
标准实验报告
(实验)课程名称计算数学基础电子科技大学教务处制表
电子科技大学
实验报告
学生姓名:何安迪学号:2013220701020指导教师:顾小丰
实验地点:实验中心306 实验时间:2015. 11.28
一、实验室名称:实验中心306
二、实验项目名称:计算数学(数值分析)的核心算法实现
三、实验原理
通过《计算数学基础》的课堂学习,参照《数值分析简明教程》的内容,熟练掌握插值方法、数值积分、方程求根的迭代法、线性方程组的迭代法、线性方程组的直接法等解题技巧。使用算法对例题进行求解,并且通过在Visual Studio 中编写C程序实现解题的算法。
四、实验目的
基于课程的学习,使用Visual Studio编写C程序实现计算数学(数值分析)的核心算法,熟练掌握课堂上学习的各种算法,充分理解课本上的知识,并将之用于实例求解。
五、实验内容
1、最小二乘法:在[-1, 1]区间上取N = 21个等距结点,计算出以相应节点上
e x 的值做为数据样本,作出m = 3,5,7,9次的最小二乘多项式。并计算出不同阶最小二乘多项式给出的最小偏差
六、实验环境
20
2
()(())
m i i
i
m y x y σ
=
=-
∑
OS:Microsoft Windows 7 64bit
环境:Microsoft Visual Studio 2012
七、实验步骤
1. 实验一:最小二乘法,同样用到上面构造的高斯函数,根据最小二乘法的分划和多项式拟合公式构建实验二的函数void problem2(),代码如下。
void problem2() // 最小二乘法
{
double x[21] = { 0 }, y[21] = { 0 };
double a[4][4] = { 0 }, result_a[4] = { 0 };
double b[6][6] = { 0 }, result_b[6] = { 0 };
double c[8][8] = { 0 }, result_c[8] = { 0 };
double d[10][10] = { 0 }, result_d[10] = { 0 };
double right[10] = { 0 };
double *result[4] = { result_a, result_b, result_c, result_d };
for (int i = 0; i < 21; i++)
{
x[i] = -1 + i * 2 / 20.0;
y[i] = exp(x[i]);
}
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
for (int k = 0; k < 21; k++)
{
d[i][j] += pow(x[k], i + j);
}
if (i < 4 && j < 4)
{
a[i][j] = d[i][j]; b[i][j] = d[i][j]; c[i][j] = d[i][j];
}
elseif (i < 6 && j < 6)
{
b[i][j] = d[i][j]; c[i][j] = d[i][j];
}
elseif (i < 8 && j < 8)
{
c[i][j] = d[i][j];
}
}
}
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 21; j++)
{
right[i] += pow(x[j], i)*y[j];
}
}
Gauss(*a, right, result_a, 4);
Gauss(*b, right, result_b, 6);
Gauss(*c, right, result_c, 8);
Gauss(*d, right, result_d, 10);
for (int i = 0; i < 4; i++)
{
int k = i * 2 + 3;
printf("在[-1,1]内e^x的%d阶最小二乘多项式为:\n", k);
for (int j = 0; j < k; j++)
{
if (j == 0)
printf(" %10.8f*x^%d", result[i][j], j);
else
{
if (j % 4 == 0)
printf("\n");
printf("+%10.8f*x^%d", result[i][j], j);
}
}
printf("\n\n");
}
}
八、实验数据及结果分析
1. 主界面,供选择模拟哪个实验的算法。
图1 主界面
2. 录入2,选择实验一,计算得3、5、6、9阶的最小二乘多项式结果如下,根据验证结果正确。
图3 实验2结果
九、实验结论
在计算数学基础的这个小实验中,我重新系统地复习了数值分析中的最小二乘法。成功地用C/C++模拟了上述算法,对本学期的课程所学的内容有了进一步的巩固和提升。