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

数值分析课程设计分析方案

郑州轻工业学院《数值分析》课程设计报告题目: 1.非线性方程求解 8.最小二乘法姓名:杨君芳院<系):数学与信息科学学院专业班级:信科 11-01学号:541110010148指导教师:汪远征时间:2018年12月30日至2018年1月4日摘要本文的内容主要属于数值代数问题的迭代解法和差值问题。

在VC++6.0环境下对非线性方程求根的三种迭代解法<即一般迭代法,牛顿迭代法和弦截法)的算法实现,将抽象问题转化为计算机编程的一般解法思想,实现运用计算机解非线性方程的根。

同时完成了运用最小二乘法的思想解决实际问题的简单设计,本文也对该程序设计的难点、解决技巧、每种方法的理论基础、程序的算法分析、功能分析、模块设计以及算法的优点、缺点和主要参考文献等进行了详细的作答。

,目录《数值分析》1课程设计报告1摘要2目录31 理论基础41.1 非线性方程的迭代解法41.2最小二乘法42 算法分析52.1 功能分析52.1.1非线性方程的迭代解法52.2 算法分析53 程序设计83.1 选单和主窗口设计83.1.1非线性方程的迭代解法83.1.2最小二乘法103.2 模块设计143.2.1非线性方程的迭代解法143.2.2 最小二乘法184 总结245 参考文献251 理论基础1.1 非线性方程的迭代解法1、 一般迭代法:首先将方程f<x )=0化为一个与它同解的方程x=f1<x ),任取一个初值x0,代入f1<x ),得到x1=f1<x0)再将x1代入f1<x )得到x2=f1<x1)以此类推,得到一个数列)(11k k x f x =+如果迭代格式产生的数列收敛,则迭代法收敛,得到的收敛值即为方程的根。

2、 牛顿迭代法:用迭代法解非线性方程总可以构造 x=f<x )=x —k<x )f<x )即迭代法)()(1k k k k x f x f x x '-=+为牛顿迭代法。

3、 弦截法:用牛顿法求函数的倒数使用不方便,则可以用)()()(1--k k k x f x f x f 代替)(k x f ',则)()()()(111--+---=k k k k k k k x x x f x f x f x x 即为弦截法1.2最小二乘法在研究两个变量之间的关系时,可以用回归分析的方法进行分析。

当确定了描述两个变量之间的回归模型后,就可以使用最小二乘法估计模型中的参数,进而建立经验方程。

简单地说,最小二乘的思想就是要使得观测点和估计点的距离的平方和达到最小。

里的“二乘”指的是用平方来度量观测点粤估计点的远近<在古汉语中“平方”称为“二乘”),“最小”指的是参数的估计值要保证各个观测点与估计点的距离的平方和达到最小。

2算法分析2.1功能分析2.1.1非线性方程的迭代解法用三个函数来实现非线性方程的三种解法,三种方法包括<即程序中的三个模块):1、用一般迭代的方法解非线性方程:编写函数FYiban(double x>设计一个迭代格式x=f1<x ),然后编写函数void Yiban(>调用函数FYiban(double x>进行循环迭代,直到得出的结果与前一个结果的差值的绝对值小于给定的值0.00001,即为计算结果2、 用牛顿法解非线性方程:编写函数FNewton(double x>计算)()(k k x f x f ',然后编写函数void Newton(>实现)()(1k k k k x f x f x x '-=+,其中调用函数FNewton(double x>进行循环迭代,直到得出的结果与前一个结果的差值的绝对值小于给定的值0.00001,即为方程的根3、 用弦截法解非线性方程:编写函数FXuanjie(double q,double r>计算原方程函数的导数,然后编写函数void Xuanjie(>实现)()()()(111--+---=k k k k k k k x x x f x f x f x x 其中调用函数FXuanjie(double q,double r>进行循环迭代,直到得出的结果与前一个结果的差值的绝对值小于给定的值0.00001,即为方程的根2.1.2最小二乘法已知数据对()(),1,2,,j jx y j n =,求多项式0()()mii i p x a x m n ==<∑使得20110(,,,)nm i n i j j j i a a a a x y ==⎛⎫Φ=- ⎪⎝⎭∑∑为最小,这就是一个最小二乘问题。

2.2算法分析通过上面各项功能的分析、分类、综合,按照模块化程序设计的要求,得到模块结构<作为后面选单设计的主要依据2.2.1非线性方程的迭代解法1、根据一般迭代公式:=+1k x )(k x f ,做出流程图如下:2、根据牛顿迭代公式:)()(1k k k k x f x f x x '-=+,做出流程图如下:3、根据弦截法迭代公式:)()()()(111--+---=k k k k k k k x x x f x f x f x x ,做出流程图如下:2.2.2最小二乘法用线性函数()p x a bx =+为例,拟合给定数据(),,1,2,,i i x y i m =。

算法描述:步骤1:输入m 值,及(),,1,2,,i i x y i m =。

步骤2:建立法方程组TA AX AY =。

步骤3:解法方程组。

步骤4:输出()p x a bx =+。

3程序设计3.1选单和主窗口设计3.1.1非线性方程的迭代解法主要的设计界面和代码#include <iostream.h>#include <stdio.h>#include <math.h>double f(double x>{return 2*pow(x,3>-x-1。

}double FYiban(double x>{return pow((x+1>/2,1.0/3>。

}double FNewton(double x>{return x-f(x>/(6*pow(x,2>-1>。

}double FXuanjie(double q,double r>{return q-f(q>*(q-r>/(f(q>-f(r>>。

}double x,x0,x1,x2,t。

void Yiban(>{x0=1.5。

t=1。

cout<<"一般线性迭代过程为:"<<endl。

while(t>=0.00001>{x1=FYiban(x0>。

t=x0-x1。

x0=x1。

printf("%.5lf\n",x0>。

}printf("一般线性迭代结果为:%.5lf\n\n",x0>。

}void Newton(>{x0=1.5。

t=1。

cout<<"用Newton迭代过程为:"<<endl。

while(t>=0.00001>{x1=FNewton(x0>。

t=x0-x1。

x0=x1。

printf("%.5lf\n",x0>。

}printf("用Newton迭代结果为:%.5lf\n\n",x0>。

}void Xuanjie(>{x0=1.5。

x1=1.4。

t=1。

cout<<"用弦截法迭代过程为:"<<endl。

while(t>=0.00001>{x2=FXuanjie(x1,x0>。

t=x1-x2。

x0=x1。

x1=x2。

printf("%.5lf\n",x0>。

}printf("用弦截法迭代结果为:%.5lf\n\n",x0>。

}void main(>{cout<<"&&+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n**\t\t\t\t\t\t\t\t &&"<<endl。

cout<<"&&\t选择用一般迭代法、牛顿法、弦截法求解方程:2*x^3-x-1=0\t &&"<<endl。

cout<<"&&\t\ta:一般迭代法\t\t\t\t\t &&"<<endl。

cout<<"&&\t\tb:牛顿法\t\t\t\t\t &&"<<endl。

cout<<"&&\t\tc:弦截法\t\t\t\t\t &&"<<endl。

cout<<"&&\t\td:三种方法<以供比较)\t\t\t\t &&"<<endl。

cout<<"&&+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&&"<<endl。

char c=getchar(>。

switch(c>{case 'a':Yiban(>。

break。

case 'b':Newton(>。

break。

case 'c':Xuanjie(>。

break。

case 'd':Yiban(>。

Newton(>。

Xuanjie(>。

}}3.1.2最小二乘法主要的设计界面和代码#include <iostream.h>#include<iomanip.h>#include<stdlib.h>#include<math.h>void Print(double **a,int m,int n>//输出函数{int i,j。

相关主题