秦九韶算法 MATLAB程序
- 格式:pdf
- 大小:154.00 KB
- 文档页数:3
matlab秦九韶算法程序例子秦九韶算法,又称为秦九韶求值算法,是一种用于求解多项式值的算法。
它可以在O(n)的时间复杂度内计算一个多项式在给定点的值,相对于普通的计算方法而言,具有更高的效率。
本文将以MATLAB语言为例,介绍秦九韶算法的实现过程,并提供一些示例代码。
1. 算法原理秦九韶算法的核心思想是利用累积计算的方式,将多项式的求值过程转化为一个累积乘法的过程。
具体而言,算法通过反复利用上一次的计算结果,不断累积乘以给定点的值,并加上下一个系数,从而逐步求得多项式在给定点的值。
2. 算法实现下面是一个简单的MATLAB函数实现秦九韶算法的例子:```matlabfunction res = evaluatePolynomial(coefficients, x)n = length(coefficients);res = coefficients(n);for i = n-1:-1:1res = res * x + coefficients(i);endend```3. 示例代码下面给出一个示例,假设我们要计算多项式P(x) = 2x^3 + 3x^2 + 4x + 5在x = 2的值,可以使用上述实现的秦九韶算法函数evaluatePolynomial:```matlabcoefficients = [2, 3, 4, 5];x = 2;result = evaluatePolynomial(coefficients, x);disp(result);```运行上述代码,输出结果为33,表示多项式在x = 2的值为33。
4. 复杂度分析根据秦九韶算法的实现,计算多项式在给定点的值的时间复杂度为O(n),其中n为多项式的阶数。
这是由于算法只需要进行一次遍历,累积乘法的操作次数与多项式的阶数相同。
5. 算法优势相对于普通的计算方法,秦九韶算法具有较高的效率。
在求解多项式值时,传统的计算方法需要进行多次乘法和加法运算,而秦九韶算法通过累积乘法的方式,大大减少了乘法和加法的次数,从而提升了计算效率。
数值计算方法课程设计姓名高振翔学号201211011066班级信计12-2成绩:1编写秦九韶算法程序,并用该程序计算多项式623)(35+-+=x x x x f 在1.3 1.2, ,1.1=x 的值function value=qinjiushao(A,x)n=length(A);F=zeros(n);F(1)=A(1);for i=1:n-1F(i+1)=F(i)*x+A(i+1);endvalue=F(n)disp('真值')polyval(A,x)程序:function s=qinjiuzhao(a,x)n=length(a);s=a(1);for k=2:n;s=s*x+a(k);end3. 调试:a=[1 0 3 –2 6];s=qinjiuzhao(a,1,1)s=qinjiuzhao(a,1,2)s=qinjiuzhao(a,1,3)结果:s=9.4035 s=11.2723 s=13.70392. *用选列主元高斯消去法解线性方程组⎪⎪⎩⎪⎪⎨⎧=+-=-+-=-+-=--02 02 0 21 34343232121x x x x x x x x x x 计算的matlab 程序:tic%运行时间命令A=[-3 -1 0 0;-1 2 -1 0;0 -1 2 -1;0 0 -1 2]; b=[1 0 0 0]'; ];%A 系数矩阵,b 为n 维向量 y=inv(A)*b; %matlab 的计算结果y= -0.2667-0.2000-0.1333-0.0667n=length(b); x=zeros(n,1); %方程个数n;x 未知向量%——以下消为去过程——for k=1:n-1% if A(k,k)=0;% error('Error');% endfor i=k+1:n% A(i,k)=A(i,k)/A(k,k);Aik=A(i,k)/A(k,k)for j=k:nA(i,j)=A(i,j)-Aik*A(k,j);endAb(i)=b(i)-Aik*b(k)endend%——回代——Aik =0.3333A =-3.0000 -1.0000 0 00 2.3333 -1.0000 00 -1.0000 2.0000 -1.00000 0 -1.0000 2.0000b =1.0000-0.3333Aik =A =-3.0000 -1.0000 0 00 2.3333 -1.0000 00 -1.0000 2.0000 -1.00000 0 -1.0000 2.0000b =1.0000-0.3333Aik =A =-3.0000 -1.0000 0 00 2.3333 -1.0000 00 -1.0000 2.0000 -1.00000 0 -1.0000 2.0000b =1.0000-0.3333Aik =-0.4286A =-3.0000 -1.0000 0 00 2.3333 -1.0000 00 0 1.5714 -1.00000 0 -1.0000 2.0000b =1.0000-0.3333-0.1429Aik =A =-3.0000 -1.0000 0 00 2.3333 -1.0000 00 0 1.5714 -1.00000 0 -1.0000 2.0000b =1.0000-0.3333-0.1429Aik =-0.6364A =-3.0000 -1.0000 0 00 2.3333 -1.0000 00 0 1.5714 -1.00000 0 0 1.3636b =1.0000-0.3333-0.1429-0.0909>> x(n)=b(n)/A(n,n)x =-0.0667>> for k=n-1:-1:1S=b(k);for j=k+1:nS=S-A(k,j)*x(j);endx(k)=S/A(k,k)endx =-0.1333-0.0667x =-0.2000-0.1333-0.0667x =-0.2667-0.2000-0.1333-0.0667>> xx =-0.2667-0.2000-0.1333-0.0667>> error=abs(x-ones(n,1)) ))%误差error =1.26671.20001.13331.0667toc%运行时间命令运行时间:348.6710结构分析:在用高斯消去法求解方程组的解,化为阶梯型时,主元过小可能产生麻烦,会产生很大的误差,既小主元要在分母上,产生的误差变化很大,所以应避免采用绝对值最小的主元素,对于一般矩阵来说,最好每一步选取系数矩阵或消元后的低阶矩阵中绝对值最大的元素作为主元素,使高斯消去法具有较好的稳定性,主要使用列主元消去法!小结:在求解方程组时,使用列主元消去法,先判定方程组的系数矩阵非奇异,然后进行行变换,按列主元消去法化为阶梯型,当计算到系数行列式为0时计算停止,然后在回代求解最终求得原方程组的解。
§75秦九韶算法§75秦九韶算法──求多项式的值一、泰勒定理简介二、求多项式值的求法三、秦九韶算法1.直接法2.累乘法3.秦九韶算法1.步骤2.编程复杂函数多项式函数泰勒定理先改后算两大步降幂提因○补缺由内到外逐层算人工递推系数表4.其他法递推公式法人工系数表法三大语言三结构五种语句三案例高考主流是框图循环结构是重点辗转相除法与更相减损术进位制秦九韶算法注4:注1:自然语言框图程序设计语言注2:顺序结构条件结构循环结构输入语句注3:赋值语句输出语句条件语句循环语句───求最大公约数───求多项式的值框图的画法是次要的重点是要能看懂框图2.辗转相除法1.短除法求最大公约数的方法3.更相减损术数字较小短除法公质因数连续除除到所有商互质除数连乘是答案大除小余换大辗转除何时停0或11互质0除数即答案大减小差换大连续减何时停两相等即答案若可半可省功注:辗转相除法与更相减损术的异同点1.辗转相除法以除法运算为主3.两法本质上都是递推,都可用循环结构编程更相减损术以减法运算为主2.辗转相除法当除法运算余数为O或1时终止运算更相减损术当减法运算差为O时终止运算§75秦九韶算法──求多项式的值一、泰勒定理简介二、求多项式值的求法三、秦九韶算法1.直接法2.累乘法3.秦九韶算法1.步骤2.编程复杂函数多项式函数泰勒定理先改后算两大步降幂提因○补缺由内到外逐层算人工递推系数表4.其他法递推公式法人工系数表法常见的多项式(整式)函数我省的大压轴题,每年都是以三次函数来说事2013年的全国Ⅰ卷的小压轴题,是四次函数泰勒中值定理一、泰勒定理简介复杂函数多项式函数泰勒定理②n越大越精确①阶乘的概念:参课本P:32练习2麦克劳林公式一、泰勒定理简介复杂函数多项式函数泰勒定理1.直接法2.累乘法3.秦九韶算法最多n(n+1)/2次乘法,n次加法最多n次乘法,n次加法xn=(xn-1)xxn-1=(xn-2)xxn-2=(xn-3)x…二、求多项式值的求法4.其他法例如当n=10时……引例.求f(x)=x5+x4+x3+x2+x+1当x=5时的值直接法f(5)=55+54+53+52+5+1=3125+625+125+25+5+1=3906累乘法f(5)=55+54+53+52+5+1+5+1□=+□+□+□251253125625=3906引例.求f(x)=x5+x4+x3+x2+x+1当x=5时的值秦九韶算法f(5)=55+54+53+52+5+1=5×(54+53+52+5+1)+1=5×(5×(53+52+5+1)+1)+1=5×(5×(5×(52+5+1)+1)+1)+1=5×(5×(5×(5×(5+1)+1)+1)+1)+1=5×(5×(5×(5×6+1)+1)+1)+1=5×(5×(5×31+1)+1)+1=5×(5×156+1)+1=5×781+1=3906先改后算迭代法降幂提因○补缺由内到外逐层算人工递推系数表后算先改可以看出,该算法是:将求一个5次多项式f(x)的值转化成了求5个一次多项式的值的方法引例.求f(x)=x5+x4+x3+x2+x+1当x=5时的值1.直接法2.累乘法f(5)=55+54+53+52+5+13.秦九韶算法4.其他法55,54,53,52,5,1应用等比数列的求和公式最简洁吧秦九韶算法:设是一个n次的多项式先对该多项式按下面的方式进行改写:先改后算两大步降幂提因○补缺由内到外逐层算如何求该多项式的值呢?最后一项Vn是所求值秦九韶算法是将求一个n次多项式f(x)的值转化成了,求n个一次多项式的值的方法。
文章标题:深入探讨秦九韶算法的Matlab程序写法在数学领域中,秦九韶算法是一个非常重要的算法,主要用于多项式的快速计算和求值。
它由我国古代数学家秦九韶所发明,是一种十分高效的多项式求值方法。
在本文中,我们将深入探讨秦九韶算法的Matlab程序写法,通过具体的代码示例和讲解,帮助读者更好地理解和掌握这一算法。
1. 算法原理让我们简要回顾一下秦九韶算法的原理。
该算法的核心思想是通过不断的迭代和累乘来求解多项式的值,从而实现快速计算。
其数学原理是利用了多项式的因式分解性质,通过减少乘法次数来提高计算效率。
2. Matlab程序实现接下来,我们将展示秦九韶算法在Matlab中的具体实现方法。
我们需要定义一个多项式的系数向量,假设为coeffs,其中 coeffs(i) 表示多项式中 x 的 i 次幂的系数。
我们可以使用如下的Matlab代码来实现秦九韶算法:```matlabfunction result = qinjiushao(coeffs, x)n = length(coeffs);b = coeffs(n);for i = n-1:-1:1b = coeffs(i) + x * b;endresult = b;```在这段代码中,我们定义了一个名为 qinjiushao 的函数,该函数接受多项式系数向量 coeffs 和自变量 x 作为输入,然后利用秦九韶算法来计算多项式在给定自变量下的值,并将结果保存在 result 中。
通过从高次幂到低次幂的顺序累乘和累加,最终得到多项式的求值结果。
3. 代码解释让我们逐行解释一下这段代码的实现细节。
我们获取系数向量的长度n,并将最高次幂的系数赋给变量 b。
我们使用 for 循环从 n-1 次幂开始逐次迭代,每次将之前的结果乘以 x 并加上新的系数值。
我们将得到多项式在给定自变量下的值,并将其保存在 result 中返回。
4. 个人观点对于秦九韶算法的Matlab程序写法,我认为需要注意的是在实现过程中要遵循算法的核心原理,即通过迭代和累乘来求解多项式的值。
matlab秦九韶算法程序例子Matlab中的秦九韶算法是一种用于快速计算多项式的算法。
在这篇文章中,我将列举十个使用Matlab实现秦九韶算法的例子,并详细解释每个例子的实现过程和结果。
1. 一元多项式求值考虑一个一元多项式P(x) = 2x^3 + 3x^2 + 4x + 5,我们可以使用秦九韶算法来计算P(x)在x=2处的值。
首先,将多项式的系数存储在一个向量coeff中,然后使用秦九韶算法求解:```matlabcoeff = [2, 3, 4, 5];x = 2;result = coeff(1);for i = 2:length(coeff)result = result*x + coeff(i);enddisp(result);```结果为31,即P(2) = 31。
2. 多项式相加考虑两个多项式P(x) = 2x^3 + 3x^2 + 4x + 5和Q(x) = 1x^2 + 2x + 3,我们可以使用秦九韶算法将它们相加。
首先,将两个多项式的系数存储在两个向量coeff1和coeff2中,然后使用秦九韶算法求解:```matlabcoeff1 = [2, 3, 4, 5];coeff2 = [1, 2, 3];result = zeros(1, max(length(coeff1), length(coeff2)));for i = 1:min(length(coeff1), length(coeff2))result(i) = coeff1(i) + coeff2(i);endif length(coeff1) > length(coeff2)result(length(coeff2)+1:end) = coeff1(length(coeff2)+1:end);elseresult(length(coeff1)+1:end) = coeff2(length(coeff1)+1:end);enddisp(result);```结果为[2, 4, 8, 8],即P(x) + Q(x) = 2x^3 + 4x^2 + 8x + 8。
中国地质大学(武汉)数值分析报告
学生姓名:张天馨
所在学院:地球物理与空间信息学院学生班级:061125
学生学号:20121002820
任课教师:付丽华
一、目的
1.熟悉Matlab的基本操作过程
2.掌握在数学领域的相关应用
二、内容
求解秦九韶算法的计算复杂度MATLAB程序设计:
>>tic;
p=input('please input p(x)='); x=input('please input x=');
n=length(p);
s(1)=p(1);
for i=1:n-1
s(i+1)=s(i)*x+p(i+1);
end
p=s(n)
toc;
程序运行结果:
三、实习总结与心得
秦九韶的算法很简单,因此在写这个程序时也并不感到十分困难。
通过这个作业我也更深刻的体会到了用计算机来解决数学问题的便携。
希望能在未来的数值分析学习中充分结合程序技能、融会贯通,用高科技去探索数学世界的奥秘。
中国地质大学(武汉)数值分析报告
学生姓名:张天馨
所在学院:地球物理与空间信息学院学生班级:061125
学生学号:20121002820
任课教师:付丽华
一、目的
1.熟悉Matlab的基本操作过程
2.掌握在数学领域的相关应用
二、内容
求解秦九韶算法的计算复杂度MATLAB程序设计:
>>tic;
p=input('please input p(x)='); x=input('please input x=');
n=length(p);
s(1)=p(1);
for i=1:n-1
s(i+1)=s(i)*x+p(i+1);
end
p=s(n)
toc;
程序运行结果:
三、实习总结与心得
秦九韶的算法很简单,因此在写这个程序时也并不感到十分困难。
通过这个作业我也更深刻的体会到了用计算机来解决数学问题的便携。
希望能在未来的数值分析学习中充分结合程序技能、融会贯通,用高科技去探索数学世界的奥秘。