matlab笔记总结(4)

news2024/9/22 11:41:25

https://www.bilibili.com/video/BV1MA4y1d7so/?spm_id_from=333.788&vd_source=3ef6540f8473c7367625a53b7b77fd66

司守奎老师在B站的讲解视频

https://matlabacademy.mathworks.com/cn/details/matlab-onramp/gettingstarted
MATLAB官方的入门之旅(英文)

MATLAB软件及算法实现

1.如何调整自己的工作区
2.使用matlab时的注意事项,比如不能按CTRL+Q
3.语句后面加分号,不是交互式,不加分号,会同时打印结果 即交互式。
4.字符串使用单引号才可以。
5.变量赋值不需要提前声明,随时使用。
6.clear清除变量,clc清除屏幕。
7.who和whos查看我们已经拥有的变量的各项树形。
类型强制转换。

一、MATLAB程序设计基础

MATLAB是一款以矩阵为基本运算单位的用途广泛,发展迅速,功能强大的数学与工程计算软件,我们先从认识MATLAB软件开始。

全世界数以百万计的工程师和科学家都在使用 MATLAB® 分析和设计改变着我们的世界的系统和产品。基于矩阵的 MATLAB 语言是世界上表示计算数学最自然的方式。可以使用内置图形轻松可视化数据和深入了解数据。欢迎您使用桌面环境进行试验、探索和发现。这些 MATLAB 工具和功能全部进行了严格测试,可彼此配合工作。

MATLAB 可帮助您不仅仅将自己的创意停留在桌面。您可以对大型数据集运行分析,并扩展到集群和云。MATLAB 代码可以与其他语言集成,使您能够在 Web、企业和生产系统中部署算法和应用程序。

clear: 删除变量。
clc: 清除屏幕的内容,但是不会清除已经存在的变量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ODpay7nJ-1682140527941)(2023-03-08-22-27-48.png)]

主界面上有5个窗口:主窗口,命令窗口,当前目录窗口,工作空间窗口,命令历史窗口,我们主要使用主窗口和命令窗口,其它窗口是辅助性的。命令窗口是我们和系统交互的场所,我们先来看一个实例:

例:计算,即123的45次方。这个问题用MATLAB来解决非常容易,只要在命令窗口中直接输入123^45,然后回车即可,得到的结果为1.1110e+094,表示。

为了进行更为复杂的运算,我们对MATLAB程序设计的一般方法作一点讨论。

1.1 MATLAB的基本操作和矩阵的基本运算

工作空间常用的管理指令有:

(1)who及whos(列出工作空间的所有变量):查询指令

(2)clear:清除工作空间中的所有变量

 clear var1 var2:清除工作空间中的变量var1和var2 
 clc: 清理窗口

(3)save FileName :把全部内存变量保存为Filename.mat文件

 save FileName v1 v2:把变量v1和v2保存为Filename.mat文件
 save FileName v1 v2 –append:把变量v1和v2添加到Filename.mat文件

(4)load FileName :把Filename.mat文件中全部变量调入内存
load FileName v1 v2:把Filename.mat文件中v1 , v2调入内存

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aFS9IXeJ-1682140527943)(2023-04-10-19-32-10.png)]

连接字符串
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jr9cj2kr-1682140527944)(2023-04-10-19-38-02.png)]

who whos
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jkZwgK29-1682140527945)(2023-04-10-19-48-59.png)]
(如果我们在一行中以 ; 分割,那么每个单独语句会被单独执行)

上面的栗子中,我们可以清楚地看到who 和 whos 的区别,who这个命令仅仅是列出变量的名字,而whos这个命令,显示的信息更加的全面,包括数据的大小(由于matlab默认用二维数组存放,所以对于数字,就是一行一列的数组,就是单个的值),类型,占了多少空间等数据。

baseNum = 123.456;
toUint8 = uint8(baseNum);
toUint32 = uint32(baseNum);%这个是注释的符号%
whos;

​​桌面基础知识

启动 MATLAB® 时,桌面会以默认布局显示。


桌面包括下列面板:


使用 MATLAB 时,可发出创建变量和调用函数的命令。例如,通过在命令行中键入以下语句来创建名为 a 的变量:

a = 1
MATLAB 将变量 a 添加到工作区,并在命令行窗口中显示结果。

a = 1
创建更多变量。

b = 2
b = 2
c = a + b
c = 3
d = cos(a)
d = 0.5403

如果未指定输出变量,MATLAB 将使用变量 ans(answer 的缩略形式)来存储计算结果。

sin(a)
ans =0.8415

如果语句以分号结束,MATLAB 会执行计算,但不在命令行窗口中显示输出。

e = a*b;
按向上 (↑) 和向下箭头键 (↓) 可以重新调用以前的命令。在空白命令行中或在键入命令的前几个字符之后按箭头键。例如,要重新调用命令 b = 2,请键入 b,然后按向上箭头键。

2.矩阵的产生

MATLAB的操作对象为矩阵。标量被看作是1×1的矩阵,维行向量或列向量可看作是或维矩阵。
行向量生成基本格式:start: step: end(step缺省时为1)
例如:在命令窗口中提示符>> 后输入,x=1:5,按回车【Enter】后,显示输出结果如下:

x =
1 2 3 4 5

Matlab的每条命令后,若为逗号“,”或无标点符号,则显示命令的结果;若命令后为分号“;”,则禁止显示结果,用“%”来实现注释功能。

利用下面两个函数也可以产生向量。

linspace:线性等分向量,例如,a=linspace(0,2*pi,100)。

logspace:对数等分向量,例如,a=logspace(0,2*pi,100)。

在矩阵的输入中,约定:(1) 元素之间用空格或逗号隔开;

(2) 用中括号方[ ]把所有元素括起来;

(3) 用分号(;)说明行结束。
在命令窗口,输入矩阵时,按Shift+Enter键表示开始输入新的一行,且要求所有的行具有相同的列。
例如:a=[1 2 3; 4,5 6; 7 8,9]
该矩阵一直保存在工作空间,直至被修改。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U90y57Sh-1682140527947)(2023-04-10-20-12-42.png)]

%程序文件gex118.m
clc,cleare
8(1);
%控制随机数生成器,进行一致性比较
al=and(5,2,3):
%生成2×3的[1,5]上的随机整数矩阵
a2=xand([0,6],2,3);
%生成2×3的[0,6]上的随机整数矩阵
a3-randi(5,3);
%生成3×3的[1,5]上的随机整数矩阵
a4=xand([0,6],3);
%生成3×3的[0,6]上的随机整数矩阵
a=[al,a2;a3,a4]
%构造分块矩阵
b=a(:,[end:-1:l])
%对矩阵的列进行逆序变换
b(end,:)=[]
%删除矩阵b的最后一行
c=b(:%逐列展开矩阵b的列形成一个长的列向量~
d=triu(a4,1)
%截取主对角线以上元素构成的矩阵

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tczup5JP-1682140527948)(2023-04-10-20-14-10.png)]

MATLAB画图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2SRHVUvG-1682140527948)(2023-04-21-16-52-43.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jAFxF3nk-1682140527948)(2023-04-21-16-56-30.png)]

二维图和三维图

线图
要创建二维线图,请使用 plot 函数。例如,绘制在从 02π 的值组成的线性间距向量上的正弦函数:

x = linspace(0,2*pi);
y = sin(x);
plot(x,y)


可以标记轴并添加标题。

xlabel("x")
ylabel("sin(x)")
title("Plot of the Sine Function")


通过向 plot 函数添加第三个输入参数,您可以使用红色虚线绘制相同的变量。

plot(x,y,"r--")


"r--" 为线条设定。每个设定可包含表示线条颜色、样式和标记的字符。标记是在绘制的每个数据点上显示的符号,例如,+、o 或 *。例如,g:*" 请求绘制使用 * 标记的绿色点线。

请注意,为第一幅绘图定义的标题和标签不再被用于当前的图窗窗口中。默认情况下,每次调用绘图函数、重置坐标区及其他元素以准备新绘图时,MATLAB® 都会清空图窗。

要将绘图添加到现有图窗中,请使用 hold on。在使用 hold off 或关闭窗口之前,当前图窗窗口中会显示所有绘图。

x = linspace(0,2*pi);
y = sin(x);
plot(x,y)

hold on

y2 = cos(x);
plot(x,y2,":")
legend("sin","cos")

hold off


三维绘图
三维图通常显示一个由带两个变量的函数 z=f(x,y) 定义的曲面图。例如,对于给定的行向量和列向量 x 和 y,每个向量包含 [-2,2] 范围内的 20 个点,计算 z=xe
−x
2
−y
2
 。

x = linspace(-2,2,20);
y = x';
z = x .* exp(-x.^2 - y.^2);
然后,创建曲面图。

surf(x,y,z)


surf 函数及其伴随函数 mesh 以三维形式显示曲面图。surf 使用颜色显示曲面图的连接线和面。mesh 生成仅以颜色标记连接线条的线框曲面图。

多个绘图
您可以使用 tiledlayout 或 subplot 在同一窗口的不同部分显示多个绘图。

tiledlayout 函数是在 R2019b 中引入的,该函数比 subplot 提供更多对标签和间距的控制。例如,在图窗窗口中创建 2×2 布局。然后,每当您要某个绘图出现在下一区域中时,请调用 nexttile。

t = tiledlayout(2,2);
title(t,"Trigonometric Functions")
x = linspace(0,30);

nexttile
plot(x,sin(x))
title("Sine")

nexttile
plot(x,cos(x))
title("Cosine")

nexttile
plot(x,tan(x))
title("Tangent")

nexttile
plot(x,sec(x))
title("Secant")

计算一元二次方程

以科学计算开始,使用matlab计算精确度很高,我们可以尝试来计算一下黄金分割率(定义大家可以自行百度一下,这里就不再说了):

计算黄金分割率的公式是:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0i7Biv3O-1682140527949)(2023-04-22-11-39-06.png)]

如果使用加法,得到的是1.618…,如果使用减法,得到的是0.618…,这两个结果都是正确的。因为他们两个只相差1.

首先,我们把这个公式转化一下,把根号去掉,转化为一个一元二次方程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AnqftjgQ-1682140527949)(2023-04-22-11-39-24.png)]

(因为+号时无解,所以舍去)

然后我们就只需要使用matlab解开这个方程了!

clear;
clc;
%% 本程序求解黄金分割率的比值
% r^2 - r - 1 = 0的解就是比值。
p = [1 -1 -1];
% 此数组代表了上式的二次项系数、一次项系数和常数项。
r = roots(p);
print_str = sprintf('r^2 - r - 1 = 0的结果是:%f和%f\n', r);
disp(print_str);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ziBTm98n-1682140527949)(2023-04-22-11-39-37.png)]
当然,如果我们实现不知道各个系数,只知道我们的公式(假设),我们可以使用solve函数来计算,可以大大节省我们的时间:

%% 第二种计算的方法。
clear;
clc;
r2 = solve('r^2 - r - 1 = 0');
print_str = sprintf('r*r - r - 1 = 0的结果是:%f和%f\n', r2);
disp(print_str);

同样也能得到我们想要的结果,但同时注意:占位符是 %f 千万不能写成其他的。

但是你可能觉得这个精确度不高,没问题,使用 vpa 方法可以提高精确度到很多位!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nVyeDkvD-1682140527949)(2023-04-22-11-41-28.png)]

第一个参数是我们的数据,第二个参数是我们精确到小数点后的位数。可以得到很多位的结果(好像理论是无限,但是前提是电脑的CPU够厉害并且你有足够的耐心并且你的内存够大!!在我的电脑上,计算到小数点后五万位已经有明显的一秒左右延迟了。)

看一元方程的图形

上面我们计算了这个方程,大家知道,在数学中,一元二次方程的表现是开口向上或者向下的抛物线,方程的解就是与X轴的交点(即零点)。

那么如何在matlab中表现呢?下面上代码!

%% 显示函数的图像

f = inline( 'x^2 - x - 1');  % 写出我们的函数
% 但是这个inline马上就不能用了,但是只是前期学习,不要介意
ezplot(f, -4, 4);   %显示我们的函数图形,
hold on;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uNsv9ZsL-1682140527950)(2023-04-22-11-42-24.png)]

有个小疑问?

假如我们写成另一个形式呢(1/x - (x - 1))?很容易知道,这俩图像虽然图形不一样,但是也是黄金分割率公式的变形,只需移项消元即可得到这个形式,很明显,这个世子有个点是不存在的(点0,不能为分母),这个公式的图形也明显类似于反比例函数(在点0处的间断点是第二类间断点,0+0处是正无穷大,0-0处是负无穷大)。

这个没问题!matlab会计算我们需要的函数图形,有间断点会计算极限,尽可能的满足我们(这次我们在代码里标出这个解的位置),代码如下:

%% 第二种形式
f = inline('1/x - (x - 1)');  % 写出我们的函数
ezplot(f, -2, 2);
zeor1 = fzero(f, 1);  % 找第一个函数零点,在x=1附近
zero2 = fzero(f, -1); % 找第二个函数零点,在x=-1附近
hold on;
plot(zeor1, 0, 'o'); % 在第一个零点出画一个字母o
plot(zero2, 0, 'o'); % 在第一个零点出画一个字母o
而图形,如同我们预期,显示出了一个双曲线,并且在零点处标出了我们的符号:
————————————————
版权声明:本文为CSDN博主「ChuckieZhu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38431572/article/details/105127864

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mtolQoWL-1682140527950)(2023-04-22-11-42-55.png)]

使用roots函数求一元二次方程的根。

使用solve函数求方程的根(注意哦,没说是几次的。大家可以试试三次函数等,甚至没实数根的大家也可以试试,我们要从认识得到实践,然后再根据实践得到新的认识!)

使用inline函数和ezplot函数一起绘制函数图形(小技巧:ezplot音似:easy plot,简单绘制,方便我们记忆)

使用 fzero 函数和 plot 函数绘制某一点处的零点。

斐波那契数列——新手来看,保证看懂。

https://blog.csdn.net/qq_38431572/article/details/105207508
编写 fibo_use.m 文件的内容代码

%% 清理可能存在的旧数据
clc; % 清屏
clear;  % 清除变量
close;  % 关闭可能存在的窗口
%% 我们在这里调用,这里是主要代码
n = 5; % 我们计算前几个斐波那契数列
res = fibonacci_mine(n);  % 调用计算函数
disp('结果是:')
disp(res);  % 打印结果

编写 fibonacci_mine.m 文件中的代码

function fibo = fibonacci_mine(n)
% 功能:计算前n个斐波那契数列
% 参数:n 代表需要前n个斐波那契数列
% 返回值: fibo  一个 n行1列的矩阵,代表前n个斐波那契数
fibo = zeros(n, 1);  % 把fibo作为n行1列的空矩阵,里面元素都为0
fibo(1) = 1;  
fibo(2) = 2;  % 把启动条件写出来
for k = 3:n  % for 循环,从 3 到 n(包含 3 也包含 n)
    fibo(k) = fibo(k-1) + fibo(k-2);
end
return 

今日总结

今天,我们通过计算斐波那契数列,学到了下面的知识点:

如何声明、定义、调用函数(文件)。

给函数传递参数、接受函数的返回值。

matlab中矩阵的简单使用和下标索引。

一句话:我调用你,与你无关。即软件工程的思想:模块化。

matlab中for循环(遍历)的使用。

如何从一个文件调用另一个函数文件。

使用matlab求解线性方程组

https://blog.csdn.net/qq_38431572/article/details/105585584

非常详细+补充基本知识
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9JdoVUWg-1682140527950)(2023-04-22-11-58-07.png)]

%% 显示这两个矩阵
%% 方程组求解
clc;
clear;
A = [4 1 -2;
     2 2  1;
     3 1 -1];
% 定义一个3行3列的矩阵A,行与行之间使用分号隔开,每一行之间的元素使用空格隔开
B = [1;
     2; 
     3]; %定义矩阵B
disp(A);disp(B); %显示A和B
X = A\B;  % 左除
disp(X);

可能会有些人觉得奇怪,怎么A在左边并且这个写的是斜杠呢?

如果我们学习过矩阵便知道,矩阵的乘法是没法前后调换的,即 AB 不等于 BA,也就是说,AX = B,要求这个X,我们需要在两边的左边同时除以A(严谨说法叫做乘以A的逆矩阵),即 1/A * A X = 1/A * B,也叫做左除,而在matlab中,左除符号就是这个“ \ ”符号,所以应这样使用,**即 A \ B代表 1/A * B(**严谨来说,就是A的逆矩阵B),即可得到X。

运行后我们便可看到解矩阵的结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QChYPvew-1682140527951)(2023-04-22-12-04-14.png)]

左除和右除

https://blog.csdn.net/qq_38431572/article/details/105585584

零基础学线代 | 矩阵的乘法(左乘与右乘,可交换矩阵)
https://www.bilibili.com/video/BV1QP4y1d71i/?spm_id_from=333.337.search-card.all.click&vd_source=3ef6540f8473c7367625a53b7b77fd66

更好的来处理矩阵的乘法运算

然后根据乘法的运算法则,可以发现,这个方程是没法解的(因为根本就没法乘,前面矩阵1列,后面矩阵3行,不相等,没法进行乘法运算)
所以,如果进行这样的乘法运算,我们需要把X的解矩阵变换(注意,变换后乘出来的结果和之前的方程组不一样,不一样!):

总结

在matlab中定义矩阵:A = [1 2 3; 2 3 4; 3 4 5],每行元素空格隔开,两行之间使用分号隔开。

线性代数矩阵乘法运算、求解知识。乘法时注意行列的数量,要前列=后行才能相乘。且AB不一定等于BA(还是有可能相等的,所以用不一定)

关于矩阵乘法左除、右除的区别。AX=B,求X用左除,XA=B,求X用右除。

在matlab中求解两种矩阵方程的方法。X=A\B(左除斜线向左),X=B/A(右除斜线向右)。

使用matlab求解定积分和不定积分的问题

https://blog.csdn.net/qq_38431572/article/details/105822907

计算不定积分

%%计算不定积分
clc; clear;
syms x;  % 定义一个符号,x。
f = 'x';  % 定义一个原函数
F = int(f, x);  % 计算不定积分
disp(F); % 显示原函数

没错,就是这个int函数即可,下面逐句讲解代码:

syms x; 定义一个符号x,代表我们函数中的变量的名字,比如:y = 2x中的x就是变量。

f = ‘x’; 这句话就是声明了个字符串,没什么特别之处。

F = int(f, x); int函数是计算积分的函数,第一个参数是函数字符串,第二个参数是变量的符号

如果我们定义的符号是t,即(syms t;),我们下面就需要写f = ‘t’,F = int(f, t)。。。。。

int函数将计算结果以字符串形式返回,我们用一个变量接收,同时disp显示到屏幕上,我们就能看到输出的结果:

很容易验证,x的一个原函数就是x^2/2。(这个int函数只返回一个原函数,如果需要其他的自行加上常数即可)。

在matlab中计算定积分

计算定积分时,和不定积分一样简单,代码只需改动少量即可:

%%计算定积分
clc; clear;
syms x;  % 定义一个符号,x。
f = 'x';  % 定义一个原函数
F = int(f, x, 0, 10);  % 计算不定积分
disp(F); % 显示原函数

与计算不定积分唯一的区别就是函数不同,在定积分中,int的参数列表是这样的:

  1. 函数

  2. 变量符号

  3. 下限

  4. 上限

使用matlab建立多项式以及求导,商求导乘积求导等

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

使用matlab建立多项式

clc;clear;
%% 使用matlab建立多项式
p = [4 3 2 1 1]; %确定各项系数,和常数项。放在一个数组里面。
y = poly2sym(p); %创建目标多项式,这个函数返回了一个符号变量,即我们的函数
disp(y); %显示y.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N7B0Vm9r-1682140527952)(2023-04-22-12-42-29.png)]

PS: 如果需要定义一个特殊的函数比如 y = 4x^4 ,那么我们可以认为3次、2次、1次系数都为0,常数项也为0,写入数组即可。

通过已知方程的根建立多项式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uohtGvHN-1682140527953)(2023-04-22-12-42-41.png)]

clc;clear;
%% 使用根建立多项式
r = [1 2 3]; %随意编一些根
p = poly(r); %调用求多项式的函数
y = poly2sym(p); %得到多项式的符号变量
disp(y);

对多项式进行求导

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CToZTQOg-1682140527954)(2023-04-22-12-44-34.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pSAz7LMx-1682140527955)(2023-04-22-12-44-47.png)]

使用matlab进行求导

clc; clear;
%% 对多项式进行求导
p = [4 3 2 1 1]; %建立我们的多项式
y = poly2sym(p); %得到多项式的符号变量
temp_str = sprintf('得到多项式:\ny = %s', y); %将式子格式化到一个字符串中
disp(temp_str); %显示
p_1 = polyder(p); %求一次导,注意polyder求导传递的是p而不是y
y_1 = poly2sym(p_1); %转化为符号变量
temp_str = sprintf('求导结果是:\ny_1 = %s\n求导后系数是:[%d %d %d %d]', y_1, p_1);
disp(temp_str);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fGReLCwM-1682140527955)(2023-04-22-12-45-37.png)]

y_1中的常数1来自于y中的x求导,y中的1求导后成为了0,就没了。

那么,这仅仅是一个多项式求导,乘积求导、商求导,请继续往下看:

%% 乘积求导
clc; clear;
p_1 = [4 4 2];
p_2 = [2 4 5]; % 随意胡诌几个数
y_1 = poly2sym(p_1);
y_2 = poly2sym(p_2); % 转化为符号变量
temp_str = sprintf('原来的两个函数为:\n 1. y_1 = %s\n 2. y_2 = %s', y_1, y_2);
disp(temp_str);
res_p = polyder(p_1, p_2); % 乘积求导后的系数
res_y = poly2sym(res_p); %转化为符号变量
temp_str = sprintf('结果为:y = %s', res_y);
disp(temp_str);

商求导:

这个部分比较麻烦,商求导后返回值是有两个,因为很有可能出现求导后还是分数的形式,所以返回值是一个分子、一个分母,代码如下:

%% 商求导
clc; clear;
p_1 = [4 4 2];
p_2 = [2 4 5]; % 随意胡诌几个数
y_1 = poly2sym(p_1);
y_2 = poly2sym(p_2); % 转化为符号变量
temp_str = sprintf('原来的两个函数为:\n 1. y_1 = %s\n 2. y_2 = %s', y_1, y_2);
disp(temp_str);
[res_p_Num, res_p_Den] = polyder(p_1, p_2);
% 注意此处,与乘积求导几乎一样,只是返回值不同,
% 前面的是分子,后面的是分母
res_y_Num = poly2sym(res_p_Num);
res_y_Den = poly2sym(res_p_Den); %转化为符号变量
temp_str = sprintf('结果为:y = (%s)/(%s)', res_y_Num, res_y_Den);
disp(temp_str);

————————————————
版权声明:本文为CSDN博主「ChuckieZhu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38431572/article/details/106591517

商求导分子分母为什么要分开获得???

polyder函数的定义就是这样

[q,d]=polyder(a,b)

q代表求导后分子多项式的系数矩阵,d代表分母多项式的系数矩阵

高级积分运算、二重积分

复习定积分(单变量)
在之前,先复习一下之前学习的内容。使用matlab求解定积分的步骤大概如下:

定义符号变量(syms关键字)

定义内联函数(inline函数)

使用matlab内置函数进行计算定积分或者不定积分(使用int函数,具体求解定积分还是不定积分,根据参数的数量决定)
我们都知道:定积分是求解一个图形与坐标轴围成的面积。而今天我们需要深入理解一下:定积分是求解两条曲线之间围成的面积,如果只有一个公式,比如x,我们可以理解成 x-0,y=x 这个函数减去了 y=0这个常数函数,或者说,上面函数与x轴围成的面积减去了下面函数与x轴围成的面积(并且这个面积在x轴上方是正的,下方是负的),这样我们就可以推广,假设我们现在有两条曲线,一个是sinx,一个是 ,我们求在0-pi的范围内,两个图形围成的面积,容易知道,两个图形大概是这样围起来的:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GLJ05t8q-1682140527956)(2023-04-22-12-49-22.png)]

%% 目标图像
clc;clear all;  % 清除原先的东西
 
x = 0:0.01:pi;  % x的范围是0-pi,以0.01为一个小分割点细分出一个范围
y1 = sin(x);    % sinx
y2 = exp(x);    % e^x
 
figure;         % 弄一个figure的框体
hold on;        % 保持这个窗体,保证后面的内容都画在了上面,hold off解除
 
subplot(221);   % 开辟子窗体,221:共2行2列,里面的第一个
fill(x,y1,'r'); % 画图并填充颜色,变量是x,函数是y1,颜色是r,红色
title('y=sinx');% 设置标题,必需先fill,才能添加标题,否则会失败
 
subplot(222);   % 开辟子窗体,222,共2行2列,里面第二个
fill(x,y2,'b'); % b 蓝色
title('y=e^x');
 
subplot(223);   % 开辟子窗体,223,共2行2列,里面第三个
fill([x, fliplr(x)],[y1,fliplr(y2)],'g');
                % 两个函数直接填充颜色,每一个方括号代表一个函数的内容
title('两个函数中间的部分');
hold off;
%% 对上面的函数进行计算定积分
syms x;
f = 'exp(x) - sin(x)';
res_int = int(f, x, 0, pi);
disp(res_int);

二重积分

https://blog.csdn.net/qq_38431572/article/details/107008015

%% 计算二重积分
clear all;
f = @(x,y)x.*cos(y); % 定义一个函数句柄,两个变量分别是x,y
% 这样定义函数句柄时,需要在所有的运算前加一个.(表示对应元素各自计算,不按照矩阵的规则)
ymax = @(x) x;  % 根据0<=y<=x处,右方的y=x反解出y,
res = integral2(f,0,1,0,ymax);
% 计算二重积分的函数 
% integral2(fun, xmin, xmax, ymin, ymax)
disp(res);
%% 看一看这个曲面吧
[x,y] = meshgrid(0:0.001:1, 0:0.001:1);
% 设置x和y的区间,以及细分程度
z = (x.*cos(y));  % 使用一个z来代表这个函数
mesh(x,y,z)  % 画出二维曲面图像
title('x*cos(y)')

二维中的数据可视化,使用matlab绘图

https://blog.csdn.net/qq_38431572/article/details/107289661

MATLAB数据可视化

绘图

绘制图形(二维)一般使用plot函数,这个函数一般能满足很多画图的功能了,比如我们能绘制一个函数图像:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vOT9vqTo-1682140527957)(2023-04-22-12-56-07.png)]

%% 使用plot绘图
clear all;
syms x;     % 声明一个符号x
x = 0:0.01:20;  % 给定范围
f = sin(x);   % 声明函数
figure;     % 打开绘图窗口
plot(f);    % 画图
title('y=sinx');

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TmN6zofH-1682140527957)(2023-04-22-13-02-56.png)]

%% 使用plot绘图
clear all;
syms x;     % 声明一个符号x
x = 0:0.01:20;  % 给定范围
f = sin(x);   % 声明函数
figure;     % 打开绘图窗口
plot(f,'o--c');    % 画图
title('y=sinx o--c');

在同一个figure里面绘制多个图形

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jILR62Dg-1682140527958)(2023-04-22-13-03-41.png)]

%% 同时绘制多个函数在一起
clear all;
syms x;
x = 0:0.01:pi/3;  % 设置x的取值范围
% f = [sin(x);
%    tan(x);
%    x];  % 定义一个函数的矩阵
f = [sin(x);tan(x);x];
figure;
plot(x, f);

本期小结

相比于前几期的内容,本期内容似乎有点轻松,但是我感觉也算是讲清楚了plot的用法(至少现阶段绝对是够用了,并且能准确的理解里面的内容),下面来小结一下吧:

学会了使用plot绘制一个向量

学会了使用plot绘制一个函数图像

学会了使用plot绘制一个矩阵的折线图

学会了绘制多个函数在同一个图像中

懂得了x 和函数 f 的实质内容

学会了定制绘图的曲线样式。

二维中的数据可视化,使用matlab绘图

https://blog.csdn.net/qq_38431572/article/details/113127864

画一个图像并且给图像加上标题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s4sldssz-1682140527958)(2023-04-22-13-06-47.png)]

%% 给图形加上标题(这个我记得前面提过)
syms x;     % 声明一个变量x
x = 0:0.1:2*pi;   % x的取值范围,从0-2*pi,以0.1为分割取值
y = cos(x);         % 函数
figure;     % 打开绘图窗口
plot(y);     % 画出y,如果你想更改曲线形状,可以参考第九讲,比如
            % plot(y, 'o--c')

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TU8VRGHR-1682140527959)(2023-04-22-13-07-12.png)]

三维中的数据可视化

https://blog.csdn.net/qq_38431572/article/details/113524903

三维中有plot()吗?
在三维画图中,有对应的 plot3() 函数用于画三维空间中的图像,但是,我们回忆一下plot是如何工作的:

plot接收的参数是矩阵(或者说数组),然后根据传入的参数画点,使用直线把点连接起来,如果点足够密集,展示出来后,在我们眼睛看来,画出来就是一个曲线。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BFOakdyz-1682140527959)(2023-04-22-13-11-31.png)]

%% plot对比
x1 = 0:0.1:2*pi;    % x1 每两个点的距离是0.1
y = sin(x1);
x2 = 0:1:2*pi;      % x2 每两个点的距离是1
z = sin(x2);
figure;
subplot(2, 1, 1);   % 分块画图
plot(x1, y);        % 画sinx1
title('密集打点 y=sinx1')
subplot(2, 1, 2);
plot(x2, z);        % 画sinx2
title('不太密集打点 z=sinx2');

而 plot3() 同样,也是在传入的三个矩阵中找三维空间中的点,然后使用直线连接,所以可以很直观的理解到:plot3() 是画的空间曲线(直线)。我们下面看个例子:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iSYUAwWF-1682140527961)(2023-04-22-13-11-55.png)]

%% 使用plot3 画一个螺旋向上的线
t = 0:0.1:10*pi;    % 空间曲线使用参数方程比较容易表示出来
z = t;          % z轴随着t的增加而升高
x = sin(t);
y = cos(t);     % x^2+y^2 = 1,所以从上向下看是空间圆
figure;
plot3(x, y, z); % 画图
title('大弹簧');

其余的参数和二维中的plot 大同小异,相信大家都能会了,这里还有一个小知识点,补充一下:如果我们想给坐标轴命名,使用下面的代码:

%% 使用plot3 画一个螺旋向上的线
t = 0:0.1:10*pi;    % 空间曲线使用参数方程比较容易表示出来
z = t;          % z轴随着t的增加而升高
x = sin(t);
y = cos(t);     % x^2+y^2 = 1,所以从上向下看是空间圆
figure;
plot3(x, y, z); % 画图
title('大弹簧');
xlabel('x轴')
ylabel('y轴')
zlabel('z轴')

在二维中,不写zlabel即可,如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uHSZm82h-1682140527961)(2023-04-22-13-12-35.png)]

我想画曲面,怎么画?
在第八讲中我们稍微提了一下meshgrid()和mesh()画出一个空间曲面,我们先来回顾一下这两个函数(假设我们画z = sinx + cosx吧,随便捏造的函数):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WaNRIuQt-1682140527962)(2023-04-22-13-12-48.png)]

%% meshgrid和mesh的使用
clear all;
[x, y] = meshgrid(-2*pi:0.1:2*pi, -2*pi:0.1:2*pi);
z = sin(x) + cos(x);
figure;
mesh(x, y, z);
title('z = sinx + cosx');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/447603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT探索系列之六:思考ChatGPT的未来发展趋势和挑战

文章目录 前言一、未来发展趋势1. ChatGPT重塑数据分析之道2. ChatGPT颠覆企业运用人工智能和机器学习的途径3. ChatGPT颠覆自动化商业流程4. ChatGPT引领企业决策迈向新纪元 二、ChatGPT掀开未来充满机遇和挑战的新篇章总结 前言 ChatGPT发展到目前&#xff0c;其实网上已经有…

如何用Python搭建HTTP服务器,并实现远程访问和下载?

Python是编程语言中的热门语言&#xff0c;具有语法简单、语句清晰的特点。如果你不擅长编程&#xff0c;学习Python是一个不错的选择&#xff0c;初学者在学习阶段可以较为轻松地理解编程对象和思维方法。对于小白用户来说,它具有强大且丰富的库,封装后可以轻松调用,因此也更受…

数学建模第一天:数学建模工具课之MATLAB的入门

目录 一、MATLAB的简介 二、Matlab基础知识 1. 变量 ①命名规则 ②特殊变量名 2、数学符号与函数调用 ①符号 ②数学函数 ③自定义函数 三、数组与矩阵 1、数组 ①创建数组 ②访问数组元素 ③数组运算 2、矩阵 ①定义 ②特殊矩阵 ③矩阵运算 四、控制流 …

pyecharts从入门到精通-地图专题GEO-世界地图和中国城市地图

文章目录 参考安装与查看pyecharts地图实现-Geo完成Geo地理坐标系实现。案例演示拓展-pyecharts中GEO源码 参考 官方文档:https://pyecharts.org/#/zh-cn/quickstart Python使用Pyecharts画Geo地图&#xff0c;如何显示具体地点名称 pyecharts世界地图用&#xff1a;国家中英文…

即使运行高优先级线程,低优先线程也能运行

仅仅因为一个线程具有较高的优先级&#xff0c;并不意味着其他低优先级的线程就不会得到机会运行。 这怎么理解&#xff1f; 有时候&#xff0c;我看到人们编写多线程代码&#xff0c;将一个线程的优先级置于另一个线程之上&#xff0c;他们认为这将防止优先级较低的线程干扰…

Qt编写网络摄像头推流(4路1080P主码流只占用0.2%CPU/极低延时极速响应)

一、前言说明 将从网络摄像头拉流过来的视频流重新推流出去&#xff0c;是目前一个很常规的做法&#xff0c;尤其是推流到流媒体服务中心&#xff0c;这样流媒体服务中心就把散落在各个区域的监控摄像头集中起来统一管理&#xff0c;同时提供对外一致的访问接口。很多时候不仅…

微信小程序开发的基础学习

回顾上篇内容 1、小程序核心理念&#xff1a; 在小程序里面&#xff0c;会把每一个标签看作一个矩阵&#xff0c;该矩阵的宽高会平行x轴、y轴 那么我们只需要知道该矩阵一个左上角的坐标&#xff0c;即可确定该矩阵的位置 2、题外话&#x1f9d0; &#xff08;1&#xff09…

字符串总结

一、最长公共前缀 1.方法一&#xff1a;横向扫描 class Solution { public:string longestCommonPrefix(vector<string>& strs) {if (!strs.size()) {return "";}string prefix strs[0];int count strs.size();for (int i 1; i < count; i) {prefix…

通信行业的企业如何与Synaptics建立EDI连接?

Synaptics 是一家全球领先的移动计算、通信和娱乐设备人机界面交互开发解决方案设计制造公司。该公司为大部份主要电脑及笔记本电脑公司提供触摸板&#xff0c;其中包括了华硕、宏碁、戴尔、惠普、索尼、东芝、Gateway、国际商业机器、联想集团与三星电子等。 Synaptics 推荐其…

【C++】模版初阶

现在我们学习C模版的基本知识&#xff0c;为以后学习STL打下一个坚实的基础 目录 一、泛型编程 二、模版 2.1 函数模版 2.1.1 函数模版的概念 2.1.2 函数模板的使用 2.1.3 函数模板的原理 2.1.4 函数模板的实例化 2.1.5 模板参数的匹配原则 2.2 类模版 2.2.1 类模版…

【查找】二叉排序树(BST)

有序序列查找可以用二分查找&#xff0c;但其插入删除需要移动数据&#xff0c;较为复杂&#xff1b;若不想多的移动&#xff0c;可以弄成无序序列&#xff0c;但这样就不能用二分查找。 为了不影响数据顺序&#xff0c;可以使用二叉排序树&#xff0c; 概念&#xff1a; 二…

11、STM32H7 MPU Cache

篇前小问题 在使用stm32H750的FMC时&#xff0c;出现一些奇怪的问题&#xff0c;写A时序时时&#xff0c;总是写1次的代码了出现了写四次的时序&#xff0c;所以找了很久&#xff0c;才找到问题出在了MPU上&#xff0c;使用FMC时&#xff0c;必须开启MPU&#xff0c;不然会出现…

QML图形动画基础之

图形动画基础 颜色&#xff08;color&#xff09;渐变&#xff08;Gradient&#xff09;系统调色面板(SystemPalette) 图片边界动画&#xff08;BorderImage&#xff09;动态图片&#xff08;AnimatedImage&#xff09;缩放&#xff0c;旋转和平移变换Transform实现高级变换 颜…

CLion开发工具 | 01 - 认识外观界面

专栏介绍 一、创建/打开项目 二、外观和界面 1. 文件编辑区 CLion的自动提示功能如下&#xff1a; CLion的参数提示功能如下&#xff1a; CLion的形参名称显示功能&#xff1a; 2. 项目文件浏览区 3. 工具栏 3.1. 一键编译运行 CLion内置了MinGW&#xff0c;点击运行可以…

卷积神经网络推理特征图可视化查看,附录imagenet类别和编号对应查询表。通过观察法进行深度学习可解释研究

CNN模型虽然在图像处理上表现出非常良好的性能和准确性&#xff0c;但一直以来都被认为是一个黑盒模型&#xff0c;人们无法了解里面的工作机制。 针对这个问题&#xff0c;研究人员除了从理论层面去寻找解释外&#xff0c;也提出了一些可视化的方法直观地理解CNN的内部机理&am…

atl创建avtive

activex无窗口问题 控件在编码过程中要检查m_hWnd是否存在&#xff0c;不然vs可能会出现绘制错乱和崩溃 atl窗体通过CComControlBase的内部变量控制&#xff0c;窗体属性&#xff0c;包括onsize事件对应的m_bRecomposeOnResize变量控制窗体变化事件响应。 可插入的控件 授权…

Hbase基本操作

目录 HBASE 基本操作 hbase shell&#xff1a;进入hbase shell环境 status命令&#xff1a;查看集群状态 version&#xff1a;查看版本信息 create&#xff1a;创建表 drop 删除表 list&#xff1a;查看所有表 desc &#xff1a;查看表结构 exists &#xff1a;查看表…

分布式数据一致性解决方案推理过程

redis是一个极轻量级的进程&#xff0c;单机单线程单进程。 使用redis很容易实现分布式锁&#xff1a;setnx&#xff0c;同一个key&#xff0c;谁设置成功了&#xff0c;谁就抢到了锁&#xff0c;所以就产生了多锁问题。 假设客户端1抢到了锁&#xff0c;redis挂了&#xff0c…

Docker下载、安装

安装docker前&#xff0c;需要安装WSL Linux 内核、Hyper-V Hyper-V 首先确认系统是否安装&#xff1a;Hyper-V 如果没有则安装&#xff1a; pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f %%i in (findstr /i . h…

java中的泛型

1.2 泛型的引入 在Java中&#xff0c;我们在声明方法时&#xff0c;当在完成方法功能时如果有未知的数据需要参与&#xff0c;这些未知的数据需要在调用方法时才能确定&#xff0c;那么我们把这样的数据通过形参表示。在方法体中&#xff0c;用这个形参名来代表那个未知的数据…