Solve linear equation in matrix form with least square method
10 次查看(过去 30 天)
显示 更早的评论
I have linear equation Ax=b, the size of every matrix are : matrix A is 1009*1008, vector b is 1009*1, and vector x is 1008*1.
If I use lsqr command which is lsqr(A,b), this come out
"Error using iterchk (line 38)
Argument must be a floating point matrix or a function handle.
Error in lsqr (line 93)
[atype,afun,afcnstr] = iterchk(A);".
If I try simple matrix, it can calculate easily.
If I use (A.'*A)\(A.'*b), i can get the result, but why this code lsqr(A,b) cannot
I want to know what is wrong and how to solve it.
Actually i have 1009 linear equation and 1008 variable, so i use this method, or is there any method to use to solve this problem?
0 个评论
采纳的回答
Matt J
2023-5-26
编辑:Matt J
2023-5-26
If I use (A.'*A)\(A.'*b), i can get the result
An even easier and more accurate way to get it is,
x=A\b
and that is the method you should be using for matrix data of this size. As to why you get the error, perhaps your A matrix is not type double, but some other type? E.g.,
A=randi(3,3,'int8');
b=A(:,1);
lsqr(double(A),double(b))
lsqr(A,b)
12 个评论
Walter Roberson
2023-5-27
The least squares solvers like A\b and lsqrt work with numbers, not symbolic variables.
syms A [3 3]
syms b [3 1]
A\b
However, with a system of rank 1008, unless it is pretty much a diagonal matrix, the time required to solve might be enormous.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Linear Algebra 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!