不动点迭代法非线性方程求解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
不动点迭代法非线性方程求解
《MATLAB程序设计实践》课程考核
1、编程实现以下科学计算算法,并举一例应用之。(参考书籍《精通MATLAB 科学计算》,王正林等著,电子工业出版社,2009年)
“不动点迭代法非线性方程求解”
2、编程解决以下科学计算问题。
7.某工厂2005年度各季度产值(单位:万元)分别为:450.6、395.9、410.2、450.9,试绘制折线图和饼图,并说明图形的实际意义。
22xy 8.根据绘制平面曲线,并分析参数对其形状的影响。,,1a22a25,a
2.按要求对指定函数进行插值和拟合。
0 (1)按表6.4用3次样条方法插值计算范围内整数点的正弦值和0~90
0范围内整数点的正切值,然后用5次多项式拟合方法计算相同的函数值,0~75
并将两种计算结果进行比较。
表6.4 特殊角的正弦与正切值表
(度) 0 15 30 45 60 75 90 a
sina 0 0.2588 0.5000 0.7071 0.8660 0.9659 1.0000 tana 0 0.2679
0.5774 1.0000 1.7320 3.7320
(2)按表6.5用3次多项式方法插值计算1~100之间整数的平方根。
表6.5 1~100内特殊值的平方根表 N 1 4 9 16 25 36 49 64 81 100
1 2 3 4 5 6 7 8 9 10 N
1、不动点迭代非线性方程求解
解:
算法说明:
在Matlab中编程实现不动点迭代法的函数为StablePoint 功能:用不动点迭代法求函数的一个零点。调用格
式:[root,n]=StablePoint(f,x0,eps)。
其中,f为函数名;
x0为初始迭代向量;
eps为根的精度;
root为求出的函数零点;
n为迭代步数。
流程图:
输入参数f,x0,eps
迭代算根
否
比较精度是否符合要求
是
输出根值和迭代步数
不动点迭代法的MATLAB程序代码: function
[root,n]=StablePoint(f,x0,eps)
%用不动点迭代法求函数f的一个零点 %初始迭代量:x0
%根的精度:eps
%求出的函数零点:root
%迭代步数:n
if(nargin==2)
eps=1.0e-4;
end
tol=1;
root=x0;
n=0;
while(tol>eps)
n=n+1;
r1=root;
root=subs(sym(f),findsym(sym(f)),r1)+r1; %迭代的核心公式tol=abs(root-r1); end
实例:
1采用不动点迭代法求方程的一个根。,,,x20
x
流程图:
开始
确定函数和参数
代入公式
输出结果
解:在MATLAB命令窗口中输入程序代码:
>>[r,n]=StablePoint('1/sqrt(x)+x-2',0.5)
结果输出:
r =
0.3820
n =
4
从计算结果可以看出,经过四步迭代,得出方程的一个根为0.3820
2.编程解决以下科学计算问题
7、某工厂2005年度各季度产值(单位:万元)分别为450.6, 395.9, 410.2,
450.9,试绘制折线图和饼图,并说明图像的实际意义。解:
流程图:
用subplot首先对对作图区域
分区
根据图线类型选择函数:
折线图用plot
饼状图用pie
输入数据;图像用title标注
输出图像
源程序代码:
%折线图
subplot(1,2,1)
plot([450.6,395.9,410.2,450.9]) title('2005年度各季度产值-折线图');
%饼状图
subplot(1,2,2)
pie([450.6,395.9,410.2,450.9],1:4,{'第一季度','第二季度','第三季度','第四季度'}) title('2005年度各季度产值-饼图')
从折线图可以看出该工厂效益变化趋势,效益在第二季度最低随后逐渐提高,并在第四季度恢复到第一季度的水平;从饼状图可以看出各个季度该工厂效益的比例关系。从这两个图可以合理安排工厂的生产计划。
22xy,,18.根据绘制平面曲线,并分析参数对其形状的影响。 a22a25,a 流程图:
定义符号变量a x y
和函数eq;设置变参量
aa(实数矩阵)
n为矩阵的列数;
for i=1:n
eq1=subs(eq,a,aa(i));
并用ezplot绘制隐函数
图形
设置图像坐标范围和间
隔时间
依次作图
syms a x y
eq=1/a^2*x^2 +y^2/(25-a^2)-1;
aa=[0.5:0.5:3.5,5/sqrt(2),3.6:0.5:6.6];
[m,n]=size(aa);
for i=1:n
eq1=subs(eq,a,aa(i)); ezplot(eq1,[-20 20]) drawnow axis([-20 20 -10 10]) pause(0.5)
end