MATLAB:一些杂例

a = 2; b = 5;
x = 0:pi/40:pi/2; %增量为pi/40
y = b*exp(-a*x).*sin(b*x).*(0.012*x.^4-0.15*x.^3+0.075*x.^2+2.5*x); %点乘的意义
z = y.^2; %点乘的意义
w(:,1) = x; %组成w,第一列为x
w(:,2) = y; %组成w,第二列为y
w(:,3) = z; %组成w,第三列为z
format short g; %短格式显示
w %不加分号,显示数据
%绘图显示,注意各种符号的属性设置
plot(x,y,'--rp','LineWidth',1.5,'MarkerSize',15,'MarkerEdgeColor','r','MarkerFaceColor','w');
hold on
plot(x,z,'b-s','MarkerEdgeColor','b','MarkerFaceColor','g');
legend('y关于x曲线','z关于y的曲线');

clc,clear;
q0 = 10; R = 60; C = 0.00005; t = linspace(0,0.8,100);
styleline = {'r-','b--','m:','c-.'};
leg = {};
i = 1; Qtl(1,:) = t;
for L = 3:3:12
    qt = q0*exp(-R*t/2/L).*cos(sqrt(1/L/C-(R/2/L)^2).*t);
    Qtl(i+1,:) = qt;
    plot(Qtl(1,:),Qtl(i+1,:),styleline{i});
    plot(t,qt,styleline{i},'LineWidth',2);
    leg{i} = strcat('L = ', num2str(L));
    i = i + 1;
    hold on
end
title('电量随时间的变化曲线'); 
legend(leg,'location','best'); 
xlabel('t(s)'); 
ylabel('q(t)'); 
grid on

%按要求处理第(1)步
x=0:pi/100:3*pi;
y=sin(x);
y1=(y>=0).*y; %消去负半波
p=sin(pi/3);
%按要求处理第(2)步
y2=(y>=p)*p+(y<p).*y1; 
plot(x,y,'r-','LineWidth',2)
hold on; 
grid on
plot(x,y2,'b-','LineWidth',2)

例4:元胞数组示例

x = 0:pi/100:2*pi; %x从[0, 2pi]之间等分100份
y(1,:) = x.*sin(x); %第一个函数,且计算值
y(2,:) = x.^2-4*x-4;
y(3,:) = x.*cos(x);
y(4,:) = x.*log(x);
colors = {'r','b','g','m'}; %颜色元胞数组
linestype = {'-','--',':','-.'}; %线形元胞数组
led = {'x.*sin(x)','x.^2-4*x-4','x.*cos(x)','x.*log(x)'}; %图例元胞数组
for i = 1:4 %循环绘制4条曲线
    plot(x,y(i,:),strcat(colors{i},linestype{i}),'LineWidth',2);
    hold on
end
legend(led,'Location','best') %添加图例
grid on; 
hold off

例5. 方向余弦矩阵(DCM, Direction Consine Matrix)

例6. 计算平行六面体的体积

例7. 用Cramer法则求解线性方程组

clc, clear
D = [2, 2, -1, 1; 4, 3, -1, 2; 8, 5, -3, 4; 3, 3, -2, 2];
b = [4; 6; 12; 6];
D1 = [b, D(:, 2:4)];
D2 = [D(:, 1:1), b, D(:, 3:4)];
D3 = [D(:, 1:2), b, D(:, 4:4)];
D4 = [D(:, 1:3), b];
DD = det(D);
x1 = det(D1) / DD;
x2 = det(D2) / DD;
x3 = det(D3) / DD;
x4 = det(D4) / DD;
X = [x1, x2, x3, x4]
% X = [1, 1, -1, -1]

Cramer(D, b)
function Cramer(A, b)
%% 1、输入参数的判断
    if nargin == 0 || nargin == 1
        disp('您输入的参数个数不足!');
        return
    end
%% 2、判断是否为方阵
    [rs, cs] = size(A);
    if rs ~= cs
        disp('系数矩阵必须是方阵,否则无法用Cramer法则求解!');
        return
    end
%% 3、求解判断系数矩阵行列式的值
    D = det(A);
    if D == 0
        disp('系数矩阵行列式等于0!');
        return
    end
%% 4、用Cramer法则求解和输出
    disp('线性方程组的解为:');
    for i = 1:rs
        AX = [A(:, 1:i-1), b, A(:, i+1:cs)];
        x = det(AX) / D;
        fprintf('x%d = %.6f\n', i, x)
    end
end

例8. 矩阵分解

clc, clear
%% 对称正定矩阵的三角分解——Cholesky分解
A = gallery('lehmer', 5)  % 生成正定矩阵
L = chol(A)
L'*L
% A = L' * L
norm(A - L' * L, 'fro')

%% 实对称矩阵的QDQ分解
B = gallery('fiedler', 5)  % 生成对称矩阵
[V, D] = eig(B)
V*D*V'
norm(V*D*V' - B, 'fro')

%% LU分解
%[𝑳, 𝑼, 𝑷] = 𝒍𝒖(𝑨): 𝑷𝑨 = 𝑳𝑼
[L, U, P] = lu(A)

A = [2 5 4 1;1 3 2 1;2 10 9 7;3 8 9 2];
b = [20 11 40 37]';
[L, U, P] = lu(A)
Y = inv(L)*P*b
X = inv(U)*Y
X1 = A\b

%% QR分解
A = magic(5)
[Q, R] = qr(A)
Q*R

%% 奇异值分解
A = round(5*randn(5, 4))
s = svd(A)  % s = svd(A) 以降序顺序返回矩阵 A 的奇异值。
[U, S, V] = svd(A)

B = A'*A;
D = eig(B);
sqrt(D)

例9. 线性方程组求解

function [x, y] = leqsolve(A, b)
%% 求解线性方程组的解,
% 输入参数:A系数矩阵,b是右端向量,
% 输出参数:x是唯一解或特解,y是基础解系
    if nargin < 2
        disp('请您输入系数矩阵A和右端向量b!')
        return
    end
    y = [];  % 基础解系
    [m, n] = size(A);  % 系数矩阵维度的长度
    if norm(b) > 0  % 非齐次方程
        if rank(A) == rank([A, b])  % 方程组相容,有解
            if rank(A) == n  % 唯一解
                disp('方程组有唯一解:')
                x = A\b;
            else  % 方程有无穷多个解,基础解系
                disp('方程组有无穷多个解,其齐次方程组的基础解系是y,特解是x:')
                x = A\b;  % 特解
                y = null(A, 'r');  % 基础解系
            end
        else  % 方程组不相容,给出最小二乘解
            disp('方程组最小二乘解是:')
            x = A\b;
        end
    else  % 齐次方程
        if rank(A) >= n  % 列满秩
            x = zeros(n, 1);  % 零解
        else  % 非零解
            disp('方程组有无穷多个解,基础解系x是:')
            x = null(A, 'r');
        end
    end 
end

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

捕捉一只Diu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值