当前位置:   article > 正文

2024Matlab小白入门详细教程_matlab教程

matlab教程

本文适合哪些对象?

  1. 有一点点的编程基础的,想要学习Matlab的小白。
  2. 正在学习Matlab,基础也没搞明白的人。
  3. 大学生、研究生想要打数学建模相关竞赛,需要使用到该语言的人

最后一句:基础内容其实并不难,不要被外部的一些机构,书籍等误导,请对本文的所有内容完全掌握,内容很少,花两天学会,后续请花时间学习算法

公众号/CSDN/知乎:川川菜鸟
  • 1

一、基本运算

基本加减乘除:

a=5+5 %加法,同理减法

b=2^3  %立方,

c=5*2 %乘法

x = 1; %分号用于不显示
y = x + 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

常见变量:
在这里插入图片描述

二、变量

2.1 基础

在上面小节,我们看到的左边就是字母就叫做变量。很简单,这里随便举几个例子就学会了。
(1)计算b=a*2,a=5

clear all %清空
clc % 情况工作区
a=5;
b=a*2;
b
  • 1
  • 2
  • 3
  • 4
  • 5

(2)通过用户输入来获取变量x的值,计算y=x*3

x=input('请输入数字') %input用于接收数字
y=x*2
  • 1
  • 2

(3)使用预定变量,常见的比如pi,inf,eps,NaN

r=1
L=2* pi *r
S=pi*r*r
  • 1
  • 2
  • 3

(4)使用常见数学运算,比如开根、求sin(x)

sqrt(78); %百分号用于不显示结果
sin(ans)
  • 1
  • 2

在这里插入图片描述
这里需要注意,不给表达式赋值时,会自动赋予ans,比如上面写全了就是"ans = sqrt(78)"。

(5)一行多个分配。前面的步骤加封号,只显示最后一个语句的运行结果。

a = 2; b = 7; c = a * b
  • 1

在这里插入图片描述
(6)使用who和whos命令。who查看已使用的所有变量名称;whos查看变量类型、内存、是否为复杂变量等详细信息,:

who
  • 1

在这里插入图片描述

whos
  • 1

在这里插入图片描述
(7)清楚指定变量,或全部变量。使用clear命令。

clear a  %清楚a变量
clear    %清楚所有变量
  • 1
  • 2

在这里插入图片描述
在这里插入图片描述
(8)可以使用省略号 (…) 将长赋值扩展到另一行。

initial_velocity = 0;
acceleration = 9.8;
time = 20;
final_velocity = initial_velocity...
 + acceleration * time
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

2.2 数据显示格式

默认情况下,MATLAB 四个小数位值显示数字。这就是所谓的 short format。如果想更精确,需要使用 format 命令。长(long ) 命令格式显示小数点后16位。

注:一般来说,我们不会太在乎精度,能保留四位数就可以了,所以这个不怎么用得到。

(1)通过以下两种方式对比即可理解,注意逗号分开:

format long ,pi 
format  short ,pi
  • 1
  • 2

在这里插入图片描述
再来个例子:

format short %直接声明为短型
a=3.1415926
  • 1
  • 2

在这里插入图片描述
(2)format bank 命令将数字四舍五入到小数点后两位。

format bank
daily_wage = 177.45;
weekly_wage = daily_wage * 6
  • 1
  • 2
  • 3

在这里插入图片描述
(3)格式short e 命令允许以指数形式显示四个小数位加上指数。

format short e
4.678 * 4.9
  • 1
  • 2

在这里插入图片描述
(4) 格式 long e 命令允许以指数形式显示,小数点后四位加上指数。

format long e
x = pi
  • 1
  • 2

在这里插入图片描述
(5) format rat 命令给出了计算结果最接近的有理表达式。

format rat
4.678 * 4.9
  • 1
  • 2

在这里插入图片描述

2.3 基本关系运算符

常见大于等于小于,如果为真返回1,否则返回0:

a=5
b=2
a>b %大于
a==b %等于
a<b %小于
  • 1
  • 2
  • 3
  • 4
  • 5

三、向量

3.1 基础

就是数组,矩阵的形式,举两个例子就知道了。
(1)手动输入数组。元素时间用空格/逗号,分号分割。其中逗号与空格等价。分号用于换行,制作多行多列矩阵。

r = [7 8 9 10 11] 

r2 = [7 8 9 10 11]

c = [7;  8;  9;  10; 11]

d=[1 2 ;3 4 ;5 6]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

两个向量相加等价于对应元素相加,比如
在这里插入图片描述
(2)冒号创建。格式:x=开始:间隔:结尾

x=2:2:10
  • 1

在这里插入图片描述
(3)linspace函数创建线性间隔向量。基本格式:linspace(开始,结束,元素个数),默认个数为100。

y=linspace(1,20,10)
  • 1

在这里插入图片描述

3.2 向量点积

矩阵相乘,自然是点积,不是直接的乘法。以几个例子作为说明。
(1)直接.*

a=[1 2 3 4 5];
b=[6 7 8 9 10];
c=a.*b
  • 1
  • 2
  • 3

在这里插入图片描述

(2)使用dot函数点积,对应元素相乘再相加,相当于上面的sum(c )

d=dot(a,b)
  • 1

在这里插入图片描述

3.3 向量交叉运算

使用cross函数,基本格式为:cross(a,b)。前提:a和b必须为三维向量。例如:

a=[1 2 3 ];
b=[6 7 8 ];
c=cross(a,b)
  • 1
  • 2
  • 3

四、交互式命令

4.1 input用户输入

其实在前面已经提到过了,这里再强调一次。

x=input("请输入数字:");
x
  • 1
  • 2

4.2 disp显示命令

基本格式:disp(x),显示变量x的值。例如:

a=5*3;
b=a*5;
disp(b)
  • 1
  • 2
  • 3

4.3 pause暂停命令

pause用于暂停程序。例如下面只执行pause上面语句:

a=5*2
pause
b=a*2
  • 1
  • 2
  • 3

五、分支结构

5.1 if-end

语法格式为:

if  表达式
	语句组
end
  • 1
  • 2
  • 3

例如:比较a和b的大小

clear all
clc
a=5;
b=2;
if a>b
    fprintf("a大于b\n")
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

5.2 if-else-end

例如:

clear all
clc
a=5;
b=2;
if a>b
    fprintf("a大于b\n")
else
    fprintf("a不大于b\n")
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

5.3 if-elif-end

例如:输入一个数字,判断奇数和偶数

clear all
clc
x=input('请输入数字:');
c=rem(x,2) %求余数的函数
if c==1
    fprintf('x为奇数\n')
elseif c==0
    fprintf('x为偶数\n')
else
    fprintf('非数字')
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

5.4 嵌套if

基本格式:

if 表达式
   语句组
   if 表达式
      语句组
  end
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

例如:判断学号是否正确,且为偶数

clear all
clc
y=input('请输入学号:')
if y==124
    if rem(y,2)==0
        fprintf('学号正确,且为偶数\n')
    end
else
    fprintf('学号错误\n')
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述

5.5 switch语句

witch 模块执行多个选项中一组语句。每个选项都包含表达式中。有一情况为真时,MATLAB 执行相应的语句,然后退出开关模块。

switch <开关表达式>
   case <条件表达式1>
      <语句>
   case <条件表达式2>
      <语句>
      ...
      ...
   otherwise
      <语句>
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

给出一个评价成绩等级的例子:

grade = 'B';
   switch(grade)
   case 'A' 
      fprintf('Excellent!\n' );
   case 'B' 
      fprintf('Well done\n' );
   case 'C' 
      fprintf('Well done\n' );
   case 'D'
      fprintf('You passed\n' );
   case 'F' 
      fprintf('Better try again\n' );
   otherwise
      fprintf('Invalid grade\n' );
   end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在这里插入图片描述

5.6 嵌套switch语句

基本格式:

switch(ch1) 
   case 'A' 
      fprintf('This A is part of outer switch');
      switch(ch2) 
         case 'A'
         fprintf('This A is part of inner switch' );
         
         case 'B'  
         fprintf('This B is part of inner switch' );
      end   
   case 'B'
      fprintf('This B is part of outer switch' );
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

一个嵌套switch语句的例子:

a = 100;
b = 200;
switch(a) 
   case 100 
      fprintf('This is part of outer switch %d\n', a );
      switch(b) 
         case 200
            fprintf('This is part of inner switch %d\n', a );
      end
end

fprintf('Exact value of a is : %d\n', a );
fprintf('Exact value of b is : %d\n', b );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

六、循环结构

6.1 for循环

基本格式:

for 变量=表达式
  执行语句
end
  • 1
  • 2
  • 3

表达式的通常格式为f:s:l,s默认为1,m表示开始,l表示结束。举个例子说明:遍历数字1到10

for a = 1:10 
  fprintf('值a: %d \n', a);
end
  • 1
  • 2
  • 3

同理可以设置间隔:

for a = 1:2:10 
  fprintf('值a: %d \n', a);
end
  • 1
  • 2
  • 3

间隔也可以为负数:

for a = 1.0: -0.1: 0.0
   disp(a)
end
  • 1
  • 2
  • 3

右侧也可以是向量:

for a = [2 3 4 5 6]
   disp(a)
end
  • 1
  • 2
  • 3

6.2 while循环

基本格式:

while 表达式
   语句组
end
  • 1
  • 2
  • 3

举个简单的例子:遍历小于10的数字,并累加求和

i=0;
sum=0;
while(i<10)
    sum=sum+i;
    i=i+1;
end
fprintf('累加和为: %d \n', sum);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

6.3 嵌套循环

(1)for嵌套循环基本格式:

for m = 1:j
   for n = 1:k
      语句;
   end
end
  • 1
  • 2
  • 3
  • 4
  • 5

一个例子:使用嵌套的 for 循环来显示从 1 到 100 的所有质数。

for i = 2:100
   for j = 2:100
      if(~mod(i,j)) 
         break; % 可以被除尽,就不是质数
      end 
   end
   if(j > (i/j))
      fprintf('%d 是质数\n', i); 
   end
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述

6.4 break,continue语句

  • break语句。终止循环语句,并将执行转移到循环之后的语句。
  • continue语句。跳过当前循环的其余部分,直接执行下次判断,进入下次循环。

七、函数

7.1 普通函数

编写函数一般在.m文件中编写。函数文件由function语句引导,基本结构为:

function 输出形参表 = 函数名(输入形参表)
% 写一点关于函数的摘要
% 写一点参数说明
	函数体语句
end
  • 1
  • 2
  • 3
  • 4
  • 5

手动新建函数:
在这里插入图片描述
执行函数的形式:

[输出实参表]=函数名[输入实参表]
  • 1

例如编写一个函数:如果x>0,则y=2x;如果x<0,则y=xx;如果x=0,则y=0

function y= f(x)
%   x为一个整数
if x>0
    y=2*x;
elseif x==0
    y=0;
else
    y=x*x;
end
disp(y)
end

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

执行:
在这里插入图片描述
这就是一个常见的普通函数。文件名与函数名保存是一致的。

7.2 匿名函数

匿名函数基本格式:

f = @(变量列表)表达式
  • 1

举两个例子如下(niming.m):

close all;
clc;
b=@(x)(sin(x)+cos(x)); %创建关于x的匿名函数
c=b(pi) %带入pi

d=@(x,y)(sin(x)+cos(y)) %创建x和y的匿名函数
e=d(pi,pi) %带入pi值测试
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

7.3 嵌套函数

简单的说,就是函数内部再写了函数,一般写两层。建议没事不要写嵌套函数,函数尽量分开写。
嵌套函数基本格式:

function x = A(p1, p2)
...
   function y = B(p3)
   ...
   end
...
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

举个例子:计算一元二次方程(qiantao2.m)

function [x1,x2] = qiantao2(a,b,c) 
%定义函数qiantao2计算一元二次函数
d=0; %初始化
function disc 
d = sqrt(b^2 - 4*a*c); %计算d
end 
disc; %输出d
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

测试案例:qiantao2(1,-2,1)
在这里插入图片描述

再来个测试案例:qiantao2(2,4,-4)
在这里插入图片描述

7.4 全局变量

  • 函数中申明变量为全局变量,可由多个函数共享。
  • 命令行中申明全局变量,工作区可访问该变量
  • 全局申明必须在函数实际使用变量前发生。
    创建脚本输入代码:
function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end
  • 1
  • 2
  • 3
  • 4

工作区输入以下代码,依据全局变量计算其平均值:

global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

八、数据可视化

8.1 绘图基本命令

(1) plot()命令打开基本图窗
导入自变量和因变量,绘制一次函数:

x = [0:5:100];
y = x;
plot(x, y)
  • 1
  • 2
  • 3

在这里插入图片描述
(2)xlabel、ylabel、title、grid on命令

  • xlabel 和 ylabel 命令沿 x 轴和 y 轴生成标签
  • title 命令可以图形上放置标题
  • grid on 命令可以将网格线放在图形上
  • axis equal 命令可以生成相同比例和轴上的空格的绘图
  • axis square 生成正方形图
x = [0:0.01:10];
y = sin(x);
plot(x, y), xlabel('x'), ylabel('Sin(x)'), title('Sin(x) Graph'),
grid on, axis equal
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
(3) plot(x,y,x1,y1)
同一个图形绘制多个函数,只需在plot()命令中传入多个x,y即可。

x = [0 : 0.01: 10];
y = sin(x);
g = cos(x);
plot(x, y, x, g, '.-'), legend('Sin(x)', 'Cos(x)')
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
(4) 图形上设置颜色
下面是常见的颜色代码表:
在这里插入图片描述
一个运用不同颜色绘图的示例:

x = [-10 : 0.01: 10];
y = 3*x.^4 + 2 * x.^3 + 7 * x.^2 + 2 * x + 9;
g = 5 * x.^3 + 9 * x + 2;
plot(x, y, 'r', x, g, 'g')
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
(5)axis ()设置轴刻度
设置轴刻度基本格式:

axis ( [xmin xmax ymin ymax] )
  • 1

一个手动设置轴刻度的例子

x = [0 : 0.01: 10];
y = exp(-x).* sin(2*x + 3);
plot(x, y), axis([0 10 -1 1])
  • 1
  • 2
  • 3

在这里插入图片描述
(6) Sub-Plots生成子图
subplot()基本格式

subplot(x,y,z) %共x行y列现在第z个
  • 1

一个创建子图的例子:

x = [0:0.01:5];
y = exp(-1.5*x).*sin(10*x);
subplot(1,2,1)
plot(x,y), xlabel('x'),ylabel('exp(–1.5x)*sin(10x)'),axis([0 5 -1 1])
y = exp(-2*x).*sin(10*x);
subplot(1,2,2)
plot(x,y),xlabel('x'),ylabel('exp(–2x)*sin(10x)'),axis([0 5 -1 1])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

8.2 优美散点图

举个例子,有如下的数据,分别表示为年龄,人体血压高压:

x=[75;78;51;82;77;88;41;78;78;61;71;74;62;81;75;64;80;72;51;80;56;73]

y1=[208;146;168;149;208;102;130;155;163;154;145;147;143;161;145;120;153;158;123;163;177;148]
  • 1
  • 2
  • 3

最简单的方法,比如绘制年龄与高血压关系,使用scatter函数:

scatter(x,y1) %直接绘制
  • 1

完整为:

x=[75;78;51;82;77;88;41;78;78;61;71;74;62;81;75;64;80;72;51;80;56;73];
y1=[208;146;168;149;208;102;130;155;163;154;145;147;143;161;145;120;153;158;123;163;177;148];
scatter(x,y1)
  • 1
  • 2
  • 3

绘制如下:
在这里插入图片描述
想要它好看点呢?绘制为红色,添加个r参数即可,它为red缩写:

scatter(x,y1,'r')  %填充颜色绘制为红色
  • 1

绘制如下:
在这里插入图片描述
如果你还想绘制更加好看呢?多彩一点!

c = linspace(1,10,length(x)); %创建向量

scatter(x,y1,[],c) 
  • 1
  • 2
  • 3

绘制如下:
在这里插入图片描述
再来,填充并标记的散点色彩图:

sz = 25;
c = linspace(1,10,length(x));
scatter(x,y1,sz,c,'filled') 
  • 1
  • 2
  • 3

绘制如下:
在这里插入图片描述
本节完整代码:

x=[75;78;51;82;77;88;41;78;78;61;71;74;62;81;75;64;80;72;51;80;56;73];
y1=[208;146;168;149;208;102;130;155;163;154;145;147;143;161;145;120;153;158;123;163;177;148];
scatter(x,y1)

scatter(x,y1,'r')  %填充颜色绘制为红色

c = linspace(1,10,length(x)); %创建向量

scatter(x,y1,[],c)

sz = 25;
c = linspace(1,10,length(x));
scatter(x,y1,sz,c,'filled') 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

8.3 条形图

例如张三的各门课成绩分别为:94,54,65,87,使用这个数据,我们将绘制条形图。

x = [1:4]; %x个数一定要与y个数对应
y = [94,54,65,87];
bar(x,y) %使用bar函数
xlabel('科目')
ylabel('成绩')
title('条形图')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

绘制如下:
在这里插入图片描述

8.4 概率分析图

请参考:数学建模学习(5):最全概率分析之图表绘制详解
本片文章有着详细的教程,因此我便不再重述。

8.5 读取excel画图

请参考:数学建模学习(46):读取excel数据plot画图

8.6 更多请参考

参考matlab官方文档:

如果你还想学习更多关于Matlab的一些函数使用方法,请持续学习文档。

九、微积分

MATLAB提供各种方法求解微积分和积分问题。这里我们讨论计算函数的极限和验证极限的性质。

9.1 计算极限值

(1)基本格式:limit 函数将表达式作为参数,并在自变量变为零时找到表达式的极限。
举个例子,计算当x趋于0时,函数 f(x) = (x3 + 5)/(x4 + 7) 的极限

syms x
limit((x^3 + 5)/(x^4 + 7))
  • 1
  • 2

在这里插入图片描述
(2)计算x趋于0以外的极限,使用带参数的limit命令。limit(f(x),a),这里a是要趋向的值。

limit((x - 3)/(x-1),1)
  • 1

在这里插入图片描述
再举个例子:

limit(x^2 + 5, 3)
  • 1

在这里插入图片描述
使用符号包计算极限值:

x = sym("x");    %让x趋向于0
subs((x^3+5)/(x^4+7),x,0)  
  • 1
  • 2

在这里插入图片描述

9.2 极限基本性质的验证

首先给出极限的基本性质:
在这里插入图片描述
考虑【f(x)=(3x+5)/(x - 3)】、【g(x) =x^2+1】这两个函数,分别计算在5处的极限,以及和、差、积、商四种情况下的极限。给出的代码如下所示:

syms x
f = (3*x + 5)/(x-3);
g = x^2 + 1;
l1 = limit(f, 4)
l2 = limit (g, 4)
lAdd = limit(f + g, 4)
lSub = limit(f - g, 4)
lMult = limit(f*g, 4)
lDiv = limit (f/g, 4)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

运行结果较长,这里直接给出答案:17,17,34,0,289,1。
使用符号包时,运用的代码如下:

x = sym("x");
f = (3*x + 5)/(x-3);
g = x^2 + 1;

l1 = subs(f, x, 4)
l2 = subs (g, x, 4)
lAdd = subs (f+g, x, 4)
lSub = subs (f-g, x, 4)
lMult = subs (f*g, x, 4)
lDiv = subs (f/g, x, 4)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

结果为17.0,17.0,34.0,0.0,289.0,1.0。

9.3 左侧极限和右侧极限

当函数 f(x)的极限在 x = a 处不连续,即x 从左侧接近时的极限值不等于 x 从右侧接近时的极限值。
绘制f(x) = (x - 3)/|x - 3|函数的图片,并求x=3的极值如下所示:

f = (x - 3)/abs(x-3);
ezplot(f,[-1,5])
l = limit(f,x,3,'left')
r = limit(f,x,3,'right')
  • 1
  • 2
  • 3
  • 4

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

十、微分

微分是计算表达式的导数,并在图上寻找局部最大值、最小值,并且求解微分方程。

10.1 diff(f)命令

diff(f)命令计算导数,基本格式:

diff(f)  %f为要求导的函数
  • 1

举例如下:

syms t
f = 3*t^2 + 2*t^(-2);
diff(f)
  • 1
  • 2
  • 3

运行结果如下:
在这里插入图片描述

10.2 求导规则

常用求导规则列举如下:

  • h’(x) = af’(x) + bg’(x)
  • ( f + g)’ = f’ + g’
  • (fg)’ = f’.g + g’.f
  • (f/g)’ = (f’.g - g’.f)/g^2
  • f’ = n. x^(n-1)
  • h’(x)= f’(g(x)).g’(x)
    这里给出一些求导代码:
syms x
syms t

f = (x + 2)*(x^2 + 3)
der1 = diff(f)
f = (t^2 + 3)*(sqrt(t) + t^3)
der2 = diff(f)
f = (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2)
der3 = diff(f)
f = (2*x^2 + 3*x)/(x^3 + 1)
der4 = diff(f)
f = (x^2 + 1)^17
der5 = diff(f)
f = (t^3 + 3* t^2 + 5*t -9)^(-6)
der6 = diff(f)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

运行结果较长,这里不进行解释,读者只需要知道求解一个函数的导数,①申明求导变量:syms = x ②定义要求导函数:f ③调用diff(f)命令对函数f进行求导

10.3 常见函数求导形式

在这里插入图片描述
这里给出1个小例子,其他形式一模一样,读者自己尝试就好。

syms x
y = exp(x)
diff(y)
  • 1
  • 2
  • 3

在这里插入图片描述

10.4 diff(f, n)计算高阶导数

diff(f, n)计算高阶导数,f为求导函数,n为求导的相应阶数。
基本格式:

syms x
f = ...;
diff(f, n)
  • 1
  • 2
  • 3

对y = f(x) = x*e^(-3x)求二阶导如下:

syms x;
f = x*exp(-3*x);
diff(f, 2)
  • 1
  • 2
  • 3

在这里插入图片描述

10.5 微分求解的经典案例

已知原函数,对y = f(x) = 3 sin(x) + 7 cos(5x).求导,满足f" + f = -5cos(2x)。思路是首先计算f",之后计算f" + f,接着计算-5cos(2x),最后检查两遍是否相等即可。代码实现如下:

syms x
y = 3*sin(x)+7*cos(5*x);  % defining the function
lhs = diff(y,2)+y;        %evaluting the lhs of the equation
rhs = -5*cos(2*x);        %rhs of the equation
if(isequal(lhs,rhs))
   disp('Yes, the equation holds true');
else
   disp('No, the equation does not hold true');
end
disp('Value of LHS is: '), disp(lhs);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述

10.6 寻找曲线的最大值与最小值

若要寻找 f(x) = 2x^ 3 + 3x^ 2 − 12x + 17函数的最大值与最小值,我们可以①用ezplot(y,[ ])绘制出函数最大值与最小值,y是函数,[ ]是自变量取值区间。②调用diff(y)命令求导。③solve(g)命令求解导函数,即令导函数为0,即可解出对应的自变量x。

syms x
y = 2*x^3 + 3*x^2 - 12*x + 17;   %定义函数
ezplot(y, [-2, 2])
g = diff(y);
s = solve(g)
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
在这里插入图片描述
之后调用subs()命令评估函数f在1,和-2处的值。

subs(y, 1), subs(y,-2)
  • 1

在这里插入图片描述

10.7 dsolve命令求解微分方程

基本格式:

dsolve('eqn','cond1', 'cond2',…)  
  • 1

eqn中导数用 D 表示,计算y" - y = 0, y(0) = -1, y’(0) = 2,我们可以输入如下代码:

dsolve('D2y - y = 0','y(0) = -1','Dy(0) = 2')
  • 1

在这里插入图片描述

十一、多项式

MATLAB 将多项式表示为包含按降幂排序的系数的行向量。例如,方程 P(x) = x4 + 7x3 - 5x + 9 可以表示为 p = [1 7 0 -5 9];

11.1 polyval()计算指定处值

polyval()函数计算指定值处的多项式,基本格式:

p = [1 7 0  -5 9];
polyval(p,4)
  • 1
  • 2

在这里插入图片描述

11.2 polyvalm()计算以矩阵为变量的多项式

输入自变量为一个矩阵式,可调用polyvalm(y,X),其中y是函数,X是自变量矩阵。

p = [1 7 0  -5 9];
X = [1 2 -3 4; 2 -5 6 3; 3 1 0 2; 5 -7 3 8];
polyvalm(p, X)
  • 1
  • 2
  • 3

在这里插入图片描述

11.3 root()求多项式的根

root(f)求多项式的根,其中f为要求解的函数,基本格式:

p = [1 7 0  -5 9];
r = roots(p)
  • 1
  • 2

在这里插入图片描述

11.4 ploy(r )返回多项式系数

ploy®返回多项式系数,其中r是我们已知的根,比如在上例中,r就是我们已知根,要想求对应系数,计算对应系数的代码如下:

p2 = poly(r) 
  • 1

在这里插入图片描述

11.5 polyfit()多项式曲线拟合

已知x和y为两个向量,是要拟合到 n 次多项式的 x、y 数据,可使用polyfit()函数,基本格式如下:

x = [1 2 3 4 5 6]; y = [5.5 43.1 128 290.7 498.4 978.67];   %data
p = polyfit(x,y,4)   %get the polynomial
  • 1
  • 2

在这里插入图片描述
借助前面绘图的知识,我们可将拟合出的曲线打印在图上,代码如下:

x = [1 2 3 4 5 6]; y = [5.5 43.1 128 290.7 498.4 978.67];   %data
p = polyfit(x,y,4)   %get the polynomial
x2 = 1:.1:6;          
y2 = polyval(p,x2);
plot(x,y,'o',x2,y2)
grid on
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

十二、数学建模算法讲解

请参考本专栏:数学建模丛小白到精通之路,本专栏一直更新,从未断过。

本专栏使用的编程语言:

  • Matlab
  • Python

我对你的期望:

  1. 掌握python基础,python基础专栏教程:python全栈基础教程
  2. 掌握matlab基础。本篇是对matlab的一些重点基础做了总结,要谈到细枝末节,请结合本专栏第一篇文章开始学习,如果你已经有一定基础,请直接看本片作为回顾即可。
  3. 熟悉Python中的pandas模块,虽然本专栏并没有专门对该模块写过教程,但我希望你能自学该模块,因为专栏中的后续学习中都用到了该模块。

我的祝愿:希望大家拿奖到手软!——川川菜鸟

关注公众号/CSDN/知乎:川川菜鸟
获取更多数模资料

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/979785
推荐阅读
相关标签
  

闽ICP备14008679号