数值分析编程总结Word格式文档下载.docx
《数值分析编程总结Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数值分析编程总结Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
![数值分析编程总结Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-10/27/507c125b-ab22-49b2-8c63-b2d77b79e4ac/507c125b-ab22-49b2-8c63-b2d77b79e4ac1.gif)
1
x(j)=y(j)-u(j)*x(j+1);
数值试验:
n=101;
a=1210………………………………..….0
1121………………………………..…0
01121………………………..…0
001121……………………0
1
112
关键是如何定义上述矩阵:
>
c1=ones(1,n-1);
a1=diag(c1,-1);
这个-1说明行位置-1
c2=12*ones(1,n);
a2=diag(c2);
c3=ones(1,n-1);
a3=diag(c3,1);
a=a1+a2+a3;
3.拉格朗日插值
functionyh=lage(x,y,xh)
n=length(x);
m=length(xh);
yh=zeros(1,m);
c1=ones(n-1,1);
c2=ones(1,m);
xp=x([1:
i-1i+1:
n]);
yh=yh+y(i)*prod((c1*xh-xp'
*c2)./(x(i)-xp'
*c2));
x=[11,12];
y=[2,4];
xh=[11.75];
lage(x,y,xh)
ans=
3.5000
4最小二乘法
1.最小二乘的xi和yi为:
xi
1953
1964
1982
1990
2000
yi
5.82
6.95
10.08
11.34
12.66
要拟合的函数为:
y=a+bx-cxy注意不是多项式
2.编程函数为:
functionz=erchen(x,y)
x1=ones(5,1);
A=[x1,x,-x.*y];
注意点乘
z=A\y;
注意左除
a=z
(1);
b=z
(2);
c=z(3);
end
输入:
≻≻x=[19531964198219902000]'
;
≻≻y=[5.826.9510.0811.3412.66]'
≻≻erchen(x,y)
2.9456=a
-0.0014=b
-0.0005=c
0.25
0.5
0.75
1.284
1.6487
2.1170
2.7183
y=a+bx+cx2是多项式
functionz=erchen2(x,y)
A=[x1,x,x.^2];
≻≻x=[00.250.50.751.00]'
≻≻y=[1.001.2841.64872.11702.7183]'
≻≻erchen2(x,y)
1.0051
0.8642
0.8437
最小二乘多项式拟合的简单函数方法:
≻≻P=polyfit(x,y,2)要拟合成4次,则2改成4就可以了
P=
0.84370.86421.0051注意此内置函数输出的结果c,b,a是反的
5复合辛普森公式求解积分
先定义函数:
functionv=f(x)
v=sin(x);
“若定义有除数要点除,分母有0时要特殊定义”
定义程序:
functionI=fsps(f,a,b,n)
h=(b-a)/n;
x=linspace(a,b,2*n+1);
y=feval(f,x);
I=(h/6)*(y
(1)+2*sum(y(3:
2:
2*n-1))+4*sum(y(2:
2*n))+y(2*n+1));
fsps('
f'
0,1,4)
0.4597
6.不动点迭代思路
不动点迭代常常有好几个迭代的不动点函数,所以要分别定义这些函数是很困难的,如是乎使用SWITCH内置函数进行切换,叫切换函数.
1.先定义函数后进行编程的方法
先需要定义不动点函数:
v=x^3-x-1;
再定义编程:
function[it,x]=fixpnt1(f,a,maxit,tol)
it=0;
x=feval(f,a);
whileit<
=maxit&
abs(x-a)>
tol,
it=it+1;
a=x;
x=feval(f,a);
此函数的调用:
fixpnt1('
f'
2,100,1e-5)
3.利用切换函数SWITCH的方法(多个不动点迭代函数)
function[x,it]=fixpnt(np,a,maxit,tol)
switchnp,
case1,
phi=inline('
(3*x+10)^(1/5)'
);
case2,
sin(10*x)+2*cos(x)-3'
case3,
3-atan(x)'
case4,
-2-1/log(x^2+x+1)'
x=phi(a);
x=phi(a);
使用与输入:
fixpnt(2,1,100,1e-5)
-4.2696
7.雅可比迭代
function[xit]=jacobi(A,b,tol)
D=diag(diag(A));
L=D-tril(A);
U=D-triu(A);
x=zeros(size(b));
forit=1:
500
x=D\(b+L*x+U*x);
error=norm(b-A*x)/norm(b);
if(error<
tol)
break;
8.高斯迭代
function[xit]=gaosi(A,b,tol)
x=(D-L)\(b+U*x);
9.SOR迭代
function[xit]=SOR(A,b,w,tol)
x=(D-w*L)\(w*b+(1-w)*D*x+w*U*x);
10.二分法:
1.先要定义所求的函数:
2.二分法程序如下:
function[x,it]=erfengfa(a,b,f,tol)
fa=feval(f,a);
fb=feval(f,b);
whileabs(b-a)>
tol,
x=a/2+b/2;
fx=feval(f,x);
ifsign(fx)==sign(fa),
a=x;
fa=fx;
else
b=x;
fb=fx;
11.牛顿法:
先需要定义不动点函数
需要计算的函数f
functionv=f(x)
v=x^5-3*x-10;
需要计算的函数的导数g
functionv=g(x)
v=5*x^4-3;
2.再定义编程:
functionv=newton(a,f,g,maxit,tol)
x=a;
whileit<
abs(feval(f,x))>
it=it+1;
x=x-feval(f,x)/feval(g,x);
v=[x,it];
12.牛顿下山法:
functionv=f(x)
v=x^2+sin(10*x)-1
functionv=g(x)
v=2*x+10*cos(10*x)
2.再定义编程1:
functionv=newtonxiashang(x0,f,g,maxit,tol)
x=x0;
d=-feval(f,x)/feval(g,x);
lambda=1;
isdone=0;
while~isdone,
xn=x+lambda*d;
ifabs(feval(f,xn))<
abs(feval(f,x)),
isdone=1;
elselambda=lambda*0.5;
x=xn;
3.再定义编程2:
functionv=newtonxiashang2(x0,f,g,maxit,tol)
whileabs(feval(f,x+lambda*d))>
=abs(feval(f,x)),
lambda=0.5*lambda;
x=x+lambda*d;
v=[x,it];
13.割线法
先需要定义函数
functionv=gexian(a,b,f,maxit,tol)
x0=a;
x=b;
w