最新中南大学MATLAB课程实践Word格式文档下载.docx
《最新中南大学MATLAB课程实践Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《最新中南大学MATLAB课程实践Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
%读入数据
19%phi2
No_use=fscanf(file,'
%f'
1);
forj=1:
19%phi1
fork=1:
19%phi
f(j,k,i)=fscanf(file,'
end
%slice给出分布特征
figure
(1);
[x,y,z]=meshgrid(0:
5:
90,0:
90);
slice(x,y,z,f,[45,90],[45,90],[0,45]);
%pcolor给出切面f情况
figure
(2);
19
subplot(5,4,i);
[X,Y]=meshgrid(0:
contour(X,Y,f(:
:
i));
axisij;
%沿alpha取向线分布情况
figure(3);
plot([0:
90],f(10,:
1),'
-bo'
text(60,6,'
\phi=45'
text(60,5.5,'
\phi2=0'
运行结果
第一题
编程实现以下科学计算算法,并举一例应用之。
(参考书籍《精通MALAB科学计算》,王正林等著,电子工业出版社,2009年)“不动点迭代法和牛顿法非线性方程组求解”
1.1不动点迭代法解非线性方程组
算法说明
设含有n个未知数与n个方程的非线性方程组记为:
F(x)=0,然后把上述方程组改为便于迭代的等价形式:
x=φ(x),由此就可以构造不动点迭代法的迭代公式:
这样就可以求出非线性方程组的解。
调用格式:
[x1,n]=StablePoint(x,eps)。
其中,x为初始迭代向量;
eps为迭代精度;
x1为求出的解向量;
n为迭代步数。
function[x1,n]=StablePoint(x,eps)
%不动点迭代法求非线性方程组的根
%x为初值;
eps为精度,x1为方程的根,n为迭代次数
if(nargin==1)
eps=1.0e-4;
x1=g(x);
%g(x)为非线性方程组
n=1;
tol=1;
while(tol>
eps)
x=x1;
x1=g(x);
%迭代
tol=norm(x1-x);
n=n+1;
ifn>
1000%迭代次数过多
disp('
迭代次数超过1000,可能不收敛'
return;
举例说明
首先建立g.m函数文件:
functiony=g(x)
%输入方程组
y
(1)=0.7*sin(x
(1))+0.2*cos(x
(2));
y
(2)=0.7*cos(x
(1))-0.2*sin(x
(2));
在MATLAB命令窗口中运行:
即求得非线性方程组y
(1),y
(2)的一组解[0.52640.5080],共迭代了12次,精度为1.0e-4。
1.2牛顿法解非线性方程组
牛顿迭代法的迭代公式为:
错误!
未找到引用源。
求解步骤为:
(1)给出初始值错误!
;
(2)对n=1,2,3…计算F(xn)和F’(xn);
(3)求出xn+1,并进行精度控制。
更一般的牛顿法迭代公式为:
,当错误!
=F’(x0)时,就得到简化牛顿法。
在MATLAB中编程实现的非线性方程组的牛顿迭代法的函数为:
newton。
[x1,n,eps]=newton(x,eps)
n为迭代步数
流程图
function[x1,n,eps]=newton(x,eps)
if(nargin==1)%默认缺省值为1e-4
if(df(x)==0)
非线性方程组微分式为零!
'
x1=x-fc(x)/df(x);
%牛顿法迭代
whilenorm(x-x1)>
eps
x1=x-fc(x)/df(x);
if(df(x)==0)
if(n>
1000)
迭代次数大于1000!
解:
首先建立fc.m函数文件,输入以下内容:
functiony=fc(x)
%定义原函数
y
(2)=x
(2)-0.7*cos(x
(2)+0.2*sin(x
(1)));
y
(1)=x
(1)-0.7*sin(x
(1))-0.2*cos(x
(2));
再建立df.m导数文件,输入以下内容:
functiony=df(x)
%定义导数文件
y=[1-0.7*cos(x
(1))0.2*sin(x
(2));
0.7*sin(x
(1))1+0.2*cos(x
(2))];
在MATLAB命令窗口中输入:
第二题
2.1题目
有3个多项
试进行下列操作:
(1)求
=
+
(2)求
的根
(3)当x取矩阵A的每一个元素,求
的值。
其中:
A=
(4)当以矩阵A为自变量时,求
其中A的值与第(3)题相同。
函数调用格式:
[symp,r,x,x2]=question1()
symp:
p(x)的值;
r:
p(x)的根;
x:
x取矩阵A的每一个元素时
的值;
x2:
以矩阵A为自变量时,
function[symp,r,x,x2]=question1()
%求解课程设计29中第二题的第一小题,共四问
%A为题目所给矩阵
%构建多项式
p1=[1,2,4,0,5];
p2=[0,0,0,1,2];
p3=[0,0,1,2,3];
A=[-11.2-1.4;
0.7523.5;
052.5];
%多项式转换为符号表达式
p1=poly2sym(p1);
p2=poly2sym(p2);
p3=poly2sym(p3);
symp=p1+p2*p3;
%第一问答案
p=sym2poly(symp);
%符号表达式转换多项式
r=roots(p);
%求根
x=polyval(p,A);
%x为A的每一项时的值
x2=polyvalm(p,A);
%A为自变量时的值
2.2题目
用三次多项式拟合下面数据,做出图形。
x=[00.20.40.60.81]
y=[07.7810.688.373.970]
调用question2.m脚本文件,直接用函数polyfit绘制出拟合曲线图形,并输出多项式系数矩阵f和其误差s。
%求解课程设计29中第二题的第二小题
x=0:
0.2:
1;
y=[07.7810.688.373.970];
[f,s]=polyfit(x,y,3)%对数据三次多项式拟合并输出,f为拟合的函数,s为误差
xx=0:
0.01:
%构建函数数据点
f=polyval(f,xx);
plot(x,y,'
ro'
xx,f,'
b-'
%作图
legend('
数据点'
函数曲线'
title('
三次多项式拟合'
%图像标题
xlabel('
x'
%标出x轴
ylabel('
y'
2.3题目
拟合函数有如下形式:
y=αexp(βx)
试确定系数,并分别用线性尺度和对数尺度做出拟合曲线的图形。
x=[0.01290.02470.05300.15500.30100.47100.80201.27001.43002.4600]
y=[9.56008.18455.26122.79172.26111.73401.23701.06741.11710.7620]
将非线性函数y=αexp(βx)
两边同时取对数转化为线性函数,用polyfit对线性函数lny=lna+βx进行拟合。
调用函数question3.m求解问题,调用格式[a,beta,s]=question3()
a:
非线性函数y的系数a
beta:
非线性函数y的系数beta
s:
拟合误差
function[a,beta,s]=question3()
%第二题第三小题
%p
(2)=a,p
(1)=beta,s为误差
x=[0.0129,0.0247,0.0530,0.1550,0.3010,0.4710,0.8020,1.2700,1.4300,2.4600];
y=[9.5600,8.1845,5.2616,2.7917,2.2611,1.7340,1.2370,1.0674,1.1171,0.7620];
0.001:
2.4600;
%将函数变化为lny=lna+beta*x
[p,s]=polyfit(x,log(y),1);
%p
(1)=betap
(2)=lnas为误差
p
(2)=exp(p
(2));
a=p
(2);
beta=p
(1);
yy=p
(2)*exp(p
(1)*xx);
%对数尺度
subplot(1,2,1);
semilogy(x,y,'
bo'
xx,yy,'
r-'
lny=lna+β*x'
ln(y)'
对数尺度'
%线性尺度作图
subplot(1,2,2);
y=a*e^(β*x)'
线性尺度'