数值分析上机实习报告西南交通大学.docx
《数值分析上机实习报告西南交通大学.docx》由会员分享,可在线阅读,更多相关《数值分析上机实习报告西南交通大学.docx(15页珍藏版)》请在冰豆网上搜索。
![数值分析上机实习报告西南交通大学.docx](https://file1.bdocx.com/fileroot1/2022-10/29/58a6ee62-2611-4070-a80d-0a55ded2b60e/58a6ee62-2611-4070-a80d-0a55ded2b60e1.gif)
数值分析上机实习报告西南交通大学
数值分析上机实习报告
姓名:
学号:
专业:
大地测量学与测量工程
电话:
序言
1.所用程序语言:
本次数值分析上机实习采用Visualc#作为程序设计语言,利用Visualc#可视化的编程实现方法,采用对话框形式进行设计计算程序界面,并将结果用表格或文档的格式给出。
2.程序概述:
(1)第一题是采用牛顿法和steffensen法分别对两个题进行分析,编好程序后分别带入不同的初值,观察与真实值的差别,分析出初值对结果的影响,分析两种方法的收敛速度。
(2)第二题使用Visualc#程序设计语言完成了“松弛因子对SOR法收敛速度的影响”,通过在可视化界面下输入不同的n和w值,点击按钮直接可看到迭代次数及计算结果,观察了不同的松弛因子w对收敛速度的影响。
目录
一.用牛顿法,及牛顿-Steffensen法3
1.计算结果3
2.结果分析5
3.程序清单5
二.松弛因子对SOR法收敛速度的影响8
1.迭代次数计算结果8
2.计算X()结果10
3.对比分析12
4.程序清单:
12
三.实习总结14
实验课题
(一)用牛顿法,及牛顿-Steffensen法
题目:
分别用牛顿法,及牛顿-Steffensen法
(1)求ln(x+sinx)=0的根。
初值x0分别取0.1,1,1.5,2,4进行计算。
(2)求sinx=0的根。
初值x0分别取1,1.4,1.6,1.8,3进行计算。
分析其中遇到的现象与问题。
1、计算结果
由于比较多每种方法中只选取了其中两个的图片例在下面:
2、结果分析
通过对以上的牛顿法和steffensen法的练习,我发现在初值的选取很重要,好的初值选出后可以很快的达到预定的精度,要是选的不好就很慢,而且在有的时候得出的还是非数字,所以初始值的选取很重要。
3.程序清单
编程实现程序清单如下所示:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
namespace数值分析一
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
privatevoidbutton3_Click(objectsender,EventArgse)
{
this.Close();
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
if(radioButton1.Checked)
{
try
{
inti=0;
double[]x=newdouble[5];
x[0]=double.Parse(textBox1.Text);
listBox1.Items.Clear();
for(i=0;i<4;i++)
{
x[i+1]=x[i]-(System.Math.Log(x[i]+System.Math.Sin(x[i])))/
((1+System.Math.Cos(x[i]))/(x[i]+System.Math.Sin(x[i])));
listBox1.Items.Add(x[i+1].ToString());
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}
elseif(radioButton2.Checked)
{
try
{
inti=0;
double[]x=newdouble[5];
x[0]=double.Parse(textBox1.Text);
listBox1.Items.Clear();
for(i=0;i<4;i++)
{
x[i+1]=x[i]-(1-System.Math.Sin(x[i])-x[i])*(1-System.Math.Sin(x[i])-x[i])/
((1-System.Math.Sin(1-System.Math.Sin(x[i])))-2*(1-System.Math.Sin(x[i]))+x[i]);
listBox1.Items.Add(x[i+1].ToString());
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
if(radioButton3.Checked)
{
try
{
inti=0;
double[]x=newdouble[5];
x[0]=double.Parse(textBox2.Text);
listBox1.Items.Clear();
for(i=0;i<4;i++)
{
x[i+1]=x[i]-System.Math.Sin(x[i])/System.Math.Cos(x[i]);
listBox1.Items.Add(x[i+1].ToString());
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}
elseif(radioButton4.Checked)
{
try
{
inti=0;
double[]x=newdouble[5];
x[0]=double.Parse(textBox2.Text);
listBox1.Items.Clear();
for(i=0;i<4;i++)
{
x[i+1]=x[i]-(System.Math.Asin(System.Math.Tan(x[i]))-x[i])*(System.Math.Asin(System.Math.Tan(x[i]))-x[i])/
(System.Math.Asin(System.Math.Tan((System.Math.Asin(System.Math.Tan(x[i])))))
-2*(System.Math.Asin(System.Math.Tan(x[i])))+x[i]);
listBox1.Items.Add(x[i+1].ToString());
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}
}
}
}
实验课题
(二)松弛因子对SOR法收敛速度的影响
二、编写一个用SOR法解方程组得计算机程序,其中
要求程序中不存系数矩阵A,分别对不同的阶数取w=1.1,1.2,...,1.9进行迭代,记录近似解x(k)达到||x(k)-x(k-1)||<10-6时所用的迭代次数k,观察松弛因子对收敛速度的影响,并观察当w0或w2会有什么影响?
1、迭代次数计算结果
(1)当n=10时,w=1.3,1.4,1.5,1.6,1.7,1.8由于太多仅列出其中四个,所求的迭代次数结果如下:
(2)当n=20时,求其迭代次数方法如上,只写出当w=1.1,1.3,1.5,1.7时的迭代次数,计算结果如下:
2、计算x()结果
(1)当n=10,由于松弛因子较多,在此取松弛因子分别为1.1、1.3、1.5、1.9的情况下迭代后的x()的值,所求的x()的结果分别如下所示:
w=1.1w=1.3w=1.5
w=1.9
(2)当n=20,由于松弛因子较多,在此取松弛因子分别为1.1、1.3、1.5、1.9的情况下迭代后的x()的值,所求的x()的结果分别如下所示
w=1.1w=1.3w=1.5
w=1.9
3、对比分析
分析对比实验结果可得:
w=0或2时,不进行迭代,迭代次数结果直接为0,松弛法迭代不收敛;当0当w<0或w>2时,程序计算结果返回迭代次数,求得的x()的值显示为非数字,表明当w<0或w>2时,松弛法迭代是不收敛的。
4、程序清单
利用C#编程实现程序清单如下所示:
publicstringSOR(double[,]a,double[]b,double[]x0,intn,doublew)
{
inti=0;
intj=0;
intk=0;
intM=0;
double[]x=newdouble[n+1];
stringYYY=null;
doubleerr=0;
double[]XI=newdouble[n+1];
doublee=1E-06;
double[]Item1=new[];
double[]Item2=new[];
double[]Item3=new[];
double[]Item4=newdouble[n+1];
for(i=0;i<=n;i++){
x(i)=x0(i);
}
k=1;
while(k<=10000){
err=0;
for(i=0;i<=n;i++){
XI(i)=x(i);
Item1(i)=(1-w)*x(i);
Item2(i)=w*b(i)/a(i,i);
for(j=0;j<=i-1;j++){
Item3(i)+=w*a(i,j)*x(j)/a(i,i);
}
for(j=i+1;j<=n;j++){
Item4(i)+=w*a(i,j)*x(j)/a(i,i);
}
x(i)=Item1(i)+Item2(i)-Item3(i)-Item4(i);
Item1(i)=0;
Item2(i)=0;
Item3(i)=0;
Item4(i)=0;
if(errerr=Abs(XI(i)-x(i));
}
}
if(errfor(