数值分析课程设计分析方案Word下载.docx

上传人:b****2 文档编号:3707660 上传时间:2023-05-02 格式:DOCX 页数:25 大小:69.20KB
下载 相关 举报
数值分析课程设计分析方案Word下载.docx_第1页
第1页 / 共25页
数值分析课程设计分析方案Word下载.docx_第2页
第2页 / 共25页
数值分析课程设计分析方案Word下载.docx_第3页
第3页 / 共25页
数值分析课程设计分析方案Word下载.docx_第4页
第4页 / 共25页
数值分析课程设计分析方案Word下载.docx_第5页
第5页 / 共25页
数值分析课程设计分析方案Word下载.docx_第6页
第6页 / 共25页
数值分析课程设计分析方案Word下载.docx_第7页
第7页 / 共25页
数值分析课程设计分析方案Word下载.docx_第8页
第8页 / 共25页
数值分析课程设计分析方案Word下载.docx_第9页
第9页 / 共25页
数值分析课程设计分析方案Word下载.docx_第10页
第10页 / 共25页
数值分析课程设计分析方案Word下载.docx_第11页
第11页 / 共25页
数值分析课程设计分析方案Word下载.docx_第12页
第12页 / 共25页
数值分析课程设计分析方案Word下载.docx_第13页
第13页 / 共25页
数值分析课程设计分析方案Word下载.docx_第14页
第14页 / 共25页
数值分析课程设计分析方案Word下载.docx_第15页
第15页 / 共25页
数值分析课程设计分析方案Word下载.docx_第16页
第16页 / 共25页
数值分析课程设计分析方案Word下载.docx_第17页
第17页 / 共25页
数值分析课程设计分析方案Word下载.docx_第18页
第18页 / 共25页
数值分析课程设计分析方案Word下载.docx_第19页
第19页 / 共25页
数值分析课程设计分析方案Word下载.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数值分析课程设计分析方案Word下载.docx

《数值分析课程设计分析方案Word下载.docx》由会员分享,可在线阅读,更多相关《数值分析课程设计分析方案Word下载.docx(25页珍藏版)》请在冰点文库上搜索。

数值分析课程设计分析方案Word下载.docx

x1)以此类推,得到一个数列

如果迭代格式产生的数列收敛,则迭代法收敛,得到的收敛值即为方程的根。

2、牛顿迭代法:

用迭代法解非线性方程总可以构造x=f<

x)=x—k<

x)f<

x)即迭代法

为牛顿迭代法。

3、弦截法:

用牛顿法求函数的倒数使用不方便,则可以用

代替

,则

即为弦截法

1.2最小二乘法

在研究两个变量之间的关系时,可以用回归分析的方法进行分析。

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

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

里的“二乘”指的是用平方来度量观测点粤估计点的远近<

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

2算法分析

2.1功能分析

2.1.1非线性方程的迭代解法

用三个函数来实现非线性方程的三种解法,三种方法包括<

即程序中的三个模块):

1、用一般迭代的方法解非线性方程:

编写函数FYiban(doublex>

设计一个迭代格式x=f1<

x),然后编写函数voidYiban(>

调用函数FYiban(doublex>

进行循环迭代,直到得出的结果与前一个结果的差值的绝对值小于给定的值0.00001,即为计算结果

2、用牛顿法解非线性方程:

编写函数FNewton(doublex>

计算

,然后编写函数voidNewton(>

实现

,其中调用函数FNewton(doublex>

进行循环迭代,直到得出的结果与前一个结果的差值的绝对值小于给定的值0.00001,即为方程的根

3、用弦截法解非线性方程:

编写函数FXuanjie(doubleq,doubler>

计算原方程函数的导数,然后编写函数voidXuanjie(>

其中调用函数FXuanjie(doubleq,doubler>

2.1.2最小二乘法

已知数据对

,求多项式

使得

为最小,这就是一个最小二乘问题。

2.2算法分析

通过上面各项功能的分析、分类、综合,按照模块化程序设计的要求,得到模块结构<

作为后面选单设计的主要依据

2.2.1非线性方程的迭代解法

1、根据一般迭代公式:

,做出流程图如下:

定义函数fyiban

定义并初始化变量,x。

x0,e=0.00001,k=1

输入初始值x

x0=x

xk=fyiban(x0>

k++

while|x0-x|>

e&

&

k<

1000

若k<

输出近似根x

提示信息

2、根据牛顿迭代公式:

定义函数fun

x=x0-fun(x0>

/dfun(x0>

3、根据弦截法迭代公式:

x=x0-_fxuanjie(x0>

2.2.2最小二乘法

用线性函数

为例,拟合给定数据

算法描述:

步骤1:

输入

值,及

步骤2:

建立法方程组

步骤3:

解法方程组。

步骤4:

输出

3程序设计

3.1选单和主窗口设计

3.1.1非线性方程的迭代解法

主要的设计界面和代码

#include<

iostream.h>

stdio.h>

math.h>

doublef(doublex>

{

return2*pow(x,3>

-x-1。

}

doubleFYiban(doublex>

returnpow((x+1>

/2,1.0/3>

doubleFNewton(doublex>

returnx-f(x>

/(6*pow(x,2>

-1>

doubleFXuanjie(doubleq,doubler>

returnq-f(q>

*(q-r>

/(f(q>

-f(r>

>

doublex,x0,x1,x2,t。

voidYiban(>

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"

voidNewton(>

用Newton迭代过程为:

x1=FNewton(x0>

用Newton迭代结果为:

voidXuanjie(>

x1=1.4。

用弦截法迭代过程为:

x2=FXuanjie(x1,x0>

t=x1-x2。

x1=x2。

用弦截法迭代结果为:

voidmain(>

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n**\t\t\t\t\t\t\t\t&

\t选择用一般迭代法、牛顿法、弦截法求解方程:

2*x^3-x-1=0\t&

\t\ta:

一般迭代法\t\t\t\t\t&

\t\tb:

牛顿法\t\t\t\t\t&

\t\tc:

弦截法\t\t\t\t\t&

\t\td:

三种方法<

以供比较)\t\t\t\t&

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&

charc=getchar(>

switch(c>

case'

a'

:

Yiban(>

break。

b'

Newton(>

c'

Xuanjie(>

d'

3.1.2最小二乘法

#include<

iomanip.h>

stdlib.h>

voidPrint(double**a,intm,intn>

//输出函数

inti,j。

for(i=0。

i<

m。

i++>

for(j=0。

j<

n。

j++>

{

cout<

setw(12>

a[i][j]。

}

cout<

//////////////////////////////////////////////////////////////////////

double**jzcj(double**a,intm,intn,double**b,intp,intq>

//矩阵乘积

double**c。

c=newdouble*[m]。

c[i]=newdouble[q]。

i<

i++>

j<

q。

{

c[i][j]=0。

for(intx=0。

x<

x++>

{

c[i][j]=c[i][j]+a[i][x]*b[x][j]。

}

Print(c,m,q>

returnc。

///////////////////////////////////////////////

double**jzdn(double**a,intm,intn>

//矩阵的逆

inti,j,k。

doublec,**b,**t。

b=newdouble*[m]。

//动态分配空间

b[i]=newdouble[m]。

t=newdouble*[m]。

t[i]=newdouble[m]。

/////////////////////////////////////////矩阵求逆

/////////////////////////////////合并构成增广矩阵

b[i][j]=a[i][j]。

for(j=m。

2*n。

if(i+m==j>

b[i][j]=1。

else

b[i][j]=0。

___________________________________求逆过程______________________________"

//输出增广矩阵

{

2*m。

b[i][j]。

\n"

/////////////////初等行变化求逆

c=b[i][i]。

for(j=i。

m*2。

b[i][j]/=c。

for(j=i+1。

{

c=b[j][i]。

for(k=i。

k<

k++>

b[j][k]=b[j][k]-c*b[i][k]。

for(i=m-1。

i>

=0。

i-->

for(j=i-1。

j>

j-->

t[i][j-m]=b[i][j]。

}

returnt。

//////////////////////////////////////////////

double**jzzz(double**a,intm,intn>

//矩阵转置

c=newdouble*[n]。

c[i]=newdouble[m]。

for(j=0。

//矩阵的转置

for(intk=0。

c[k][j]=a[j][k]。

Print(c,n,m>

double**a,**b,**d,**e,**f,**g,**h。

inti,j,m,n,p,q。

请输入矩阵a的行和列:

cin>

m>

a=newdouble*[m]。

a[i]=newdouble[m]。

请输入矩阵a的数据:

cin>

}//完成了对矩阵a的初始赋值

请输入矩阵b的行和列:

p>

b=newdouble*[p]。

p。

b[i]=newdouble[p]。

请输入矩阵b的数据:

}//完成了对矩阵b的初始赋值

_________________原始矩阵_______________"

Print(a,m,n>

//输出系数矩阵

Print(b,p,q>

//输出常数矩阵

系数矩阵a的转置矩阵1\n"

d=jzzz(a,m,n>

系数矩阵a的转置矩阵与系数矩阵a的乘积所得矩阵2\n"

e=jzcj(d,n,m,a,m,n>

系数矩阵a与其转置矩阵的乘积的逆矩阵3\n"

f=jzdn(e,n,n>

矩阵的逆\n"

Print(f,n,n>

系数矩阵a的转置矩阵与常数矩阵b的乘积所得矩阵4\n"

g=jzcj(d,n,m,b,p,q>

最小二乘解x,y\n5"

h=jzcj(f,n,n,g,n,q>

3.2模块设计

3.2.1非线性方程的迭代解法

针对每一个模块给出主要的界面和代码

3、弦截法

4、主函数模块:

3.2.2最小二乘法

1、输入矩阵a和b

cout<

for(i=0。

for(j=0。

cin>

b=newdouble*[p]。

b[i]=newdouble[p]。

Print(a,m,n>

Print(b,p,q>

2、系数矩阵a的转置矩阵1,系数矩阵a的转置矩阵与系数矩阵a的乘积所得矩阵2:

inti,j。

double**c。

c=newdouble*[n]。

c[i]=newdouble[m]。

for(intk=0。

c[k][j]=a[j][k]。

Print(c,n,m>

returnc。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2