实验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('符号函数');

实验1 MATLAB 基本特性与基本运算练习题_第1张图片

% 从图中可以,零点大概在 -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); % 把解列出来

实验1 MATLAB 基本特性与基本运算练习题_第2张图片

% 求极值:在 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 MATLAB 基本特性与基本运算练习题_第3张图片
在这里插入图片描述

% (1) 利用函数零点命令(fzero)求无理数e的近似值;
clear;close all;clc;
% 将符号函数表述出来,并用符号函数int积分方法,积出来
syms x;
fx=4/(1+x^2);
pi=int(fx,0,1);
pi=vpa(pi,10);
fprintf("int积分方法%.10f\n",pi);
% (2) 用定积分计算命令(trapz,quad,quadl)求无理数pi的近似值;
f=inline(fx);
% 利用梯形法(trapz)近似计算
X=0:0.001:1; % 这个步长对计算准确度很重要
Y=4./(1+X.^2);
a=trapz(X,Y);
pi=vpa(a,10); % 显示小数点后10fprintf("梯形法近似计算:%.10f\n",pi);
% 用quad进行积分计算
a=quad(f,0,1);% 用【辛普生方法】求f在[0,1]上的积分近似值
pi=vpa(a,10);
fprintf("quad积分近似计算:%.10f\n",pi);
% 用quadl进行积分计算
a=quadl(f,0,1);% 用【高阶方法】求f在[0,1]上的积分近似值
pi=vpa(a,10);
fprintf("quadl积分近似计算:%.10f\n",pi);
% 用推荐的integral进行积分计算
% integral第一个参数f要求必须要使用函数句柄
f=@(x)4./(1+x.^2);
a=integral(f,0,1);% 使用【全局自适应积分和默认误差】求f在[0,1]上的积分近似值
pi=vpa(a,10);
fprintf("integral进行积分计算:%.10f\n",pi);
int积分方法3.1415926536
梯形法近似计算:3.1415924869
quad积分近似计算:3.1415926829
quadl积分近似计算:3.1415927070
integral进行积分计算:3.1415926536

在这里插入图片描述

clear;close all;clc;
fprintf("习题1.13答案:\n");
% (1)很明显先用符号函数将极限函数建立
syms x;
% 由于其中还有其他非Matlab内置的参数a,所以将用str2sym来建立符号函数。
% 如果直接建立:fx=((x-a)/(x+a))^x或fx=sym(((x-a)/(x+a))^x),会报错:未定义函数或变量 'a'。
fx=str2sym('((x-a)/(x+a))^x');
f=limit(fx,x,inf);
disp(f);
% (2)同明显
syms x;
fx=(tan(x))^(1/log(x));
f=limit(fx,x,0,'right');
disp(f);

在这里插入图片描述

clear;close all;clc;
syms a b
fab=(a+1)^3+(b-1)^2+a+2*b;
fb=taylor(fab); %先默认展开是,按b展开
fa=taylor(fb,a); % 再要求按a展开
fa

在这里插入图片描述

clear;close all;clc;
syms k;
symsum(1/k^2,1,20);
disp(ans);

你可能感兴趣的:(Matlab)