matlab 中关于AX=B 的求解的一个问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 中关于AX=B 的求解的一个问题相关的知识,希望对你有一定的参考价值。

clear all;
M=1.05;
F=40.0;
tt=0.002;
a=2/3*F^2*log(M);
n=0:30;d(1)=1;d(31)=0;
s=exp(-a*n*tt).*sin(2*pi*F*n*tt);
r(1)=0.2;r(33)=-0.4;r(37)=0.15;r(52)=0.5;
r(72)=-0.35;r(87)=0.1;r(122)=0.2;r(131)=0;
rand('state',0);N=rand(1,161);
X=conv(r,s)+N;c=fliplr(s);rb=conv(s,c);
rbb=toeplitz(rb);rdb=conv(d,c)';
A=inv(rbb)*rdb;
plot(A); 无论是用A\B还是A的逆去乘B。。都是错误的。。。求高人指点。。matlab新手

用其中任意三个线性无关的方程求出a,b,c的一组值,但是这样我们就浪费了很多数据。

2.如果同时求解8个方程肯定无解,但是我们想要找到一个向量Y使得AY与B(B应该是一列向量)最为接近,而AY是A的列向量的一个线性组合,所以此问题转化为在A的列向量所生成的空间SA中寻找一向量Y使AY与B最为接近,至于如何度量接近程度一般使用欧氏范数||AY-B||。

3.根据最佳逼近定理显然B与其在SA中的正交分解(或垂直投影)pb的距离是B与SA中所有向量距离的最小者。此时Y便是AY=pb的解,由于pb是A的列向量的线性组合,所以此方程肯定有解。但每次求解时都计算b是一件很繁琐的事,所以我们要寻找一个更简便的方法。

4.由于pb是B在SA中的正交分解,所以(B-pb)⊥SA,所以(B-pb)垂直于A的每一个列向量a1,a2…an,其转置记为ta1,ta2,…tan,可知此时有ta1.(B-pb)=0,ta2.(B-pb)=0…(向量内积定义),即(A的转置A')A'(B-pb)=0,即A'pb=A'B,而pb=AY
所以A'AY=A'B,此方程成为AX=B的正规方程,由此亦可求出最佳逼近Y。此时系数矩阵已是方阵且可逆,Y=A'A\A'B=inv(A'A)*(A'B)。

5.此问题有另外分析解法,即求使Q=∑(1-ax-by-cz)^2达最小的a,b,c的值,分别对a,b,c求偏导数并令其为零亦可得到正规方程(组)。

6.此问题是最小二乘问题或称数据拟合(方法属于Gauss),至于最佳逼近和正交分解可参考有关线性代数或泛函分析的书籍。

希望对你有所帮助……
参考技术A 用A=pinv(rbb)*rdb追问

rbb是方阵啊。。。而且得出的结果与期望不符

追答

rbb不是满秩矩阵(奇异),无法求逆,只能求伪逆。也就是说这个方程的解是不存在的,只能得到最小二乘解。下面的是matlab的说明例子,你看了就明白了。

A is singular, A\b returns the following warning.
Warning: Matrix is singular to working precision.

In this case, Ax = b might not have a solution. For example,
A = magic(5);
A(:,1) = zeros(1,5); % Set column 1 of A to zeros
b = [1;2;5;7;7];
x = A\b
Warning: Matrix is singular to working precision.

ans =

NaN
NaN
NaN
NaN
NaN

If you get this warning, you can still attempt to solve Ax = b using the pseudoinverse function pinv.
x = pinv(A)*b

x =

0
0.0209
0.2717
0.0808
-0.0321

The result x is least squares solution to Ax = b. To determine whether x is a exact solution -- that is, a solution for which Ax - b = 0 -- simply compute
A*x-b

ans =

-0.0603
0.6246
-0.4320
0.0141
0.0415

matlab 中关于 varargin 参数

varargin 提供了一种函数可变参数列表机制,允许调用者调用该函数时根据需要来改变输入参数的个数;

varargin{1}代表可变参数列表的第一个实参,同理varargin{2}代表可变参数列表的第二个实参;

size(varargin, 2)表示可变参数列表的实参总数量(不是总的实参总数量,因为传参时可能不止传可变参数列表)

ex:

function fun(a, b, c, varargin)

.....

end

调用时:

fun(x1, x2, x3, x4, x5, x6)

则 nargin=6,  而size(varargin, 2)=3,  varargin{1}为x4,  varargin{3}为x6

 

以上是关于matlab 中关于AX=B 的求解的一个问题的主要内容,如果未能解决你的问题,请参考以下文章

Matlab求解线性方程组Ax=b的几种常见方法Matlab求解线性方程组Ax=b的几种常见方法

矩阵方程。 AX=B B在啥情况下一定有解

matlab求AX=B???

matlab中关于卷积有一个这样的例子 conv([1 1 1],[1 1 1]) 运行后的结果为 1 2 3 2 1

matlab求AX=B

超定线性方程组Ax=b极小L1范数求解——MATLAB/Python实现