Matlab求{1}-inverse

最近像疯狗一样搞了一波科研。

上次还是本科的偏微分方程考试前,一学期没上课做作业然后去医院缓考失败,晚上陪同学走完红毯以后开始预习,第二天八点考试。然后竟然是C-。

所以说,永远不能低估一个懒人的决心。

------------------------------------------------------------------------------------------------------------------------------------------------

今天为啥要写这个呢,因为我怀疑Matlab里面的pinv用来求{1}-inverse,会有很大的精度误差,所以打算找一个求{1}-inverse的函数。

Matlab里面没有现成的,然后网上也找不到,为了偷懒不自己写我只能用rref了。

核心思路就是利用rref里面的高斯消元做两遍,由于没有查到rref怎么记录变换矩阵,所以用附加矩阵的方法可以记录下变换矩阵(必须感谢我的两个高代老师哈哈)。

为了偷懒我也是蛮拼的。

下面贴个代码,伸手党接好,错了别找我。(我也想伸手啊!!!)

function [ y ] = ginv( A )
    [m,n] = size(A);
    M1 = cat(2,A,eye(m));
    M2 = rref(M1);
    PA = M2(:,1:n);
    P = M2(:,n+1:n+m);
    M3 = cat(2,PA‘,eye(n));
    M4 = rref(M3);
    J = M4(:,1:m);
    Q = M4(:,m+1:m+n);
    y = Q‘*J‘*P;
end

偷到了懒心情大好,写个博客纪念一下哈哈。

(后记:果然精度提高了。然并卵,我发现pinv的误差在矩阵比较小的时候并不会把结果搞得很离谱,也就是还是错了,查了一下发现是别地儿码错了,哎。)

时间: 2024-10-10 15:12:10

Matlab求{1}-inverse的相关文章

Matlab求三重积分

Matlab求三重积分 求 \(\int_0^1 \int_0^1 \int_0^1 sin(\pi x_1 x_2 x_3) dx_1 dx_2 dx_3\) 代码是: triplequad(@(x,y,z)sin(pi*x*y*z), 0,1,0,1,0,1)

MATLAB 求两个矩阵的 欧氏距离

MATLAB 求两个矩阵的 欧氏距离 : 如果定义两个矩阵分别为a,b则定义c=(a-b).^2所求距离d=sqrt(sum(c(:))) 原文地址:https://www.cnblogs.com/shenxiaolin/p/9940284.html

MATLAB求马氏距离(Mahalanobis distance)

MATLAB求马氏距离(Mahalanobis distance) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.马氏距离计算公式 d2(xi, xj)=(xi-xj)TS-1(xi-xj) 其中,S是总体的协方差矩阵,而不是样本的协方差矩阵. 2.matlab中现有的函数 >> x=[155 66;180 71;190 73;160 60;190 68;150 58;170 75] x = 155 66 180 71 190 73 160

matlab求导

在matlab中求导要进行符号运算. >>syms x; >>y = x^cos(x); >>ydot = diff(y, x, 1);%对x求一阶导数 ydot =   x^(cos(x) - 1)*cos(x) - x^cos(x)*log(x)*sin(x) >> y2dot = diff(y, x, 2)%求二阶导数,求n阶导数同理. y2dot =   cos(x)*(x^(cos(x) - 2)*(cos(x) - 1) - x^(cos(x)

matlab求方差,均值,均方差,协方差的函数

1. 均值 数学定义: Matlab函数:mean >>X=[1,2,3] >>mean(X)=2 如果X是一个矩阵,则其均值是一个向量组.mean(X,1)为列向量的均值,mean(X,2)为行向量的均值. >>X=[1 2 3 4 5 6] >>mean(X,1)=[2.5, 3.5, 4.5] >>mean(X,2)=[2 5] 若要求整个矩阵的均值,则为mean(mean(X)). >>mean(mean(X))=3.5 也可

利用MATLAB求方程y1=3x1+x2+x3,y2=3x1-x2-x3在x1=-2,x2=3,x3=1时的值

求方程y1=3x1+x2+x3,y2=3x1-x2-x3在x1=-2,x2=3,x3=1时的值. 解:打开MATLAB输入如下指令: x1=-2;x2=3;x3=1; >> y1=3*x1+x2+x3 y1 = -2 >> y2=3*x1-x2-x3 y2 = -10

Matlab求方差,均值

参考:http://www.cnblogs.com/linkr/articles/2297783.html 1.均值 数学定义:平均数是表示一组数据集中趋势的量数,是指在一组数据中所有数据之和再除以这组数据的个数.它是反映数据集中趋势的一项指标. Matlab函数:mean >>x=[1,2,3] >>mean(x)=2 如果X是一个矩阵,则其均值是一个向量组.mean(X,1)为列向量的均值,mean(X,2)为行向量的均值. >>X=[1 2 3; 4 5 6] &

matlab求导数

clc; %清屏 clear; %清除变量 close all; %关闭 syms x; %定义变量,多个变量间用空格分离 f(x) = x^3; %原函数 res = diff(f(x),x,1); %函数的导数 pretty(res); %按照书面格式进行展示 ezplot(f(x)); %绘制原函数曲线 hold on; ezplot(res); %绘制导数的曲线 grid on;%加网格 legend('y=x^3','y=3*x^2');%加图例 title('函数求导数'); %{

利用matlab求图像均值和方差的几种方法

一.求均值 % 求一副灰度图像的均值 close all; clear; clc; i=imread('d:/lena.jpg'); %载入真彩色图像 i=rgb2gray(i); %转换为灰度图 i=double(i); %将uint8型转换为double型,否则不能计算统计量 % avg1=mean(i,1); %列向量均值 % avg2=mean(i,2); %行向量均值 % avg3=mean(i); %列向量均值 [m,n]=size(i); s=0; for x=1:m for y=