2020-1-30 matlab基础编程学习

我的未来我决定 提交于 2020-01-31 05:02:09
  • matlab 代码
  • CGLS代码
  • 泰勒解微分方程

CGLS 共轭梯度的最小二乘问题和代码

预先知识复习:

  • 线性方程组解的问题
    线性方程组
    假定对于一个含有n个未知数m个方程的线性方程组而言,若n<=m, 则有:

1、方程组有唯一解:当方程组的系数矩阵的秩=方程组增广矩阵的秩=方程组中未知数个数n;

2、方程组有无穷多解:当方程组的系数矩阵的秩=方程组增广矩阵的秩相等且<方程组中未知数个数n

3、方程组无解:当方程组的系数矩阵的秩<方程组增广矩阵的秩的时候

4、若n>m时,当方程组的系数矩阵的秩与方程组增广矩阵的秩相等的时候,方程组有无穷多解;

5、当方程组的系数矩阵的秩小于方程组增广矩阵的秩的时候,方程组无解。

cgls代码实现:

A=[5,-4,1,0;-4,6,-4,1;1,-4,6,-4;0,1,-4,5];
b=[2,-1,-1,2]';
n=length(b);
w=10;
D=diag(diag(A));
CL=-triu(A,1);
CLZ=CL';
L=((D-w*CL)*D.^(1/2))/sqrt(w*(2-w));
M=L*L';
C=inv(D)*CL;
u=[2,3,4,5]';
g=inv(L)*b;
B=inv(L)*A*inv(L)';
v=L'*u;
rw=g-B*v;
r=L*rw;
p=inv(M)*r;
z=p;
q=A*p;
for i=1:50
    af=r'*z/(p'*q);
    u=u+af*p
    r1=r-af*q;
    zw=(eye(n)-w*C)*D.^(1/2)\(w*(w-2)*r1);
    z1=D.^(1/2)*(eye(n)-w*C')\zw;
    bt=r1'*z1/(r'*z);
    p=z1+bt*p;
    q=A*p;
end
  % Boundary condition.
 % zw(:,1) = 0;
  %zw(:,n) = 0;
  %z(:,1) = 0;
  %z(:,n) = 0;
  %for i=2:10
   %   for j=2:10
    %  zw(i,j)=w*(zw(i,j-1)+z(i-1,j))/4+w*(2-w)*

泰勒解微分方程

%Taylor法求解常微分方程
function y=Taylor(a,b,N,af);
h=(b-a)/N;
x(1)=a;
y2(1)=af;
y4(1)=af;
jqj(1)=af;
for i=2:N
    y2(i)=y2(i-1)+h*((1-h/2)*(x(i-1)-y2(i-1))+1);%二阶Taylor法
    y4(i)=y4(i-1)+h*((1-h/2+h^2/6-h^3/24)*(x(i-1)-y4(i-1))+1)%四阶Taylor法
    x(i)=a+(i-1)*h;
    jqj(i)=x(i)+exp((-x(i)));
end
[x',y2',y4',jqj']
plot(x,y2,'r',x,y4','b',x,jqj,'g');
legend('Taylor2法','Taylor4法','精确解');
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!