实验1 MATLAB 基本特性与基本运算练习题

Posted 从零开始的智障生活

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验1 MATLAB 基本特性与基本运算练习题相关的知识,希望对你有一定的参考价值。

实验1 MATLAB 基本特性与基本运算练习题

不懂基础可以参看:Matlab基础
在这里插入图片描述

A=[2,-1;-1,2];B=[0,-2;-2,0];
% (A+E)X=B+2A
E=eye(2);   % 设定二阶单位矩阵
if det(A+E)~=0  % 方阵行列式不为0,则是可逆矩阵
    C=inv(A+E); % 先求系数矩阵的逆矩阵
    X=C*(B+2*A); % 通过左乘可逆矩阵来解
    fprintf("习题1.1答案:")
    X
else
    fprintf("此题无解")
end

在这里插入图片描述

i=sqrt(-1); % 设置虚数
a=1+3*i;b=2-i;
fprintf("习题1.2答案:\\n")
fprintf("a+b:");a+b
fprintf("a-b:");a-b
fprintf("axb:");a*b
fprintf("a/b:");a/b

在这里插入图片描述

A=fix(randn(3,3)*10);B=fix(randn(3,2)*10);
fprintf("习题1.3答案:\\n")
A
B
AB=A*B;
fprintf("(1)AB=\\n");
disp(AB);
C=B.^2;%C=B.*B
fprintf("(2)C=\\n");
disp(C);
fprintf("(3)sinB=\\n");
disp(sin(B));
fprintf("(4)det(A)=\\n")
disp(det(A));
if det(A)~=0 %或rank(A)~=3
    fprintf("(5)A可逆,且A逆=\\n");
    disp(inv(A));
    fprintf("(6)X=\\n");
    disp(inv(A)*B);
else
    fprintf("(5)A不可逆\\n");
    fprintf("(6)无解\\n");
end
    fprintf("(7)");
    D=A;
    D(2,:)=D(2,:)+1 %截取第2行,第1列到最后一列(一个冒号就行)加1并赋值给第二行

在这里插入图片描述

%方法1:把值带进去一个一个算
fprintf("习题1.4答案(方法1):\\n")
x=[1,3,5,7,4,-4];
y=(x.^2+exp(x).*cos(x)+floor(x))./x;
disp(y);
%方法2:编写函数文件,由于此题不是常用函数,所以算了
%方法3:建立数值函数
x=[1,3,5,7,4,-4];
f=inline('(x.^2+exp(x).*cos(x)+floor(x))./x');%注意都用乘除法和幂前面都加点,x我们作向量看,是对里面的每个元素单独处理,而不是针对向量
fprintf("习题1.4答案(方法3):\\n");
disp(f(x));
% 方法4:建立符号函数
syms x % 声明符号变量x
f=(x.^2+exp(x).*cos(x)+floor(x))./x;%这里不用加引号
%或直接 f=sym('(x.^2+exp(x).*cos(x)+floor(x))./x') 注意少一个s
fprintf("习题1.4答案(方法4):\\n")
x=[1,3,5,7,4,-4];% 注意这个变量名一定是x,不能是其他,如a等
disp(eval(f));

在这里插入图片描述

x=-4.5/360*2*pi;y=7.6/360*2*pi;
fprintf("习题1.5答案:%f\\n",sin(abs(x)+y)/sqrt(cos(abs(x+y))));

在这里插入图片描述

x=linspace(-5,5,100);
y=x.^3./(1+x.^2);
z=log(1+x.^2)./(x.^2);
h1=figure;
subplot(1,2,1);
plot(x,y,'r -');
grid;
subplot(1,2,2);
plot(x,z,'k -');
grid;
set(h1,'color','m')

在这里插入图片描述

fprintf("习题1.7\\n");
x=linspace(-5,5,100);
f=exp(2*sin(x)).*cos(x)-exp(2*cos(x)).*sin(x);
plot(x,f,'c -','linewidth',2);
grid;

在这里插入图片描述

clear;clc;
fprintf("习题1.8答案:\\n");
% 本题的答案有点特别,所以我先画个图查看一下
% 利用一般的数组方式实现画图:plot
subplot(1,3,1);
x = linspace(-5,5,100);S = exp(2*sin(x)).*cos(x)-exp(2*cos(x)).*sin(x);
plot(x,S);grid;
legend('一般数组');
% 利用数值函数方式实现画图:fplot
subplot(1,3,2);
fx=inline('exp(2*sin(x)).*cos(x)-exp(2*cos(x)).*sin(x)');
fplot(fx,[-5,5]);grid;
legend('数值函数');
% 利用符号函数方式实现画图:ezplot
subplot(1,3,3);
fx=str2sym('exp(2*sin(x)).*cos(x)-exp(2*cos(x)).*sin(x)');
ezplot(fx,[-5,5]);grid;
legend('符号函数');

在这里插入图片描述

% 从图中可以,零点大概在 -5,-2,0.2,0.8,1.3,3.9 附近,所以接下来求零点。
% 利用数值函数求零点
fx=inline('exp(2*sin(x)).*cos(x)-exp(2*cos(x)).*sin(x)');
c1=fzero(fx,-5); % fzero只会返回一个值,而且fzero要求f(-5)*f(5)<0,但是拉大范围后,[-200,200]还是0[-200,10]却不是。
c2=fzero(fx,-2);c3=fzero(fx,0.2);c4=fzero(fx,0.8);c5=fzero(fx,1.3);c6=fzero(fx,3.9);
fprintf("利用数值函数求零点:%f\\t%f\\t%f\\t%f\\t%f\\t%f\\n",c1,c2,c3,c4,c5,c6);
% 利用符号函数求零点
% 注意我用的是matlab 2019,已经不接受向 solve中传入字符串,所以需要注意,matlab基础中有介绍
syms x; % 符号函数以x为变量,一些函数是多参的,
eqn=exp(2*sin(x))*cos(x)==exp(2*cos(x))*sin(x);
[S,params,conds]=solve(eqn,x,'ReturnConditions',true); % 求方程eqn的解,报错:Unable to find explicit solution.(不能找到显式解)
fprintf("利用符号函数求零点:\\n");
disp(S); % 把解列出来

在这里插入图片描述

% 求极值:在 Matlab 中并没有直接求极值的函数,所以要根据定义和性质求
% 极值的定义:f(x)在x=x0的某邻域有定义,如果存在一个邻域U(x0),当x属于U(x0)时,有f(x)>=(<=)f(x0),称f(x0)为f(x)的一个极小(极大)值,点x=x0称为f(x)的一个极小(极大)值点。
% 由此可见,极值与导数没有绝对关系,但是,却可以利用导数求极值。
% 极值第一充分条件:设f(x)在x=x0处连续,在x=x0的去心邻域内可导(这个不用担心,在Matlab中只要是在同一个定义域中,即使定义的是x=linspace(-5,5,100)100个点,但还是会被认为是一条连续可导的曲线(除非是特别的有无穷大的函数))
% 1) 若在x=x0的左侧邻域内f'(x)>0,右侧邻域内f'(x)<0,则f(x0)为极大值;
% 2)若在x=x0的左侧邻域内f'(x)<0,右侧邻域内f'(x)>0,则f(x0)为极小值。
% 极值第二充分条件:设f(x)在x=x0处存在二阶导,f'(x0)=0,f"(x0)!=0:
% 1) 若f"(x0)<0,则f(x0)为极大值;
% 2) 若f"(x0)<0,则f(x0)为极小值;
% 注意:
% f"(x0)存在,并不意味着,在x=x0的邻域内,f"(x)存在,即某一点导数存在,与其邻域内可导没有直接关系。
% 但是,可以看出本题函数就是可以求二阶导,而且这是Matlab,任何离散的点,都可以构成曲线。
% 我们先用第一充分条件来试试
% 从上面可以知道用符号函数对于复杂的函数,要想求解是比较困难的。所以选择使用数值函数。
clear;close all;clc;
% 我们先用符号函数,求一阶导
syms x;
fx=exp(2*sin(x)).*cos(x)-exp(2*cos(x)).*sin(x);
fx_1=diff(fx,x);
ezplot(fx_1,[-5,5]);% 画出图像找出一阶导在[-5,5]的零点,且零点左右异号的点
title('f(x)一阶导图像');
grid;
% 从图中判断:一阶导零点左负右正(极小值)在以下点附近:-40.47,2.2
% 一阶导零点左正右负(极大值)在以下点附近:-0.6,1
fx=inline(fx);
fx_1=inline(fx_1);%需要将符号函数化作数值函数
x0min=[-4,0.47,2.2];
fprintf("利用观察图形法,并用数值函数求得,极小值为:");
for i=1:length(x0min)
  zeropmin=fzero(fx_1,x0min(i));
  fprintf("%f\\t",fx(zeropmin));
end
x0max=[-0.6,1];
fprintf("\\n利用观察图形法,并用数值函数求得,极大值为:");
for i=1:length(x0max)
  zeropmax=fzero(fx_1,x0max(i));
  fprintf("%f\\t",fx(zeropmax));
end

在这里插入图片描述

clear;close all;clc;
syms t x;
ft=t^3+2*exp(t)-3*cos(t);
% 因为积分是带参积分,所以先用符号函数的积分函数int进行积分。
s=[1,11,21];
hold on;
for i=1:length(s)
    fx=int(ft,t,0,x)-s(i);
    % eqn=fx==0;
    % 先尝试直接用符号函数求解,
    % [S,params,conds]=solve(eqn,x,'ReturnConditions',true);
    % Warning:Unable to find explicit solution.还是无法获取显式解,所以下面使用数值函数
    % 尝试用观察图形,并用数值函数求解,
    fx=inline(fx);
    fplot(fx,[-1000,1000]);% 从图中可以看出零点都在[-10,0][0,10]上
    lzerop=fzero(fx,[-10,0]);
    rzerop=fzero(fx,[0,10]);
    plot(lzerop,0,'r^');
    plot(rzerop,0,'r*');
    fprintf("当s=%d时,方程解是:%f与%f\\n",s(i),lzerop,rzerop);
    axis([-10 10 -10 10]);
end
legend("曲线型","左零点","有零点")
grid;

在这里插入图片描述
在这里插入图片描述

% (1) 利用函数零点命令(fzero)求无理数e的近似值;
clear;close all;clc;
% 将符号函数表述出来,并用符号函数int积分方法,积出来
syms x;
fx=4/(1+x^2);
pi=int(fx全套完结数字信号处理----全套Matlab实验报告建议保存

全套完结信号与线性系统分析--Matlab实验报告手册建议保存

GPS基本原理及其Matlab仿真的目录

实验二

matlab练习二 基本绘图

Matlab-基本操作与矩阵输入