MATLAB新手简明使用教程(七)

您所在的位置:网站首页 matlab函数求导并画图 MATLAB新手简明使用教程(七)

MATLAB新手简明使用教程(七)

2024-07-14 10:25| 来源: 网络整理| 查看: 265

前期回顾

上一期中,我们学了下面的知识:

定积分的基本概念和一些简单的几何意义。使用 int 函数计算不定积分。使用 int 函数计算定积分。 本期内容

本期我打算给大家介绍一下使用matlab对多项式进行的一些基本运算,如求根、求导、四则运算等或者还有其他一些简单的数据分析的内容。

正文开始 多项式及其建立

在运算中我们经常接触到的就是所谓的多项式,比如很常见的一个多项式:y = x^2 + 2x + 3

这里我们就说这是一个x的多项式,最高次是2次,常数项是3,二次项的系数是1,一次项的系数是2,相信这些大家都知道,就不再赘述了。 

那么在matlab中,如何建立一个多项式呢?

通过系数建立多项式

如果在演草纸上,我们需要进行如下的步骤:

确定最高次项是几次。确定各个次项的系数。常数项是多少。

确定了上面的东西,就基本上可以确定一个多项式了,为了方便,我们使用程序表示这样一个多项式:y = 4x^4 + 3x^3 + 2x^2 + x + 1 ,那么上述步骤在程序中是这样表示出来的:

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

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

上面的程序运行结果如图所示:

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

假设现在已有方程根:x_{1} = 1, x_{2} = 4 ,要求得到这个方程的式子,对于一元二次方程来讲,一个方法是:伟达定理,利用根与系数的关系,在matlab中,这种问题也可以得到解决,只需要一个函数即可:

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

运行结果如图(我还不知道有没有可能求不出来这个对应方程,没试过哈哈哈哈,我猜应该是只要给出一套根,总能给出一个对应方程吧):

对多项式进行求导

求导即求多项式的导数,一般来讲,习惯上我们把 y = y(x) 对x求导函数直接简称为求导了,但是,我们求导时,一定要明确谁在对谁求导!!!在下文中,不做特殊说明的话,我们默认因变量是y,自变量是x,求导默认为 y对x求导,即求\frac{\mathrm{d} y}{\mathrm{d} x} 。

导数的意义:

PS: 此部分是关于导数的一些基础知识,有相应基础的可以跳过,CSDN右边有目录结构,可以直接根据标题跳转。

导数,在某种程度上,我们可以理解为变化率,即 y 随着 x 的变化而变化的幅度、大小、快慢等,举个例子,我说我的速度是匀速,60km/h(60千米每小时),此时:自变量(x)是时间,因变量(y)是速度,我们可以很清楚的知道,我的速度是匀速(60km/h),所以我的速度(y)不随着时间(x)的变化而变化,所以我的速度变化率是0,所以此时\frac{\mathrm{d} y}{\mathrm{d} 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)。):

常数导数为0;(即变化率为0,不改变)多项式求导公式:{(x^a)}' = ax^{a-1} 。{(uv)}' = u'v + uv'{(\frac{u}{v})}' = \frac{u'v - uv'}{v^2}

理解上述知识点应该就可以理解今天的内容了,如果有什么不懂的,欢迎大家留言或者私信!。

 

使用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);

在商求导这个地方,所需要修改的仅仅是返回值而已,其他的地方几乎与乘积求导一致,还是很方便的。

运行结果如图所示:

结束语

今天我们学习了如下内容:

在matlab中使用已知系数、已知根简历方程多项式的方法。求导的浅薄的基本概念。在matlab中对多项式求导的一些函数,包括一些典型的求导类型:乘积求导、商求导等。

那么今天就介绍到这里!谢谢大家观看!如果有疑问,欢迎大家评论留言!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3