MATLAB新⼿简明使⽤教程(七)——使⽤matlab建⽴多项式以及求导,商求导乘积求导等。。。
前期回顾
上⼀期中,我们学了下⾯的知识:
1. 定积分的基本概念和⼀些简单的⼏何意义。
2. 使⽤ int 函数计算不定积分。
3. 使⽤ int 函数计算定积分。
本期内容
本期我打算给⼤家介绍⼀下使⽤matlab对多项式进⾏的⼀些基本运算,如求根、求导、四则运算等或者还有其他⼀些简单的数据分析的内容。
正⽂开始
多项式及其建⽴
在运算中我们经常接触到的就是所谓的多项式,⽐如很常见的⼀个多项式:
这⾥我们就说这是⼀个x的多项式,最⾼次是2次,常数项是3,⼆次项的系数是1,⼀次项的系数是2,相信这些⼤家都知道,就不再赘述了。
那么在matlab中,如何建⽴⼀个多项式呢?
通过系数建⽴多项式
如果在演草纸上,我们需要进⾏如下的步骤:
1. 确定最⾼次项是⼏次。
2. 确定各个次项的系数。
3. 常数项是多少。
确定了上⾯的东西,就基本上可以确定⼀个多项式了,为了⽅便,我们使⽤程序表⽰这样⼀个多项式:
,那么上述步骤在程序中是这样表⽰出来的:
clc;clear;
%% 使⽤matlab建⽴多项式
p = [4 3 2 1 1]; %确定各项系数,和常数项。放在⼀个数组⾥⾯。
y = poly2sym(p); %创建⽬标多项式,这个函数返回了⼀个符号变量,即我们的函数
disp(y); %显⽰y.
PS: 如果需要定义⼀个特殊的函数⽐如  ,那么我们可以认为3次、2次、1次系数都为0,常数项也为0,写⼊数组即可。
上⾯的程序运⾏结果如图所⽰:
通过已知⽅程的根建⽴多项式
假设现在已有⽅程根: ,要求得到这个⽅程的式⼦,对于⼀元⼆次⽅程来讲,⼀个⽅法是:伟达定理,利⽤根与系数的关系,在matlab中,这种问题也可以得到解决,只需要⼀个函数即可:
clc;clear;
%% 使⽤根建⽴多项式
r = [1 2 3]; %随意编⼀些根
p = poly(r); %调⽤求多项式的函数
y = poly2sym(p); %得到多项式的符号变量
disp(y);
运⾏结果如图(我还不知道有没有可能求不出来这个对应⽅程,没试过哈哈哈哈,我猜应该是只要给出⼀套根,总能给出⼀个对应⽅程吧):
对多项式进⾏求导
求导即求多项式的导数,⼀般来讲,习惯上我们把 y = y(x) 对x求导函数直接简称为求导了,但是,我们求导时,⼀定要明确谁在对谁求导!!!在下⽂中,不做特殊说明的话,我们默认因变量是y,⾃变量是x,求导默认为 y对x求导,即求
导数的意义:
PS: 此部分是关于导数的⼀些基础知识,有相应基础的可以跳过,CSDN右边有⽬录结构,可以直接根据标题跳转。
导数,在某种程度上,我们可以理解为变化率,即 y 随着 x 的变化⽽变化的幅度、⼤⼩、快慢等,举个例⼦,我说我的速度是匀
速,60km/h(60千⽶每⼩时),此时:⾃变量(x)是时间,因变量(y)是速度,我们可以很清楚的知道,我的速度是匀速(60km/h),所以我的速度(y)不随着时间(x)的变化⽽变化,所以我的速度变化率是0,所以此时。在图形上⾯表⽰如图所⽰:
下⾯假设我的速度不再是匀速,⽽是慢慢变快的,但是加快的速度是恒定的,都是每分钟加10km/h,⽐如刚起步是0,⼀分钟后是10km/h,两分钟后是20km/h.。。。。。类推,此时我们知道,我的速度(因变量y)随着时间(⾃变量x)是在慢慢改变的(并且还是均匀改变的),所以此时有⼀个变化率,即 10km/h/min,就是每分钟改变 10km/h的速度,(⼤家不⽤理会单位,这个不重要,重要的是知识点),在图形中是这样表⽰的:
在红⾊的图形中,就可以看到上⾯的变化的速度的例⼦。那么求导数就可以理解为是反映这个变化率的⼀个⽅式。
⼀些基本知识点(u和v都是x的函数,即 u = u(x), v = v(x)。):
1. 常数导数为0;(即变化率为0,不改变)
2. 多项式求导公式: 。
3.
4.
理解上述知识点应该就可以理解今天的内容了,如果有什么不懂的,欢迎⼤家留⾔或者私信!。
使⽤matlab进⾏求导
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);
运⾏结果如图所⽰:
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);
在商求导这个地⽅,所需要修改的仅仅是返回值⽽已,其他的地⽅⼏乎与乘积求导⼀致,还是很⽅便的。
运⾏结果如图所⽰:
结束语
今天我们学习了如下内容:
1. 在matlab中使⽤已知系数、已知根简历⽅程多项式的⽅法。
2. 求导的浅薄的基本概念。
3. 在matlab中对多项式求导的⼀些函数,包括⼀些典型的求导类型:乘积求导、商求导等。
那么今天就介绍到这⾥!谢谢⼤家观看!如果有疑问,欢迎⼤家评论留⾔!