数值分析 C语言 代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++模拟了上述算法,对本学期的课程所学的内容有了进一步的巩固和提升。

相关文档
最新文档