matlab程序设计实践-牛顿法解非线性方程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中南大学MATLAB程序设计实践学长有爱奉献,下载填上信息即可上交,没有下载券的自行百度。所需m文件照本文档做即可,即新建(FILE)→脚本(NEW-Sscript)→复制本文档代码→运行(会跳出保存界面,文件名默认不要修改,保存)→结果。第一题需要把数据文本文档和m文件放在一起。全部测试无误,放心使用。本文档针对做牛顿法求非线性函数题目的同学,当然第一题都一样,所有人都可以用。←记得删掉这段话
班级:
学号:
姓名:
一、《MATLAB程序设计实践》Matlab基础
表示多晶体材料织构的三维取向分布函数(f=f(φ1,φ,φ2))是一个非常复杂的函数,难以精确的用解析函数表达,通常采用离散
空间函数值来表示取向分布函数,是三维取向分布函数的一个实例。
由于数据量非常大,不便于分析,需要借助图形来分析。请你编写一
个matlab程序画出如下的几种图形来分析其取向分布特征:
(1)用Slice函数给出其整体分布特征;
"
~
(2)用pcolor或contour函数分别给出(φ2=0, 5, 10, 15, 20, 25, 30, 35 … 90)切面上f分布情况(需要用到subplot函数);
(3) 用plot函数给出沿α取向线(φ1=0~90,φ=45,φ2=0)的f分布情况。
(
备注:数据格式说明
解:
(1)(
(2)将文件内的数据按照要求读取到矩阵f(phi1,phi,phi2)中,代码如
下:
fid=fopen('');
for i=1:18
tline=fgetl(fid);
end
phi1=1;phi=1;phi2=1;line=0; f=zeros(19,19,19);
[
while ~feof(fid)
tline=fgetl(fid);
data=str2num(tline);
line=line+1;数据说明部分,与
作图无关此方向表示f随着
φ1从0,5,10,15,
20 …到90的变化而
变化
此方向表示f随着φ
从0,5,10,15, 20 …
到90的变化而变化
表示以下数据为φ2=0的数据,即f(φ1,φ,0)
if mod(line,20)==1
phi2=(data/5)+1;
phi=1;
else
~
for phi1=1:19
f(phi1,phi,phi2)=data(phi1);
end
phi=phi+1;
end
end
fclose(fid);
。
将以上代码保存为在MATLAB中运行,运行结果如下图所示:!
将以下代码保存为文件:
fopen('');
,
readdata;
[x,y,z]=meshgrid(0:5:90,0:5:90,0:5:90);
slice(x,y,z,f,[45,90],[45,90],[0,45])
运行结果如下图所示:
(2))
(3)将以下代码保存为文件:fopen('');
readdata;
for i=1:19
subplot(5,4,i)
pcolor(f(:,:,i))
nd
)
运行结果如下图所示:
|
将以下代码保存为文件:
fopen('');
readdata;
for i=1:19
…
subplot(5,4,i)
contour(f(:,:,i))
end
运行结果如下图所示:
(3)φ1=0~90,φ=45,φ2=0所对应的f(φ1,φ,φ2)即为f(:,10,1)。将以下代码保存为文件:
fopen('');
…
readdata;
plot([0:5:90],f(:,10,1),'-bo')
text(60,6,'\phi=45 \phi2=0')运行结果如下图所示:
》
#
;
二 《MATLAB 程序设计实践》科学计算(24)
班级: 学号: 姓名: >
1、编程实现以下科学计算算法,并举一例应用之。(参考书籍《精通MALAB科学计算》,王正林等著,电子工业出版社,2009年)
“牛顿法非线性方程求解”
解:弦截法本质是一种割线法,它从两端向中间逐渐逼近方程的根;牛顿法本质上是一种切线法,它从一端向一个方向逼近方程的根,其递推公式为:
-
=+n n x x 1)
()
('
n n x f x f 初始值可以取)('
a f 和)('
b f 的较大者,这样可以加快收敛速度。
和牛顿法有关的还有简化牛顿法和牛顿下山法。
在MATLAB 中编程实现的牛顿法的函数为:NewtonRoot 。 功能:用牛顿法求函数在某个区间上的一个零点。 /
调用格式:root=NewtonRoot )(```eps b a f
其中,f为函数名;
a为区间左端点;
b为区间右端点
eps为根的精度;
root为求出的函数零点。,
—