非线性迭代实验报告
《数学实验》实验报告——迭代法

3.线性方程组的迭代求解
给定一个 n 元线性方程组
a11 x1 a12 x 2 a1 n xn 0 a x a x a x 0 21 1 22 2 2n n am 1 x1 am 2 x 2 amn xn 0
9
观察序列,并且判断极限。 Mathematica 程序如下:
当 x0=0.1,n=10 时,运行程序得
当 x0=0.5,n=10 时,运行程序得
当 x0=0.9,n=10 时,运行程序得
当 x0=1,n=10 时,运行程序得
实验结论:
10
由以上实验可得,函数 f(x)=x/2+1/x 的极限为 1.41421
运行程序结果如下:
实验结论:
试验中假设矩阵 A 的对角元素 aii<>0,i=1,2,3,…n.令 D=diag(a11,a12,,,….ann),则可以将 方程 Ax=b 转化成 x=(U+L)x+D-1b 其中 U 为下三角阵,L 为上三角阵。如果 U+L 的行列式 最大特征值的绝对值小于 1,则线性方程组有解且唯一。
写成 Ax=b 的形式, 再将其改写成 x=M*x=f 其中 M 是 n 阶矩阵, f=(f1,f2,f3,f4….fn)T 是 n 维列向量,给定 x0,由迭代 x(n+1)=M*x^n+f,n=0,1,2,3,4…..对给定的矩阵 M 数组 f 和 初始值 x0,由 x(n+1)=M*x^n+f,n=0,1,2,3,4…..用 mathematic 可得迭代结果。 迭代程序如下:
《数学实验》实验报告
班级 实验 内容 **** 学号 **** 姓名 实验 类别 **** 成绩 实验 时间
非线性迭代实验报告

探索实验二 非线性迭代一、实验背景与实验目的迭代是数学研究中的一个非常重要的工具,通过函数或向量函数由初始结点生成迭代结点列,也可通过函数或向量函数由初值(向量)生成迭代数列或向量列。
蛛网图也是一个有用的数学工具,可以帮助理解通过一元函数由初值生成的迭代数列的敛散性,也帮助理解平衡点(两平面曲线交点)的稳定性。
本实验在Mathematica 平台上首先利用蛛网图和迭代数列研究不动点的类型;其次通过蛛网图和迭代数列研究Logistic 映射,探索周期点的性质、认识混沌现象;第三通过迭代数列或向量列求解方程(组)而寻求有效的求解方法;最后,利用结点迭代探索分形的性质。
一、 实验计划1.迭代序列与不动点 1.1程序给定实数域上光滑的实值函数)(x f 以及初值0x ,定义数列)(1n n x f x =+, ,2,1,0=n (2.2.1)}{n x 称为)(x f 的一个迭代序列。
对函数的迭代过程,我们可以用几何图象来直观地显示它——“蜘蛛网”。
运行下列Mathematica 程序:Clear[f]f[x_] := (25*x - 85)/(x + 3); (实验时需改变函数) Solve[f[x]==x , x] (求出函数的不动点)g1=Plot[f[x], {x, -10, 20}, PlotStyle -> RGBColor[1, 0, 0], DisplayFunction -> Identity];g2=Plot[x, {x, -10, 10}, PlotStyle -> RGBColor[0, 1, 0], DisplayFunction -> Identity]; x0=5.5; r = {};r0=Graphics[{RGBColor[0, 0, 1], Line[{{x0, 0}, {x0, x0}}]}]; For[i = 1, i <= 100, i++,r=Append[r, Graphics[{RGBColor[0, 0, 1], Line[{{x0, x0},{x0, f[x0]}, {f[x0], f[x0]}}] }]]; x0=f[x0] ];Show[g1, g2, r, r0, PlotRange -> {-1, 20}, (PlotRange 控制图形上下范围) DisplayFunction -> $DisplayFunction] x[0]=x0;x[i_]:=f[x[i-1]]; (定义序列) t=Table[x[i],{i,1,10}]//N ListPlot[t] (散点图)1.2实验思路首先对函数38525+-=x x y 研究不动点,需要 (1)对Plot 中{x,-10,20}可改为{x,-50,50};对PlotRange 中{ -1,20}可改为{-50,50};(2)x0=5.5中5.5分别改为-30,-20,-5,-3.001,-2.999,-1,0,1,1.5,2.5,4,4.5, 4.9,4.999,5,5.1,5.001,6,10,16,17,18,20,30;(3)对t=Table[x[i],{i,1,20}]//N 中20分别改为100,200; (4)对i<=100中100分别改为200,500,1000。
非线性方程实根的加速法

山东师范大学数学科学学院实验报告实验课程:非线性方程(组)的解法实验项目:非线性方程实根的加速法姓名郭新国学号:200708020244 班级:二班专业:信计指导教师:朱爱玲完成日期:2010-6-20实验目的:掌握解非线性方程实根的简单迭代法的加速法、牛顿法加速法(下山法)与重根求解方法的上机编程运算.实验内容:问题分析和算法设计问题:1. 1. 用加权法加速技术求方程x = e-x在0.5附近的一个根.问题分析:假设g(x)=exp(-x),加权加速方法为迭代 x(k+1) = g(x(k)),修正 x(k+1) = (x(k+1)-L*x(k))/(1-L),其中L=dg/dx|(x_star),x_star = 0.5迭代4次就可以使得精度达到1e-4.主要程序代码:#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main(){int k;double x,xk,L,G,err;double g(double x);double dg(double x);k = 0;xk = 0.5;L = dg(xk);G = 1 - L;err = 1;while(err > 0.0001){x = g(xk); // 迭代x = (x - L*xk) / G; // 修正err = fabs(x - xk);xk = x;k++;}cout << "K-th iteration: " << k << endl;cout << "err= " << setprecision(12) << err << endl;cout << "x= " << setprecision(12) << x << endl;cout << "g(x)= " << setprecision(12) << g(x) << endl;return 0;}double g(double x){return (exp(-x));}double dg(double x){return (-exp(-x));}运行结果和总结运行结果:2.用埃特金迭代法求方程x2=x3-1在x0=1.5附近的根./*问题2 用Aitken Method迭代法求方程x^2=x^3-1在x0=1.5附近的根. (根所在的区间为[1,2])方程等价于 x = (x^2+1)^(1/3),简单迭代法适用其上Aitken Method:x(k+3) = x(k) - (x(k+1)-x(k))^2/(x(k+2)-2x(k+1)+x(k)),首两项可用简单迭代法给出*/#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main(){int k;double x,xk0,xk1,xk2,err;double f(double x);k = 0;xk0 = 1.5;xk1 = f(xk0);xk2 = f(xk1);err = 1.0;while(err > 0.00001){// 迭代序列 xk0,xk1,xk2,x...x = xk0 - pow((xk1 - xk0),2)/(xk2 - 2*xk1 + xk0);xk0 = xk1;xk1 = xk2;xk2 = x;err = fabs(xk2 - xk1);k++;}cout << "K-th iteration: " << k << endl;cout << "err= " << setprecision(12) << err << endl;cout << "x= " << setprecision(12) << x << endl;cout << "f(x)= " << setprecision(12) << f(x) << endl;return 0;}double f(double x){return cbrt(pow(x,2) + 1.0); // cbrt 立方根函数}运行结果:3.用Steffenson算法求方程x3–x – 1=0在(1,1.5)内的根 ./*问题3 用Steffenson算法求方程x^3 –x – 1=0在(1,1.5)内的根Steffenson Method:yk = f(x(k)), zk = f(yk), x(k+1) = x(k) - (yk - x(k))^2/(zk - 2yk + x(k));*/#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main(){int k;double x,xk,yk,zk,err;double f(double x);k = 0;xk = 1.5;yk = f(xk);zk = f(yk);err = 1.0;while(err > 0.0001){// 迭代序列 xk,x...x = xk - pow((yk - xk),2)/(zk - 2*yk + xk);yk = f(x);zk = f(yk);err = fabs(x - xk);xk = x;k++;}cout << "K-th iteration: " << k << endl;cout << "err= " << setprecision(12) << err << endl;cout << "x= " << setprecision(12) << x << endl;cout << "f(x)= " << setprecision(12) << f(x) << endl;return 0;}double f(double x){return (pow(x,3) - 1.0);}运算结果:4. 分别用牛顿法与牛顿加速法(下山法)法求方程013=--x x 在5.1=x 附近的一个根./*问题4 分别用牛顿法与牛顿加速法(下山法)法求方程x^3 –x – 1=0在1.5附近的一个根f(x) = x^3 - x - 1仅考虑牛顿加速法(下山法):x(k+1) = x(k) - tk * f(x(k))/f '(x(k))初值选为0.6*/#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main(){int k;double x,xk,fxk,t,direction,err;double f(double x);double df(double x);k = 0;xk = 0.6;err = 1.0;while(err > 0.000001){// 迭代序列 xk,x...t = 1.0;fxk = f(xk);direction = fxk/df(xk);while ( true ){x = xk - t*direction;if (fabs(f(x)) < fabs(fxk))break;else{t = t/2.0;continue;}}err = fabs(x - xk);xk = x;k++;// 每步迭代过程cout << "K-th iteration: " << k << endl;cout << "t = " << t << endl;cout << "err= " << setprecision(12) << err << endl;cout << "x= " << setprecision(12) << x << endl;cout << "f(x)= " << setprecision(12) << f(x) << endl;cout << endl;}return 0;}double f(double x){return (pow(x,3) - x - 1.0);}double df(double x){return (3.0*pow(x,2) - 1.0);}运算结果:5. 已知2=x 是方程044)(24=+-=x x x f 的二重根,用牛顿切线法和重根修正公式求解./*问题5. 已知x=sqrt(2)是方程f(x)=x^4-4*x^2+4=0 的二重根,用牛顿切线法和重根修正公式求解 仅考虑重根修正公式:x(k+1) = x(k) - m*f(x(k))/f ' (x(k)), m 为根的重数*/#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main(){int k;double x,xk,m,err;double f(double x);double df(double x);k = 0;m = 2.0;xk = 1.5;err = 1.0;while (err > 0.0001){// 迭代序列 xk,x...x = xk - m*f(xk)/df(xk);err = fabs(x - xk);xk = x;k++;}cout << "K-th iteration: " << k << endl;cout << "err= " << setprecision(12) << err << endl;cout << "x= " << setprecision(12) << x << endl;cout << "f(x)= " << setprecision(12) << f(x) << endl; return 0;}double f(double x){return (pow(x,4) - 4.0*pow(x,2) + 4.0);}double df(double x){return (4.0*pow(x,3) - 8.0*x);}运算结果:指导教师意见。
实验三牛顿迭代法和牛顿下山法

实验三牛顿迭代法和牛顿下山法(2学时)
牛顿迭代法和牛顿下山法是求解非线性方程的有效方法,要求熟练掌握牛顿迭代公式和牛顿下山法,并能够针对不同的非线性方程构造其迭代公式。
一、实验目的
1 .能熟练掌握牛顿迭代法和牛顿迭代法。
2 .掌握迭代的收敛性。
二、实验要求
1 .上机前作好充分准备,比较不用的方法解决相同问题的不同。
2 .编写Fortran程序,记录调试过程及结果。
3 .程序调试完后,在机器上检查运行结果。
4 .给出本实验的实验报告。
三、实验内容
1 .求解方程:f(x)=x3-x-1 的根。
2 .编写牛顿迭代法程序,取初值x0=1.3,迭代收敛的条件为前后迭代结果的差小于10—6。
3 .编写牛顿下山法程序,取初值0.6,迭代的收敛条件为前后迭代结果的差小于10—6。
4 .并用上述几种算法程序计算出上面方程的解。
四、实验步骤
•根据实验题目,给出解决问题的程序代码。
•上机输入和调试自己所编的程序。
•上机结束后,应整理出实验报告。
五、实验报告要求及记录、格式
按《数值计算方法》课程实验报告要求格式填写。
初值的选取对迭代法的影响实验报告

迭代法的分类
线性迭代法
适用于线性方程组的求解,如高斯-赛德尔迭代法、 雅可比迭代法等。
非线性迭代法
适用于非线性方程或方程组的求解,如牛顿法、拟牛 顿法等。
共轭梯度法
适用于大规模稀疏线性方程组的求解,具有较好的数 值稳定性和收敛性。
迭代法的收敛性
01
迭代法的收敛性是指随着迭代的进行,解的近似值会逐渐接近 于精确解。
实验方法
1
选择常用的迭代法,如雅可比迭代法、高斯-赛德 尔迭代法等
2
设计不同初值,观察迭代法的收敛速度和精度
3
通过实验数据对比,分析初值选取对迭代法的影 响
实验步骤
01
准备实验数据和迭代法所需的基础知识
02 设计不同初值,并记录迭代法的收敛速度和精度
03
对实验数据进行整理和分析,得出结论
04
实验结果与分析
迭代精度
初值的选择对迭代法的精度也有影 响,合适的初值可以提高迭代法的 精度。
不同初值对迭代法的影响
初始解的选取
不同的初始解会导致迭代法收敛到不同的解,因此初始解的选择 对迭代法的结果有很大影响。
初始误差
初始误差的大小也会影响迭代法的收敛速度和精度,初始误差越 大,迭代法需要的时间和迭代次数越多。
VS
本实验为实际应用中迭代法的选择和 使用提供了有益的参考。在处理具体 问题时,应充分考虑初值和参数的影 响,并采取适当的策略进行优化。
05
初值选取的影响
初值选取的重要性
迭代法的收敛性
初值的选择直接影响到迭代法的 收敛性,如果初值选择不当,迭 代法可能不收敛或收敛到错误的
结果。
迭代速度
初值的选择也会影响迭代法的速度 ,合适的初值可以加快迭代法的收 敛速度。
鲍威尔算法实验报告

一、实验目的1. 理解鲍威尔算法的基本原理和步骤。
2. 掌握鲍威尔算法在求解非线性方程组中的应用。
3. 分析鲍威尔算法的收敛速度和精度。
二、实验原理鲍威尔算法是一种迭代算法,用于求解非线性方程组。
该算法的基本思想是利用相邻迭代的残差向量构造一个线性方程组的系数矩阵,进而求出近似解。
具体步骤如下:1. 初始化:选择初始点 \( x_0 \) 和 \( x_1 \),计算初始残差向量\( \mathbf{r}_0 = f(x_0) \) 和 \( \mathbf{r}_1 = f(x_1) \)。
2. 构造系数矩阵:根据残差向量 \( \mathbf{r}_0 \) 和 \( \mathbf{r}_1 \) 构造系数矩阵 \( \mathbf{A} \)。
3. 求解线性方程组:求解线性方程组 \( \mathbf{A} \mathbf{x} =\mathbf{r}_1 \),得到系数 \( \mathbf{x} \)。
4. 更新近似解:根据系数 \( \mathbf{x} \) 更新近似解 \( x_2 = x_1 +\mathbf{x} \)。
5. 检查收敛性:计算新的残差向量 \( \mathbf{r}_2 = f(x_2) \),如果满足收敛条件,则停止迭代;否则,返回步骤2。
三、实验内容1. 选择非线性方程组:设非线性方程组为\[\begin{cases}f_1(x_1, x_2) = x_1^2 + x_2^2 - 1 = 0 \\f_2(x_1, x_2) = x_1^3 - x_2 - 1 = 0\end{cases}\]2. 选择初始点:取 \( x_0 = (0, 0) \) 和 \( x_1 = (1, 1) \)。
3. 运行鲍威尔算法:根据上述步骤,编写程序求解该非线性方程组。
四、实验结果与分析1. 实验结果:经过多次迭代,鲍威尔算法得到近似解为 \( x_1 \approx 0.5285 \),\( x_2 \approx 0.8572 \)。
实验一非线性方程组求解实验报告

计算方法实验报告专业班级:姓名:学号:实验成绩:1.【实验题目】非线性方程组求解2.【实验目的】(1).掌握二分法、迭代法、牛顿迭代法求方程近似根的基本思想与原理。
(2).掌握常用迭代算法的程序实现。
3.【实验内容】迭代法是求解非线性方程的基本方法,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。
考虑一个简单的代数方程,针对该方程,可以构造多种迭代法,如:取初始值,取,分别用以上迭代格式作实验,记录各算法的迭代过程4. 【实验要求】(1)取定某个初始值,按方案1~3对非线性方程求根,它们的收敛性如何?重复选取不同的初始值,反复实验。
请读者自行设计一种比较形象的记录方式(如利用Matlab的图形功能),分析三种迭代法的收敛性与初值选取的关系。
(2)对三个迭代格式的某一种,分别取不同的初始值进行迭代,结果如何?试分析迭代法对不同的初值是否有差异?(3)对代数方程,分别用方案1 用二分法求解;方案2 用牛顿法求解;5. 【算法描述】二分法算法步骤1)计算有根区间的端点a,b及预先给定的精度e。
2)计算中点(a+b)/2。
3)若f(x)f(a)<0,则x b,转向4);否则,x a,转向4).⇒⇒4)若b-a<e,则输出满足精度的根x,结束;否则转向2)。
牛顿法迭代法的计算步骤x01)给出初始近根及精度e。
2)计算。
x x x x f f 1000)(')(⇒-3)若|-|<e ,则转向4);否则转向2)。
x 1x 0x x 01⇒4)输出满足精度的根,结束。
x 16. 【源程序(带注释)】二分法#include<stdio.h>#include<math.h>#include<conio.h>#include<windows.h>float f(float x){float a;a=x*x*x-x-1;return a;} /*求函数值,如果求其它函数,只需改成其它函数即可*/ main(){float a,b,e,x; /* a,b 分别表示有根区间的左、右端点, e 是精度要求,x 区间中点值*/system("CLS");//清屏printf("对代数方程x^3-x-1=0,分别用\n 方案1 用二分法求解\n");printf(" \n please input data a =");scanf("%f",&a);printf(" \n please input data b=");scanf("%f",&b);if(f(a)*f(b)<0){while(f(x)!=0){x=(a+b)/2;if(f(x)*f(a)<0){b=x;if(fabs(b-a)<0.000001)break;elsecontinue;}else{a=x;if(fabs(b-a)<0.000001)break;else continue;}}printf("\n");x=(b+a)/2;printf("the root of f(x)=0 is x=%f\n",x);}elseprintf("\ not root! afresh input\n"); /*表示[a,b] 区间无根,重新选择有根区间*/getch();return(x);}牛顿法#include<stdio.h>#include<math.h>#include<conio.h>#include<windows.h>#define maxrept 1000 /*最大迭代次数*/float f(float x) {float a;a=x*x*x-x-1;return a; /*函数f(x) */}float df(float x) {return(1+exp(-x)); /* 函数f(x)的导数) (x f ′*/ }float iterate(float x) {float x1;x1=x-f(x)/df(x); /* 牛顿迭代函数iterate(x)=x-f(x) / ) (x f ′*/return(x1);}main() {float x0,x1,d;int k=0;//clrscr();system("CLS");printf("对代数方程x^3-x-1=0,分别用\n方案2 用牛顿法求解\n");printf("\n please input x0="); /* 输入迭代初值x0 */scanf("%f",&x0);printf("\n k xk\n");printf("\ %d %f\n",k,x0);do {k++;x1=iterate(x0);printf(" %d %f\n",k,x1);d=fabs(x1-x0);x0=x1;}while((d>=0.000001)&(k<maxrept));if(k<maxrept)printf("the root of f(x)=0 is x=%f, k=%d\n",x1,k);elseprintf("\n the iteration is failed!\n");getch();}7.【实验结果与分析总结(含运行结果截图)】。
科学计算与数学建模实验报告牛顿法求解非线性方程

科学计算与数学建模实验报告牛顿法求解非线性方程一、引言非线性方程是数学中的一个重要研究内容,其求解方法有很多,其中之一就是牛顿法。
牛顿法是一种迭代方法,通过不断逼近函数的零点来求解非线性方程。
在本实验中,我们将使用牛顿法来求解给定的非线性方程,并验证其有效性。
二、实验方法1.确定问题:给定非线性方程f(x)=0,需要求解方程的根。
2.初始化:选择一个初始解x_0,并给定停止准则,如迭代次数、函数误差等。
3.迭代计算:a)计算函数f(x)在x_i处的导数f'(x_i)。
b)利用牛顿迭代公式进行迭代计算:x_{i+1}=x_i-f(x_i)/f'(x_i)。
c)检查迭代终止条件,若满足条件则停止迭代,否则返回步骤a)继续迭代。
4.输出结果:输出迭代过程中的迭代次数和解x。
三、实验结果我们选择一个较为简单的非线性方程f(x)=x^2-2来进行牛顿法求解。
初始解选取为x_0=1,停止准则为函数误差小于等于0.0001根据上述计算方法,我们进行迭代计算,并记录迭代次数和解x的变化情况。
具体结果如下表所示:迭代次数解x-----------------11.521.416731.414241.4142(收敛)从表中可以看出,当迭代4次时,解x已经收敛于1.4142,符合停止准则,因此我们可以认为此时已经找到了方程的根。
四、实验讨论通过上述实验可以发现,牛顿法是一种有效的求解非线性方程的方法。
它利用了函数在特定点处的导数的信息来逼近函数的零点,从而实现了迭代计算。
同时,牛顿法的收敛速度比较快,迭代次数较少,可以在较短的时间内找到方程的根。
然而,牛顿法也存在一些不足之处。
首先,它对初始解的选择较为敏感,不同的初始解可能导致迭代结果的差异。
其次,牛顿法可能出现发散现象,即迭代过程无法收敛到方程的根。
因此,对于一些复杂的非线性方程,我们需要选择合适的方法来求解。
五、总结通过本次实验,我们了解了牛顿法求解非线性方程的基本过程,并验证了其有效性。
非线性方程实验报告

2009年——2010年第一学期合肥学院数理系实验报告课程名称:数值分析实验项目:数值积分实验类别:验证性专业班级:08数学与应用数学(2)姓名:卢王菲学号:0807022048 实验地点:7#604实验时间:2009—11-26指导教师:孙梅兰成绩:一.实验目的:理解并掌握二分法、不动点迭代、牛顿切线法及弦截法解非线性方程求根的原理,掌握相应的算法原理,通过计算机解决实验问题二.实验内容:1.求方程01)(3=--=x x x f 在5.1=x 附近的根(精度81021-⨯=),取01x =2. 求方程x x e -=在0.5x =附近的根(精度81021-⨯=),取01x =三 实验方案:利用二分法、不动点迭代、牛顿切线法及弦截法解非线性方程的根,通过计算机解决实验问题。
四. 实验步骤或程序:1. >> f=inline('x^3-x-1');a=1;b=2;dlt=0.5e-5;k=1;while abs(b-a)>dltc=(a+b)/2;if f(c)==0break;elseif f(c)*f(b)<0a=c;else b=c;endfprintf('k=%d,x=%.5f\n',k,c);k=k+1;endk=1,x=1.50000k=2,x=1.25000k=3,x=1.37500k=4,x=1.31250k=5,x=1.34375k=7,x=1.32031k=8,x=1.32422k=9,x=1.32617k=10,x=1.32520k=11,x=1.32471k=12,x=1.32495k=13,x=1.32483k=14,x=1.32477k=15,x=1.32474k=16,x=1.32472k=17,x=1.32471k=18,x=1.324722.>> eps=0.5*10^(-8);dx=1;x0=1;k=0; >> while(dx>eps)k=k+1;x=exp(-x0);dx=abs(x-x0)/(1+abs(x));x0=x;end>> kxk =33x =0.5671五.程序运行结果:1.k=1,x=1.50000k=2,x=1.25000k=3,x=1.37500k=4,x=1.31250k=5,x=1.34375k=6,x=1.32813k=7,x=1.32031k=8,x=1.32422k=9,x=1.32617k=11,x=1.32471k=12,x=1.32495k=13,x=1.32483k=14,x=1.32477k=15,x=1.32474k=16,x=1.32472k=17,x=1.32471k=18,x=1.324722. k =33x =0.5671六.实验总结:通过本次实验本人收获很多。
迭代函数对收敛性的影响实验报告

迭代函数对收敛性的影响一、实验目的:初步了解非线性方程的简单迭代法及其收敛性,体会迭代函数对收敛性的影响,知道当迭代函数满足什么条件时,迭代法收敛。
、实验内容:用简单迭代法求方程f(x) =2x3 _x _1 = 0的根。
方案一:化f (x)二2x3 - x -1 = 0为等价方程X = 3"0^ △0(x)\ 2 =万案二:化f (x) = 2x —x—^^=0为等价方程x 二2x3」(x) 、实验要求:(1)分别对方案一、方案二取初值X。
=0,迭代10次,观察其计算值,并加以分析。
(2)用MATLAB^部函数solve直接求出方程的所有根,并与(1)的结果进行比较。
四、迭代法程序fun ctio n[k,pia ncha,xdpia ncha,xk]=diedai(x0,k)x(1)=x0;for i=1:kx(i+1)=fu n1(x(i));pia ncha=abs(x(i+1)-x(i));xdpia ncha=pia ncha/(abs(x(i+1))+eps);i=i+1;xk=x(i);[(i-1) pia ncha xdpia ncha xk]endif (pia ncha>1)&( xdpia ncha>0.5)&(k>3)disp('此迭代序列发散,请重新输入新的迭代公式')return;endif (pia ncha<0.001)&( xdpia ncha<0.0000005)&(k>3)disp('此迭代序列收敛,且收敛速度较快')return;endp=[(i-1) pia ncha xdpia ncha xk]'五、实验结果:方案一:3化f(x)=2x-X-1 = 0为等价方程xfjx)建立M文件fun 1.m的文件function y1=fu n1(x)y1= ((x+1) ./2 ) 9(1/3)在MATLAB窗口输入程序>> [k,pia ncha,xdpia ncha,xk]=diedai(0,10)运行后输出结果y1 =0.7937ans =1.0000 0.7937 y1 =0.9644ans =2.0000 0.1707 y1 = 0.9940ans =3.0000 0.0297 y1 =0.9990ans =4.0000 0.0050 y1 = 0.9998ans =5.0000 0.0008 y1 =1.0000ans =6.0000 0.0001 y1 = 1.0000ans =7.0000 0.0000 y1 = 1.0000ans =8.0000 0.0000 y1 =1.0000ans =9.0000 0.0000 y1 =1.0000ans =10.0000 1.0000 0.7937 0.1770 0.9644 0.0298 0.9940 0.0050 0.9990 0.0008 0.9998 0.0001 1.0000 0.0000 1.0000 0.0000 1.0000 0.0000 1.00000.0000 0.0000 1.0000此迭代序列收敛,且收敛速度较快k =10 pia ncha = 1.0685e-07 xdpia ncha =1.0685e-07 xk =1.000033x = 2x -仁〕(x)2、方案二: 化f (x) = 2x …X - 1 = 0为等价方程 (1)建立 M 文件fun,m 的文件function y 仁fu n1(x) y1=2.*(x93)-1(2 )在MATLAB 窗口输入程序>> [k,pia ncha,xdpia ncha,xk]=diedai(0,10) (3 )运行后输出结果 y1 =-1y1 =-3y1 =-55y1 =-332751 ans =1.0e+05 *y1 =-I nfans =8 Inf NaN -Infy1 =-I nf ans =9 NaN NaN -Inf y1 =-I nf ans =10 NaN NaN -Inf p = 10 NaN NaN -I nfk = 10 pia ncha =NaN xdpia ncha = NaN xk =-I nf0.0000 3.3270 y1 =-7.3687e+16 ans =1.0e+16 * 0.0000 7.3687 y1 =-8.0019e+50 ans =1.0e+50 * 0.0000 8.0019 y1 =-1.0247e+153 ans =1.0e+153 * 0.0000 1.0247 0.0000 -3.32750.0000 -7.36870.0000 -8.00190.0000 -1.0247ans =1.0000 1.0000 1.0000 -1.0000ans =2.0000 2.00000.6667 -3.0000ans =3.0000 52.00000.9455 -55.00003、用MATLAB^部函数solve直接求(1 )输入程序>> x=solve('2.*(x.A3)-x-1=0')运行后输出的结果x =1.-.50000000000000000000000000000000+.50000000000000000000000000000000*i-.50000000000000000000000000000000-.50000000000000000000000000000000*i从表1可以看出,方案一收敛很快,偏差和偏差的相对误差几乎为零;方案二根本不收敛,它的偏差piancha已经NaN且相对误差xdwucha的知也已经NaN由此可见,迭代序列的敛散性与迭代公式有关,也与相邻两次迭代的偏差和偏差的相对误差有关,他们的值越小,迭代序列的收敛速度越快。
不动点迭代法求方程的根

实验报告
专业班级:学号:姓名:
实验名称:用不动点迭代法解非线性方程
1.实验目的:
(1)掌握不动点迭代法求根的方法
(2)学会运用C语言编写出相应的循环程序,得出方程的解。
2.随着不断的迭代,迭代数值会越来越接近不动点值x0。程序中变量的类型小数点后的位数是一定的,所以,随着不断的迭代,会出现相等的两数,那么,此时的xk可以近似看做方程根x*。
程序流程图
N
Y
4.实验步骤或程序(经调试后正确的源程序)
主要步骤与程序代码,见附件A
附件A实验报告
(适用计算机程序设计类)
专业班级:学号:姓名:
实验步骤或程序:
程序代码:
5.程序运行结果
2.实验内容:
问题:求方程f(x)=x3-x-1=0在x0=1.5附近的根x*。
算法描述:
1)把方程改写成 的形式
2)代入x0=1.5,并反复利用迭代公式 计算
3)对上式得到的序列{xk}求极限lim xk=x*,所求得的x*即为非线性方程的根
3.实验方案(程序设计说明)
算法设计思路:
将x0代入迭代公式,作为第一次迭代结果x1。
非线性实验报告

非线性实验报告非线性实验报告摘要:本实验旨在研究非线性系统的特性,并通过实验验证非线性系统的存在和影响。
实验过程中,我们采用了不同的实验方法和工具,包括数学模型、实验仪器和数据分析软件。
通过实验结果的分析和对比,我们得出了一些关于非线性系统的结论,并对实验中可能存在的误差和限制进行了讨论。
引言:非线性系统是指其输入与输出之间的关系不符合线性关系的系统。
在现实世界中,非线性系统无处不在,如生物系统、电子电路、经济系统等。
了解和研究非线性系统的特性对于我们理解和应用这些系统具有重要意义。
本实验旨在通过实际操作和数据分析,探索非线性系统的行为和特性。
实验方法:我们选择了一种简单的非线性系统作为研究对象,即二次函数。
通过调整二次函数的系数和参数,我们可以观察到不同的非线性行为。
在实验中,我们使用了一台计算机和数据采集卡作为实验仪器,利用数学建模和数据分析软件进行数据处理。
实验步骤:1. 设计二次函数模型:我们首先根据实验要求设计了一个二次函数模型,包括系数和参数的选择。
这个模型可以模拟实际系统中的非线性行为。
2. 数据采集:我们通过计算机和数据采集卡采集了一系列输入和输出数据。
输入数据是实验中施加在系统上的不同信号,输出数据是系统对这些信号的响应。
3. 数据处理和分析:我们使用数据分析软件对采集到的数据进行处理和分析。
首先,我们绘制了输入-输出曲线,以观察系统的非线性特性。
然后,我们对数据进行了拟合和回归分析,以确定二次函数的系数和参数。
实验结果:通过实验和数据分析,我们得到了以下结果:1. 非线性特性的存在:我们观察到系统的输入-输出曲线不是一条直线,而是呈现出弯曲的形状。
这表明系统存在非线性特性。
2. 参数对系统行为的影响:我们发现,调整二次函数的系数和参数可以改变系统的响应。
例如,增加二次项的系数可以使曲线更加陡峭,而增加线性项的系数可以使曲线更加平缓。
3. 非线性现象的局限性:我们也观察到,在一定范围内,系统的响应是线性的。
第二次实验报告(非线性方程求根)

班级: 学号: 姓名: 成绩:实验2 非线性方程的数值解法实验1实验目的1)进一步熟练掌握求解非线性方程的牛顿迭代法和弦截法。
2)根据牛顿迭代法和弦截法的原理,编写程序求解非线性方程,提高编程解决问题的能力。
2 实验内容(1)用牛顿法和割线法求下列方程的根x^2-e^x=0;x*e^x-1=0;(23实验原理(1)牛顿迭代公式:1()/'()k k k k x x f x f x +=- 双点弦法公式:111()()()()k k k k k k k f x x x x x f x f x +--=--- (2)令2()f x x A =-,再用牛顿法求根。
4实验步骤1)根据牛顿迭代法,双点弦法的算法编写相应的求根函数;2)用牛顿迭代法和双点弦法分别对方程进行求解;5 程序设计牛顿迭代法x0=1.0;N=100;k=0;eps=5e-6;delta=1e-6;while(1)x1=x0-fc1(x0)/fc2(x0);k=k+1;if k>Ndisp('Newton method failed')breakendif(abs(x1-x0)<delta || abs(fc1(x1))<delta) break;endx0=x1;endfprintf('%f',x0)fprintf('%f',abs(fc1(x1)))双点弦法function cutline(x0,x1)N=100;k=0;delta=5e-8;while(1)(abs(x1-x0)>=delta)c=x1;x1=cutnext(x0,x1);x0=c;k=k+1;if k>Ndisp('Cutline method failed')break;endif(abs(x1-x0)<delta || abs(fc1(x1))<delta) break;endendfprintf('%10f\n',x1);function y=cutnext(a,b)y=b-fc(b)/(fc(b)-fc(a))*(b-a);1)原函数function fc1=fc1(x)fc1=x^2-exp(x);end导函数function fc2=fc2(x)fc2=2*x-exp(x);end2)原函数导函数3)原函数导函数6实验结果及分析注:牛顿迭代法由于设置delta=1e-6,所以算出的误差e<1.0*10^-6;割线法由于设置delta=5e-8,所以误差e<5.0*10^-8.7总结。
非线性实验实验报告

非线性实验实验报告本实验主要通过实验数据反映非线性实验的特点,通过实验结果分析非线性实验数据的规律和特点。
实验仪器及材料:1. 实验用的非线性元件2. 信号源3. 示波器4. 多用表实验步骤:1. 将信号源正弦波输出端与非线性元件的输入端连接;2. 将非线性元件的输出端与示波器的输入端连接;3. 将示波器的输出端与多用表测量端连接;4. 调节信号源的频率和幅度,记录非线性元件的输入电压和输出电压;5. 分析实验数据,绘制非线性特性曲线。
实验结果及分析:在实验中,我们记录了非线性元件的输入电压和输出电压的数据,并通过数据绘制了非线性特性曲线。
实验结果如下表所示:输入电压(V) 输出电压(V)0.3 0.40.5 0.60.8 0.91.0 1.11.2 1.31.5 1.71.82.02.0 2.32.3 2.62.5 2.9通过绘制非线性特性曲线图,我们可以观察到非线性元件的输入电压与输出电压之间不是简单的线性关系,而是存在一定的非线性特性。
曲线图显示随着输入电压的增加,输出电压也逐渐增加,但增速逐渐变缓。
这是因为非线性元件在工作时存在一定的饱和效应,当输入电压超过一定阈值后,元件的输出不再按照线性规律增加,导致输出电压的增加速度减缓。
此外,从实验结果中还可以观察到非线性元件存在一定的失真效应。
例如,在输入电压为2.0V时,输出电压应为2.3V,但实际测量到的输出电压为2.0V,存在一定的失真。
实验总结:通过本实验,我们深入了解了非线性实验的特点,并通过实验结果分析了非线性实验数据的规律和特点。
非线性元件的工作特性不是简单的线性关系,而是存在饱和效应和失真效应。
在实际电路设计中,我们必须考虑这些非线性特性,并采取相应的措施来处理和补偿非线性效应,以确保电路的工作稳定性和可靠性。
非线性实验的研究对于电子工程领域的发展和应用具有重要的意义。
非线性实验报告实验1

非线性实验报告实验1在咱们的科学世界里,有很多神奇又有趣的现象等着我们去探索。
今天,我要和大家分享的是一次关于非线性的实验。
我记得有一次,我在公园里散步,看到一个小朋友在玩秋千。
那秋千荡来荡去的,一开始幅度很小,慢慢地越来越大。
这让我一下子就想到了非线性这个概念。
咱们先来聊聊啥是非线性。
简单说,非线性就是那种不按常规出牌,不遵循简单线性规律的东西。
比如说,你给一个系统输入一个小的变化,结果它却给出一个巨大的、不成比例的输出,这就是非线性啦。
这次的实验呢,是关于一个物理现象的。
我们准备了一个简单的装置,就是一个弹簧连着一个小球。
正常情况下,如果我们轻轻拉伸弹簧,小球的位移应该和拉力成正比,这是线性的表现。
但当我们加大拉力,超过一定限度的时候,神奇的事情发生了!弹簧不再是乖乖地按照我们预想的那样伸长,小球的运动也变得复杂起来。
有时候它会突然跳动,有时候又会缓慢移动,完全没有了之前那种规律的样子。
在实验过程中,我可是瞪大眼睛,仔细观察着每一个细节。
就拿测量弹簧的伸长量来说吧,我得拿着尺子,小心翼翼地凑近,生怕读错了一个数字。
那紧张的劲儿,就像是在参加一场重要的比赛。
而且呀,这个实验可没那么一帆风顺。
有好几次,因为操作不当,数据都不准确了,只能重新再来。
我心里那个着急哟,就盼着能快点得到理想的结果。
再说说数据处理的环节。
看着那一堆密密麻麻的数字,头都大了。
不过,为了搞清楚这非线性的奥秘,我还是耐着性子,一点点地分析、计算。
经过多次的尝试和改进,我们终于发现了一些有趣的规律。
原来,在非线性的世界里,小小的变化真的能引发大大的不同。
这让我想到了生活中的很多事情。
比如说,我们学习的时候,可能一开始只是多花了一点时间,多做了一道题,但长期坚持下来,成绩的提升可能会远超我们的想象。
又比如,我们在和朋友相处时,一个小小的关心举动,也许会让友谊变得更加深厚。
总之,这次非线性实验让我明白了,世界并不是总是那么简单和可预测的,有时候小小的改变就能带来意想不到的结果。
非线性方程迭代解法实验报告

深圳大学实验报告
课程名称:计算方法
实验项目名称:非线性方程迭代解法
学院:计算机与软件学院
专业、班级:09 计算机科学与技术05班
}
ax[k]=x2;
//printf("用%d次牛顿迭代求得一个根,值为:\n",j);//迭代次数
//printf("用%d次牛顿简化迭代求得一个根,值为:\n",j);//牛顿简化//sprintf("用%d次弦割迭代求得一个根,值为:\n",j);//弦割
printf("用%d次下山迭代求得一个根,值为:\n",j);//下山
printf("ax%d=%.9lf\n",k+1,ax[k]);//输出根
k++;//记录根个数
}
getchar();
getchar();
}
3.3 模型的解(含运行结果截图)
图1:牛顿迭代
图1:简化牛顿迭代
图3:弦割法
图4:下山法
3.4 结果分析
用牛顿迭代解法的收敛速度最快,求解的时候分别只用4次和3。
数值分析实验报告之迭代法求非线性方程的根

数值分析实验报告之迭代法求非线性方程的根1.实验目的掌握迭代法求非线性方程根的基本原理和使用方法,加深对数值计算方法的理解与应用。
2.实验原理迭代法是一种通过不断逼近的方法求解非线性方程的根。
根据不同的函数特点和问题需求,可以选择不同的迭代公式进行计算,如牛顿迭代法、二分法、弦截法等。
3.实验内容本次实验使用牛顿迭代法求解非线性方程的根。
牛顿迭代法基于函数的局部线性逼近,通过不断迭代逼近零点,直至满足收敛条件。
具体步骤如下:Step 1:选择初始点X0。
Step 2:计算函数f(x)在X0处的导数f'(x0)。
Step 3:计算迭代公式Xn+1 = Xn - f(Xn) / f'(Xn)。
Step 4:判断收敛准则,若满足则迭代结束,输出解Xn;否则返回Step 2,继续迭代。
Step 5:根据实际情况判断迭代过程是否收敛,并输出结果。
4.实验步骤步骤一:选择初始点。
根据非线性方程的特点,选择恰当的初始点,以便迭代公式收敛。
步骤二:计算导数。
根据选择的非线性方程,计算函数f(x)的导数f'(x0),作为迭代公式的计算基础。
步骤三:迭代计算。
根据迭代公式Xn+1=Xn-f(Xn)/f'(Xn),计算下一个迭代点Xn+1步骤四:判断收敛。
判断迭代过程是否满足收敛条件,通常可以通过设置迭代次数上限、判断前后两次迭代结果的差值是否足够小等方式进行判断。
步骤五:输出结果。
根据实际情况,输出最终的迭代结果。
5.实验结果与分析以求解非线性方程f(x)=x^3-x-1为例,选择初始点X0=1进行迭代计算。
根据函数f(x)的导数计算公式,得到导数f'(x0)=3x0^2-1,即f'(1)=2根据迭代公式Xn+1=Xn-f(Xn)/f'(Xn),带入计算可得:X1=X0-(X0^3-X0-1)/(3X0^2-1)=1-(1-1-1)/(3-1)=1-0/2=1根据收敛准则,判断迭代结果是否满足收敛条件。
数值分析实验报告_清华大学_非线性方程的解法

非线性方程的解法实验1.算法设计与比较问题提出:非线性方程组的求解方法很多,基本的思想是线性化。
不同的方法效果如何,要靠计算的实践来分析、比较。
实验内容:考虑算法(1)牛顿法(2)拟牛顿法分别编写它们的matlab程序。
实验要求:(1)用上述方法,分别计算两个例子。
在达到精度相同的前提下,比较迭代次数、浮点运算次数和CPU时间等。
1.1程序清单为使用flops统计浮点运算次数,使用MATLAB5.3版本%f1.m原函数f1function y=f(x)y(1)=12*x(1)-x(2)^2-4*x(3)-7;y(2)=x(1)^2+10*x(2)-x(3)-8;y(3)=x(2)^3+10*x(3)-8;end%ff1.m原函数f1的雅克比矩阵function y=ff(x)y(1,:)=[12,-2*x(2),-4];y(2,:)=[2*x(1),10,-1];y(3,:)=[0,3*x(2)^2,10];end%f1.m原函数f2function y=f2(x)y(1)=3*x(1)-cos(x(2)*x(3)) -1/2;y(2)=x(1)^2-81*(x(2)+0.1)^2+sin(x(3))+1.06;y(3)=exp(-x(1)*x(2))+20*x(3)+1/3*(10*pi-3);end%ff2.m原函数f2的雅克比矩阵function y=ff2(x)y(1,:)=[3,x(3)*sin(x(2)*x(3)),x(2)*sin(x(2)*x(3))];y(2,:)=[2*x(1),-2*81*(x(2)+0.1),cos(x(3))];y(3,:)=[-x(2)*exp(-x(1)*x(2)),-x(1)*exp(-x(1)*x(2)),20]; end%牛顿法(以第一个方程组为例)clear;x0=[0,0,0]';n=10;tol=1e-6;x(:,1)=x0;i=1;u=[1,1,1]';tic;while (norm(u)>tol*norm(x(:,i))&(i<n))A=ff1(x(:,i));b=f1(x(:,i))';u=-A\b;x(:,i+1)=x(:,i)+u;i=i+1;end;x(:,i)iter=i-1t=toc%拟牛顿法(以第一个方程组为例)clear;x0=[0,0,0]';n=10;tol=1e-6;x(:,1)=x0;i=1;p=[1,1,1]';A=ff1(x(:,1));tic;while (norm(p)>tol*norm(x(:,i))&(i<n))x(:,i+1)=x(:,i)-A\f1(x(:,i))';p=x(:,i+1)-x(:,i);q=f1(x(:,i+1))'-f1(x(:,i))';A=A+(q-A*p)*p'/norm(p,2)^2;i=i+1;end;iter=i-1t=tocx(:,i)1.2运行结果1.2.1第一个方程组精确解为*T =(0.886020214719037, 0.796444775323146, 0.749479574122230)x 取最大迭代次数n=5000,相对误差限Tol=1e-6 (1)取()(0)1,1,1x T=牛顿迭代法迭代3次收敛,浮点运算次数为440,每次迭代平均浮点运算次数为147,CPU 耗时t =0(s)拟牛顿法迭代4次收敛,浮点运算次数为1048,每次迭代平均浮点运算次数为262,CPU 耗时t =0(s)(2)取()(0)000x T =,, 牛顿迭代法迭代4次收敛,浮点运算次数为510,每次迭代平均浮点运算次数为128,CPU 耗时t =1.600e-002(s)拟牛顿法迭代6次收敛,浮点运算次数为1493,每次迭代平均浮点运算次数为248,CPU 耗时t =1.50e-002(s)(3)取()(0)50,5050x T=,牛顿迭代法迭代15次收敛,浮点运算次数为2118,每次迭代平均浮点运算次数为141,CPU 耗时t =1.600e-002(s)拟牛顿法迭代338次收敛,浮点运算次数为88454,每次迭代平均浮点运算次数为262,CPU 耗时t =3.100e-002(s)1.2.2第二个方程组精确解为*T =(0.886020214719037, 0.796444775323146, 0.749479574122230)x 取最大迭代次数n=5000,相对误差限Tol=1e-6(1)取()(0)000x T=,, 牛顿迭代法迭代5次收敛,浮点运算次数为776,每次迭代平均浮点运算次数为155.2,CPU 耗时t =0(s)拟牛顿法迭代6次收敛,浮点运算次数为1635,每次迭代平均浮点运算次数为273,CPU 耗时t =0(s)(2)取()(0)888x T=,, 牛顿迭代法迭代9次收敛,浮点运算次数为1519,每次迭代平均浮点运算次数为169,CPU 耗时t =0(s)拟牛顿法迭代21次收敛,浮点运算次数为5924,每次迭代平均浮点运算次数为282,CPU 耗时t =1.600e-002(s)(3)对于离精确解更远的初值(如()(0)101010x T=,,),在计算中会出现奇异或接近奇异的矩阵,计算结果误差很大或计算根本无法进行下去。
非线性方程组的牛顿迭代法的应用

非线性方程组的牛顿迭代法的应用CENTRAL SOUTH UNIVERSITY数值分析实验报告非线性方程组的牛顿迭代法的应用一、问题背景非线性是实际问题中经常出现的,并且在科学与工程计算中的地位越来越重要,很多我们熟悉的线性模型都是在一定条件下由非线性问题简化的,为得到更符合实际的解答,往往需要直接研究非线性科学,它是21世纪科学技术发展的重要支柱,非线性问题的数学模型有无限维的如微分方程,也有有限维的。
道遥咏计算机进行科学计算都要转化为非线性的单个方程或方程组的求解。
从线性到非线性是一个质的变化,方程的性质有本质不同,求解方法也有很大差别。
本文主要介绍的是非线性方程组的牛顿迭代法的数值解法。
二、数学模型对于方程f x =0,如果f x湿陷性函数,则它的求根是容易的。
牛顿法实质上是一种线性化方法,其基本思想是将线性方程 f x =0逐步归结为某种线性方程来求解。
设已知方程f x =0有近似根X k (假定f X k - 0),将函数f x在点X k展开, 有f X : f X k f' X k X -X k ,于是方程f X = 0可近似地表示为f X k f' X k x - X k =0这是个线性方程,记其根为X ki,则X k 的计算公式f(Xk)k 01...X ki =X k ;,k=01,f区)这就是牛顿法。
三、算法及流程对于非线性方程飞仅鸡丄区)1 f2(X i,X2 丄,X n ) f =M」n(X i ,X2,L,X n )在x k处按照多元函数的泰勒展开,并取线性项得到fjx*),X2(k )丄,XnC ))1 -X1(“)_X1(k )〕 fzgt 以^)丄%$))十f'(x (k))X2(kT —X2(k)MM ' fn(x/k凡卜),L,Xn&))1 〕X 0L Xn ®这边是牛顿迭代法的算法过程,牛顿迭代法是工程上应用最多的一种非线性方 程组的计算方程法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
探索实验二 非线性迭代一、实验背景与实验目的迭代是数学研究中的一个非常重要的工具,通过函数或向量函数由初始结点生成迭代结点列,也可通过函数或向量函数由初值(向量)生成迭代数列或向量列。
蛛网图也是一个有用的数学工具,可以帮助理解通过一元函数由初值生成的迭代数列的敛散性,也帮助理解平衡点(两平面曲线交点)的稳定性。
本实验在Mathematica 平台上首先利用蛛网图和迭代数列研究不动点的类型;其次通过蛛网图和迭代数列研究Logistic 映射,探索周期点的性质、认识混沌现象;第三通过迭代数列或向量列求解方程(组)而寻求有效的求解方法;最后,利用结点迭代探索分形的性质。
一、 实验计划1.迭代序列与不动点 1.1程序给定实数域上光滑的实值函数)(x f 以及初值0x ,定义数列)(1n n x f x =+, ,2,1,0=n (2.2.1)}{n x 称为)(x f 的一个迭代序列。
对函数的迭代过程,我们可以用几何图象来直观地显示它——“蜘蛛网”。
运行下列Mathematica 程序:Clear[f]f[x_] := (25*x - 85)/(x + 3); (实验时需改变函数) Solve[f[x]==x , x] (求出函数的不动点)g1=Plot[f[x], {x, -10, 20}, PlotStyle -> RGBColor[1, 0, 0], DisplayFunction -> Identity];g2=Plot[x, {x, -10, 10}, PlotStyle -> RGBColor[0, 1, 0], DisplayFunction -> Identity]; x0=5.5; r = {};r0=Graphics[{RGBColor[0, 0, 1], Line[{{x0, 0}, {x0, x0}}]}]; For[i = 1, i <= 100, i++,r=Append[r, Graphics[{RGBColor[0, 0, 1], Line[{{x0, x0},{x0, f[x0]}, {f[x0], f[x0]}}] }]]; x0=f[x0] ];Show[g1, g2, r, r0, PlotRange -> {-1, 20}, (PlotRange 控制图形上下范围) DisplayFunction -> $DisplayFunction] x[0]=x0;x[i_]:=f[x[i-1]]; (定义序列) t=Table[x[i],{i,1,10}]//N ListPlot[t] (散点图)1.2实验思路首先对函数38525+-=x x y 研究不动点,需要 (1)对Plot 中{x,-10,20}可改为{x,-50,50};对PlotRange 中{ -1,20}可改为{-50,50};(2)x0=5.5中5.5分别改为-30,-20,-5,-3.001,-2.999,-1,0,1,1.5,2.5,4,4.5, 4.9,4.999,5,5.1,5.001,6,10,16,17,18,20,30;(3)对t=Table[x[i],{i,1,20}]//N 中20分别改为100,200; (4)对i<=100中100分别改为200,500,1000。
运行程序后观察蛛网图与散点图!一看数列是否收敛?如收敛,极限是多少?收敛速度是快是慢?二看蛛网图中的轨道是否趋于平衡点?与平衡点处曲线的斜率有没有关系?三看初值对结果有没有影响?其次,分别就x x f sin )(=,1)(+-=x x f 等函数利用(2.2.1)做迭代序列}{n x ,观察蛛网图中的轨道是否趋于平衡点和序列的收敛性。
2.Logistic 映射与混沌 2.1程序从形如()()x ax x f -=1的二次函数开始做迭代()kk xf x=+1,1,0=k(2.2.2)这里,[]4,0∈a 是一个参数。
对不同的a 系统地观察迭代(2.2.2)的行为。
Mathematica 程序:IterGeo[a_, x0_] :=Module[{p1, p2, i, pointlist = {}, v= x0, fv= a*x0*(1 - x0)},p1=Plot[ {a*x*(1 - x), x}, {x, 0, 1}, DisplayFunction -> Identity]; AppendTo[pointlist, {x0, 0}];For[i = 1, i < 20, i++, AppendTo[pointlist, {v, fv}]; AppendTo[pointlist, {fv, fv}]; v= fv; fv= 4*v*(1 - v)];p2=ListPlot[pointlist, PlotJoined -> True, DisplayFunction -> Identity];Show[{p1, p2}, DisplayFunction -> $DisplayFunction] ]IterGeo[2.6, 0.3]2.2实验思路就Logistic 映射,对a =0.5,1,1.2,2,2.1,2.9,2.999,3,3.001,3.2,3.235,3.236,3.237,3.44等,分别取x 0= 0,0.2,0.5,0.8,1.0运行程序,观察结果。
观察结果就是看数列是否收敛,蛛网图中的轨道是否趋于平衡点,与a 的关系!对a 的定义范围[0,4]分成若干个区间,就初值(属于(0,1)时)看数列是否收敛,蛛网图中的轨道是否趋于平衡点?可用散点图认识。
对Logistic 映射讨论下列问题:1)找出一个a值,它对应的迭代具有2周期点。
这种性质依赖于初值吗?你能找到多个a值具有这种性质吗?2)你能对任意的k找到一个a值,使得它对应的迭代具有k周期点吗?哪些k值能给出k周期点?在每种情况下,结果是否依赖于初值的选取?3)如果某个a值能给出周期点,它是否一定是吸引的周期点?你能否找到排斥的周期点?4)试着从理论上分析:()x f的不动点是什么?对哪些a值迭代收敛到每个不动点?哪些初值收敛到不动点?哪些初值导致发散?对周期点做类似的分析。
3. 方程求根3.1程序求方程的根的Mathematica程序如下:NSolve[x^3 - 2x + 1 == 0, x]函数取不同初值迭代的Mathematica程序如下:Iterate[f_, x0_, n_Integer] : =Module[{ t = {}, temp = x0},AppendTo[t, temp];For[i = 1, i <= n, i++, temp = N[f[temp]];AppendTo[t, temp]];t]f[x_] := (x^3+1)/2;Iterate[f, -2, 10]Newton切线法迭代数列的Mathematica程序如下:Iterate[f_,x0_,n_Integer]:=Module[{ t={},temp= x0},AppendTo[t,temp];For[i=1,i <= n, i++,temp=N[x0-f[x0]/h[x0]];AppendTo[t,temp]];t]f[x_]:=x^3-2*x+1;h[x_]=Dt[f[x],x];Iterate[f,4,10]而要通过几何直观观察,可由如下Mathematica程序实现:Clear[f]f[x_] := x^3-2*x+1;g1 = Plot[f[x], {x,2, 5}, PlotStyle -> RGBColor[1, 0, 0],DisplayFunction -> Identity];x0 = 4; r = {};h[x_]=Dt[f[x],x];For[i = 1, i <= 100, i++,If[h[x0]≠0,x1=N[x0-f[x0]/h[x0],20]];r = Append[r, Graphics[{RGBColor[0, 0, 1],Line[{{x0, 0},{x0, f[x0]}, {x1, 0}}]}]];x0 =x1];Show[g1, r, PlotRange -> {-20, 20},DisplayFunction -> $DisplayFunction]3.2实验思路对于方程0123=+-x x ,首先分别考虑函数213+x ,212xx -,312-x ,取不同的初值x0(例如-9,-5,-2,-1,-0.5,0,0.5,1, 2 ,8,10 等),生成相应的数列。
若数列有极限,则极限即为所求根。
其次用牛顿切线法求根,取不同的初值x 0(例如-9,-5,-2,-1,-0.5,0,0.5,1, 2,8,10等),由此数列的极限即为所求根。
思考:为何数列收敛?分析原因!此外,初值x0决定数列的极限吗? 4.分形 4.1程序计算机绘出Koch 曲线的Mathematica 程序:redokoch[ptlist_List] :=Block[{tmp = {}, i, pnum = Length[ptlist]},For[i = 1, i < pnum, i = i + 1, tmp = Join[tmp, {ptlist[[i]], ptlist[[i]]*2/3 + ptlist [[i + 1]]/3,(ptlist[[i]] + ptlist [[i + 1]])/2 + {ptlist[[i]] [[2]] - ptlist[[i + 1]] [[2]], ptlist[[i + 1]][[1]] - ptlist[[i]][[1]]}*Sqrt[3]/6,ptlist[[i]]/3 + ptlist[[i + 1]]*2/3,ptlist[[i + 1]]}]]; tmp] lnko01 = {{0, 0}, {1, 0 }};Show[Graphics[Line[Nest[redokoch, lnko01, 5]], AspectRatio -> Sprt[3]/6]]Julia 集图形的Mathematica 程序:julia[x_,y_,lim_,cx_,cy_] :=Block[{z, ct = 0}, z = x + I*y;While[(Abs[z] <2.0) && (ct < lim), ++ct; z = z*z + (cx +I*cy);];Return[ct];] julia1=DensityPlot[julia[x, y,50, 0.27334, 0.00742],{x,-1.5,1.5}, {y,-1.5,1.5}, PlotPoints -> 120, Mesh -> False]julia2 = Show[julia1,Graphics[Line[{{-0.7, -0.1},{-0.3,-0.1},{-0.3,0.3},{-0.7,0.3},{-0.7,-0.1}}]]]julia3 = DensityPlot[julia[x,y,50,0.27334,0.00742],{x,-0.7,-0.4},{y,-0.1,0.3}, PlotPoints -> 120,Mesh -> False]Mandelbrot 集以及它的局部放大的Mathematica 程序如下:iter[x_,y_,lim_] := Block[{c,z,ct},c = x +I*y;z = c;ct = 0;While[(Abs[z] < 2.0) && (ct < lim),++ct;z = z*z + c;];Return[ct];] Mandelbrot1=DensityPlot[iter[x,y,50], {x,-2.0, 1.0},{y,-1.5,1.5}, PlotPoints -> 120,Mesh -> False]Mandelbrot2 = Show[Mandelbrot1, Graphics[Line[{{-0.9, -0.25}, {-0.7,-0.25}, {-0.7,-0.05},{-0.9,-0.05}, {-0.9,-0.25}}]]]Mandelbrot3 = DensityPlot[iter[x,y,50],{x,-0.9,-0.7},{y,-0.25,-0.05}, PlotPoints -> 120,Mesh -> False]4.2实验思路1、用Koch 曲线的生成元做迭代得到的极限图形称为Koch 雪花曲线。