matlab解三次方程

合集下载

matlab教程

matlab教程

x=fzero 要求区间两端的函数值异号 对于例4,我们先作图观测 对于例4 fplot(fun,[-2,-0.1]);grid on;
2 1.5
1
0.5
0
-0.5
-1
-1.5 -2
-1.8
-1.6
-1.4
-1.2
-1
-0.8
-0.6
-0.4
-0.2
发现在-1.6和-0.6附近各有一个零点,我们分两个 和 附近各有一个零点, 发现在 附近各有一个零点 小区间分别求解 fzero(fun,[-2,-1.2]) fzero(fun,[-1.2,-0.1]) ans = -1.5956 ans = -0.6180
求零点: 3. Matlab 求零点: ----x=fzero(f,x0) 返回一元函数的一个零点,其中f 返回一元函数的一个零点,其中f 为函数,且返回函数在x0附近的零点 附近的零点; 为函数,且返回函数在 附近的零点;--------x=fzero(f,[a,b])返回一元函数的一个零点,其中 返回一元函数的一个零点, 返回一元函数的一个零点 为函数, [a,b]区间中的零点 区间中的零点。 f为函数,且返回函数在 [a,b]区间中的零点。 例7 求方程sin(4x)=lnx 根 求方程sin(4x)=lnx f=inline(‘sin(4*x)f=inline(‘sin(4*x)-log(x)’,’x’); Y1=fzero(f,0.7) Y2=fzero(f,[0.5,1])
做函数y=sin4x-lnx的图像 x=0.1:0.1:1.4; y=sin(4*x)-log(x); plot(x,y) grid on
二 方程的近似解的求法 1 预备知识 求方程近似解的理论基础是零点存在定理,求方程 近似解可分两步做: 第一步,确定根的大致范围,即确定一个区间[a,b], 使所求根位于这个区间内,称之为根的隔离区间。 一般来说,可以通过函数作图大致地确定。根据零 点存在定理,只要f(x)在某闭区间连续,在该区间内 找小区间[a,b]使f(a).f(b)<0且曲线y=f(x)在(a,b)内仅通 过x轴一次,即可。

matlab常用解方程及方程组函数

matlab常用解方程及方程组函数

matlab常用解方程及方程组函数matlab常用解方程及方程组函数1、roots求解多项式的根r=roots(c)注意:c为一维向量,者返回指定多项式的所有根(包括复根),poly与roots就是互为反运算,还有就就是roots只能求解多项式的解还有下面几个函数poly2sym、sym2poly、eig>>syms x>>y=x^5+3*x^3+3;>>c=sym2poly(y);%求解多项式系数 >>r=roots(c); >>poly(r)2、residue求留数[r, p, k] = residue(b,a) >>b = [ 5 3 -2 7] >>a = [-4 0 8 3]>>[r, p, k] = residue(b,a)3、solve符号解方程(组)——使用最多的g = solve(eq1,eq2,、、、,eqn,var1,var2,、、、,varn)注意:eqn与varn可以就是符号表达式,也可以就是字符串表达式,但就是使用符号表达式时不能有“=”号,假如说varn没有给出,使用findsym函数找出默认的求解变量。

返回的g就是一个结构体,以varn 为字段。

由于符号求解的局限性,好多情况下可能得到空矩阵,此时只能用数值解法解方程A=solve('a*x^2 + b*x + c')解方程组B=solve('a*u^2 + v^2', 'u - v = 1', 'a^2 - 5*a + 6')4、fzero数值求零点[x,fval,exitflag,output]=fzero(fun,x0,options,p1,p2、、、)fun就是目标函数,可以就是句柄(@)、inline函数或M文件名x0就是初值,可以就是标量也可以就是长度为2的向量,前者给定一个位置,后者就是给定一个范围options就是优化参数,通过optimset设置,optimget获取,一般使用默认的就可以了,具体参照帮助p1,p2、、、为需要传递的其它参数假如说(x/1446)^2+p/504、1+(t/330、9)*(log(1-x/1446)+(1-1/5、3)*x/1446)=0的根,其中p,t就是已知参数,但就是每次都改变那么目标函数如下三种书写格式,效果完全等效。

Matlab解方程(方程组)

Matlab解方程(方程组)

Matlab 解方程这里系统的介绍一下关于使用Matlab求解方程的一系列问题,网络上关于Matlab求解方程的文章数不胜数,但是我大体浏览了一下,感觉很多文章都只是零散的介绍了一点,都只给出了一部分Matlab函数例子,以至于刚接触的人面对不同文章中的不同函数一脸茫然,都搞不清楚这些函数各自的用途,也不知道在什么样的情况下该选择哪个函数来求解方程,在使用Matlab解方程时会很纠结。

不知道读者是否有这样的感觉,反正我刚开始接触时就是这样的感觉,面对网络搜索到一系列函数都好想知道他们之间是个什么关系。

所谓的方程就是含有未知数的等式,解方程就是找出使得等式成立时的未知数的数值。

求方程的解可以转换成不同形式,比如求函数的零点、多项式的根。

方程分类很多,按照未知数个数分为一元、二元、多元方程;按照未知数组合形式分为线性方程和非线性方程;按照非零项次数是否一致分为齐次方程和非齐次方程。

线性方程就是方程中未知数次数是一次的,未知数之间不存在指、对、2及以上幂次的关系,线性方程又分为一元线性方程,也就是一元一次方程;多元线性方程,也就是多元一次方程,多以线性方程组的形式出现(包括齐次线性方程组和非齐次线性方程组)。

在Matlab中求解方程的函数主要有roots、solve、fzero、和fsolve函数等,接下来详细的介绍一下各个Matlab函数的使用方法和使用场合。

一、直接求解法(线性方程组)直接求解法不需要借助任何的Matlab函数,主要用于求解线性方程组,也就是未知数次数是一次的方程组,包括齐次线性方程组合非齐次线性方程组。

当然既然可以求解方程组自然也就可以求解单个方程。

主要针对A x=b形式的方程,其中A是未知数系数矩阵,x是未知数列向量,b是常数列向量,当b=0时就是齐次线性方程组,b ≠0时是非齐次线性方程组。

用左除法,x=A\b例:求解线性方程组的解12341242341234251357926640x x x x x x x x x x x x x x +-+=⎧⎪-+=-⎪⎨+-=⎪⎪+--=⎩解:即直接利用b 左除以A 。

matlab解多项式方程

matlab解多项式方程

matlab解多项式方程一、引言多项式方程是数学中常见的一类方程,它包含一个或多个未知数,并且每个未知数的指数都是整数。

解多项式方程是求解这个方程中的未知数的值,对于一般的多项式方程,解的求解是一个复杂的过程。

然而,使用MATLAB这样的数学软件,可以大大简化这个过程,提高求解的效率。

本文将介绍如何使用MATLAB解决多项式方程的问题。

二、MATLAB解多项式方程的方法MATLAB提供了多种方法来解决多项式方程的问题,包括求解代数方程的根、求解多项式方程的特殊解等。

下面将介绍几种常见的方法:1. 使用roots函数求解代数方程的根roots函数是MATLAB中用于求解代数方程的根的函数,对于给定的多项式方程,它可以返回该方程的所有根。

使用方法如下:p = [1, -3, 2];r = roots(p);上述代码中,p是一个向量,表示一个多项式方程的系数,r是一个向量,表示该方程的所有根。

例如,对于多项式方程x^2 - 3x + 2 = 0,p表示的向量是[1, -3, 2],r表示的向量是[1, 2],即方程的根是1和2。

2. 使用poly函数求解多项式方程的特殊解poly函数是MATLAB中用于求解多项式方程的特殊解的函数,它可以根据给定的根来返回对应的多项式方程的系数。

使用方法如下:r = [1, 2];p = poly(r);上述代码中,r是一个向量,表示一个多项式方程的根,p是一个向量,表示该方程的系数。

例如,对于多项式方程的根是1和2,r表示的向量是[1, 2],p表示的向量是[1, -3, 2],即方程的系数是1、-3、2.三、MATLAB解多项式方程的示例为了更好地理解MATLAB解多项式方程的方法,下面将通过一个示例来演示具体的步骤:1. 求解一元二次方程假设我们要求解方程x^2 - 3x + 2 = 0的根,我们可以使用roots函数来实现:p = [1, -3, 2];r = roots(p);运行上述代码后,我们可以得到方程的根r是[1, 2]。

MATLAB三次样条插值之三弯矩法

MATLAB三次样条插值之三弯矩法

MATLAB三次样条插值之三弯矩法首先说这个程序并不完善,为了实现通用(1,2,…,n)格式解题,以及为调用追赶法程序,没有针对节点数在三个以下的情况进行分类讨论。

希望能有朋友给出更好的方法。

首先,通过函数sanwanj得到方程的系数矩阵,即追赶法方程的四个向量参数,接下来调用追赶法(在intersanwj函数中),得到三次样条分段函数系数因子,然后进行多项式合并得到分段函数的解析式,程序最后部分通过判断输入值的区间自动选择对应的分段函数并计算改点的值。

附:追赶法程序chase%%%%%%%%%%%%%%function [newv,w,newu,newd]=sanwj(x,y,x0,y0,y1a,y1b)ﻫ%三弯矩样条插值ﻫ%将插值点分两次输入,x0y0单独输入ﻫ% 边值条件a的二阶导数 y1a 和b的二阶导数y1b,这里建议将y1a和y1b换成y2a和y2b,以便于和三转角代码相区别ﻫn=length(x);m=length(y);if m~=nﻫerror('x or y 输入有误,再来');endﻫv=ones(n-1,1);u=ones(n-1,1);d=zeros(n-1,1);ﻫw=2*ones(n+1);ﻫh0=x(1)-x0;ﻫh=zeros(n-1,1);for k=1:n-1ﻫh(k)=x(k+1)-x(k);ﻫendv(1)=h0/(h0+h(1));u(1)=1-v(1);d(1)=6*((y(2)-y(1))/h(1)-(y(1)-y0)/h0)/(h0+h(1));ﻫ%for k=2:n-1ﻫv(k)=h(k-1)/(h(k-1)+h(k));ﻫu(k)=1-v(k);ﻫd(k)=6*((y(k+1)-y(k))/h(k)-(y(k)-y(k-1))/h(k-1))/(h(k-1)+h(k));endnewv=[v;1];ﻫnewu=[1;u];d0=6*((y(1)-y0)/h0-y1a)/h0;d(n)=6*(y1b-(y(n)-y(n-1))/h(n-1))/h(n-1);newd=[d0;d];%%%%%%%%%%%%function intersanwj(x,y,x0,y0,y1a,y1b)%三弯矩样条插值ﻫ%第一部分ﻫn=length(x);m=length(y);if m~=nﻫerror('xory 输入有误,再来');endﻫ%重新定义hﻫh=zeros(n,1);h(1)=x(1)-x0;for k=2:nh(k)=x(k)-x(k-1);ﻫend%sptep1调用三弯矩函数ﻫ[a,b,c,d]=sanwj(x,y,x0,y0,y1a,y1b);% 三对角方程ﻫM=chase(a,b,c,d);% 求插值函数ﻫfprintf('三次样条(三弯矩)插值的函数表达式\n');syms X ;ﻫfprintf('S0--1:\n');S(1)=collect(((1/6)*M(2)*(X-x0).^3-(1/6)*M(1)*(X-x(1)).^3+(y(1)-(M(2)*h(1).^2)/6)*(X-x0)-(y0-(M(1)*h(1).^2)/6)*(X-x(1)))/h(1));ﻫfor k=2:nfprintf('S%d--%d:\n',k-1,k);S(k)=collect(((1/6)*M(k+1)*(X-x(k-1)).^3-(1/6)*M(k)*(X-x(k)).^3+(y(k)-(M(k+1)*h(k).^2)/6)*(X-x(k-1))-(y(k-1)-(M(k)*h(k).^2)/6)*(X-x(k)))/h(k));endﻫS=S.';ﻫdisp(S);ﻫfprintf('以上为样条函数(三弯矩)解析式,显示为手写如下:\n');ﻫpretty(S);%第二部分%是否继续运行程序ﻫmyloop=input('继续运行程序输入“1”,否则输入“0”\n');ﻫifmyloopwhile myloopxi=input('输入需要计算的点的值,并按回车键\n');if xi>x0|xi<x(n)ﻫfprintf('现在开始计算输入点的插值函数值……\n');elseﻫfprintf('输入数值不在插值范围内,请重新输入\n');ﻫxi=input('输入需要计算的点的值,并按回车键……\n');end%确定输入的数值应该使用哪个解析式newx=[x0;x];[r,suoy]=min(abs(newx-xi));ﻫfprintf('输入点的插值函数值为:\n\n');fpr intf('\t');if xi<=newx(suoy)ﻫf=subs(S(suoy-1),X,xi);ﻫelsef=subs(S(suoy),X,xi);enddisp(f);ﻫmyloop=input('继续计算输入“1”,终止计算输入“0”\n');endelsereturn;end%%%%%%%%%%%%function[x]=chase(a,b,c,d)%追赶法解性方程组 a是下三角b是对角线c是上三角 d是常数项%输入的a bc d 均为列向量ﻫn=length(b);ﻫu=zeros(n,1);ﻫv=zeros(n,1);ﻫx=zeros(n,1);%追v(1)=c(1)/b(1);u(1)=d(1)/b(1);for i=2:n-1v(i)=c(i)/(b(i)-v(i-1)*a(i-1));u(i)=(d(i)-u(i-1)*a(i-1))/(b(i)-v(i-1)*a(i-1));endﻫu(n)=(d(n)-u(n-1)*a(n-1))/(b(n)-v(n-1)*a(n-1));ﻫ%赶ﻫx (n)=u(n);ﻫfori=n-1:-1:1x(i)=u(i)-v(i)*x(i+1);ﻫend。

用MATLAB解方程组的三个实例(精心汇编)

用MATLAB解方程组的三个实例(精心汇编)

用MATLAB解方程的三个实例作者:周兆安1、对于多项式p(x)=x3-6x2-72x-27,求多项式p(x)=0的根,可用多项式求根函数roots(p),其中p为多项式系数向量,即>>p =[1,-6,-72,-27]p =1.00 -6.00 -72.00 -27.00p是多项式的MATLAB描述方法,我们可用poly2str(p,'x')函数,来显示多项式的形式:>>px=poly2str(p,'x')px =x^3 - 6 x^2 - 72 x - 27多项式的根解法如下:>> format rat %以有理数显示>> r=roots(p)r =2170/179?-648/113?-769/1980?2、在MATLAB中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为:solve(s,v):求解符号表达式s的代数方程,求解变量为v。

例如,求方程(x+2)x=2的解,解法如下:>> x=solve('(x+2)^x=2','x')x =.69829942170241042826920133106081得到符号解,具有缺省精度。

如果需要指定精度的解,则:>> x=vpa(x,3)x =.6983、使用fzero或fsolve函数,可以求解指定位置(如x0)的一个根,格式为:x=fzero(fun, x0)或x=fsolve(fun,x0)。

例如,求方程0.8x+atan(x)-p=0在x0=2附近一个根,解法如下:>> fu=@(x)0.8*x+atan(x)-pi;>> x=fzero(fu,2)x =2.4482?或>> x=fsolve('0.8*x+atan(x)-pi',2)x =2.4482当然了,对于该方程也可以用第二种方法求解:?>> x=solve('0.8*x+atan(x)-pi','x')x =2.4482183943587910343011460497668对于第一个例子,也可以用第三种方法求解:>> F=@(x)x^3-6*x^2-72*x-27F =?@(x)x^3-6*x^2-72*x-27>> x=fzero(F,10)x =12.1229对于第二个例子,也可以用第三种方法:>> FUN=@(x)(x+2)^x-2FUN =?@(x)(x+2)^x-2>> x=fzero(FUN,1)x =0.6983最近有多人问如何用matlab解方程组的问题,其实在matlab中解方程组还是很方便的,例如,对于代数方程组Ax=b(A为系数矩阵,非奇异)的求解,MATLAB中有两种方法:(1)x=inv(A)*b —?采用求逆运算解方程组;(2)x=A\b —?采用左除运算解方程组。

matlab中调用追赶法求解系数矩阵的三次样条插值

matlab中调用追赶法求解系数矩阵的三次样条插值

matlab中调用追赶法求解系数矩阵的三次样条插值已知数表x1245y1342边界条件S''(x0)=0,S''(x3)=0插值点x=3---------------------------------------------------------分--割--线---------------------------------------------------------使用三转角方程边界条件为第二类边界条件---------------------------------------------------------分--割--线---------------------------------------------------------先写好追赶法的程序把followup.m存入工作路径function x=followup(a,b,c,d)n=length(d);a(1)=0;%“追”的过程L(1)=b(1);y(1)=d(1)/L(1);u(1)=c(1)/L(1);for i=2:(n-1)L(i)=b(i)-a(i)*u(i-1);y(i)=(d(i)-y(i-1)*a(i))/L(i);u(i)=c(i)/L(i);endL(n)=b(n)-a(n)*u(n-1);y(n)=(d(n)-y(n-1)*a(n))/L(n);%“赶”的过程x(n)=y(n);for i=(n-1):-1:1x(i)=y(i)-u(i)*x(i+1);end---------------------分--割--线用matlab编程如下:function[s,y0]=spline3 (x,y,x0)%x,y为数表x0为插值点s表示插值函数y0为x0对应的插值函数值syms tn=length(x);%得出nfor i=1:n-1;h(i)=x(i+1)-x(i);endfor i=2:n-1;lamda(i)=h(i)/(h(i-1)+h(i));miu(i)=1-lamda(i);g(i)=3*(lamda(i)*((y(i)-y(i-1))/h(i-1))+miu(i)*((y(i+1)-y(i))/h( i)));endg(1)=3*((y(2)-y(1))/h(1));g(n)=3*((y(n)-y(n-1))/h(n-1));%前边求出lamda miu和g从而可以确定系数矩阵miu(1)=1;miu(4)=0;lamda(n)=1;%根据第二边界条件补充两个lamda和miu的值for i=1:nbeta(i)=2;endm=followup(lamda,beta,miu,g)%解出m的值从而可确定st st为各段的插值多项式for i=1:n-1st(i)=(t-x(i+1))^2*(h(i)+2*(t-x(i)))*y(i)/(h(i)^3)...+(t-x(i))^2*(h(i)+2*(x(i+1)-t))*y(i+1)/(h(i)^3)...+(t-x(i))^2*(t-x(i+1))*m(i+1)/(h(i)^2)...+(t-x(i+1))^2*(t-x(i))*m(i)/(h(i)^2);end%得到插值的结果各段的t的表达式%接下来要将插值点x0代入首先确定x0所在的插值区间for i=1:n-1if (x(i)<x0)&&(x(i+1)>x0)in=i;endends=st(in);s=expand(s);s=collect(s,'t');y0=subs(s,'t',x0)%s是插值多项式y0是插值点的函数值---------------------------------------------------------分--割--线---------------------------------------------------------在matlab中输入x=[1 2 4 5];y=[1 3 4 2];spline3(x,y,3)---------------------------------------------------------分--割--线---------------------------------------------------------得到y0 =4.2500ans =-1/8*t^3+3/8*t^2+7/4*t-1。

一元三次方程带参数matlab

一元三次方程带参数matlab

一元三次方程带参数matlab摘要:一、一元三次方程带参数matlab 的背景和意义二、一元三次方程带参数的matlab 表示三、一元三次方程带参数的求解方法1.直接解法2.迭代解法四、一元三次方程带参数matlab 的编程实现1.直接解法的编程实现2.迭代解法的编程实现五、结论正文:一、一元三次方程带参数matlab 的背景和意义在数学领域,一元三次方程是中学数学中的一个基本概念。

然而,当一元三次方程中包含参数时,问题变得复杂。

为了解决这类问题,Matlab 编程语言提供了一种有效的工具。

本文将详细介绍一元三次方程带参数的matlab 表示、求解方法及其编程实现。

二、一元三次方程带参数的matlab 表示设一元三次方程带参数为:ax^3 + bx^2 + cx + d = 0,其中a、b、c、d 为参数。

三、一元三次方程带参数的求解方法1.直接解法对于一元三次方程带参数,我们可以通过直接利用公式求解。

公式如下:x = [-b ± sqrt(b^2 - 3ac)] / 3a2.迭代解法当方程无实数解时,我们可以采用迭代法求解。

常用的迭代法有牛顿法、二分法等。

四、一元三次方程带参数matlab 的编程实现1.直接解法的编程实现```matlabfunction x = solve_cubic_parametric(a, b, c, d)% 一元三次方程带参数% a, b, c, d: 方程的系数% x: 解%% 直接解法%% 输入参数% a = 2;% b = -3;% c = 1;% d = 0;% 计算判别式discriminant = b^2 - 3*a*c;% 判断方程的根的情况if discriminant >= 0% 有三个实数根% 计算三个实数根x1 = (-b + sqrt(discriminant)) / (3*a);x2 = (-b - sqrt(discriminant)) / (3*a);x3 = 0;else% 无实数根或有两个相等的实数根% 采用迭代法求解% ...endend```2.迭代解法的编程实现```matlabfunction x = solve_cubic_parametric_iterative(a, b, c, d, tol = 1e-6, max_iter = 100)% 一元三次方程带参数% a, b, c, d: 方程的系数% x: 解% tol: 收敛阈值% max_iter: 最大迭代次数%% 迭代解法%% 输入参数% a = 2;% b = -3;% c = 1;% d = 0;% tol = 1e-6;% max_iter = 100;% 初始化解x = [1, 1, 1];% 迭代for i = 1:max_iter% 计算函数值f = a*x(1)^3 + b*x(2)^2 + c*x(3) + d;% 判断收敛条件if abs(f) < tolbreak;end% 计算新的解dx = -f / (3*a*x);x = x + dx;end% 返回解xend```五、结论本文详细介绍了一元三次方程带参数matlab 的背景和意义、表示方法、求解方法及其编程实现。

matlab解三元方程

matlab解三元方程

matlab解三元方程一、引言在数学中,三元方程是一种包含三个未知数的方程。

解决三元方程是数学中的一个重要问题,它在实际应用中有着广泛的应用。

而MATLAB作为一种强大的数学软件,可以帮助我们解决三元方程。

本文将介绍如何使用MATLAB解决三元方程。

二、MATLAB解三元方程的方法MATLAB提供了多种方法来解决三元方程,其中最常用的方法是高斯消元法和LU分解法。

1. 高斯消元法高斯消元法是一种基本的线性代数方法,它通过消元的方式将方程组转化为上三角矩阵,然后通过回代求解未知数。

在MATLAB中,可以使用“\”运算符来实现高斯消元法。

例如,我们要解决以下三元方程组:x + 2y + 3z = 64x + 5y + 6z = 157x + 8y + 9z = 24可以使用以下代码来解决:A = [1 2 3; 4 5 6; 7 8 9];B = [6; 15; 24];X = A\B;其中,A是系数矩阵,B是常数矩阵,X是未知数矩阵。

通过“\”运算符,MATLAB会自动使用高斯消元法来解决方程组。

2. LU分解法LU分解法是一种将系数矩阵分解为下三角矩阵和上三角矩阵的方法,然后通过回代求解未知数。

在MATLAB中,可以使用“lu”函数来实现LU分解法。

例如,我们要解决以下三元方程组:x + 2y + 3z = 64x + 5y + 6z = 157x + 8y + 9z = 24可以使用以下代码来解决:A = [1 2 3; 4 5 6; 7 8 9];B = [6; 15; 24];[L,U] = lu(A);Y = L\B;X = U\Y;其中,L是下三角矩阵,U是上三角矩阵,Y是中间变量矩阵,X是未知数矩阵。

通过“lu”函数,MATLAB会自动使用LU分解法来解决方程组。

三、总结MATLAB是一种强大的数学软件,可以帮助我们解决三元方程。

本文介绍了MATLAB解决三元方程的两种方法:高斯消元法和LU分解法。

三次样条插值的MATLAB实现

三次样条插值的MATLAB实现

MATLAB 程序设计期中考查在许多问题中,通常根据实验、观测或经验得到的函数表或离散点上的信息,去研究分析函数的有关特性。

其中插值法是一种最基本的方法,以下给出最基本的插值问题——三次样条插值的基本提法:对插值区间[]b a ,进行划分:b x x x a n ≤<⋯⋯<<≤10,函数()x f y =在节点i x 上的值()()n i x f y i i ⋯⋯==,2,1,0,并且如果函数()x S 在每个小区间[]1,+i i x x 上是三次多项式,于[]b a ,上有二阶连续导数,则称()x S 是[]b a ,上的三次样条函数,如果()x S 在节点i x 上还满足条件()()n i y x S i i ⋯⋯==,1,0则称()x S 为三次样条插值函数。

三次样条插值问题提法:对[]b a ,上给定的数表如下.求一个分段三次多项式函数()x S 满足插值条件()()n i y x S i i ⋯⋯==,1,0 式,并在插值区间[]b a ,上有二阶连续导数。

这就需要推导三次样条插值公式:记()x f '在节点i x 处的值为()i i m x f ='(n i ⋯⋯=,1,0)(这不是给定插值问题数表中的已知值)。

在每个小区间[]1,+i i x x 利用三次Hermite 插值公式,得三次插值公式:()()()()1111+++++++=i i i i i i i i i m m x y x y x x S ββαα,[]1,+∈i i x x x 。

为了得到这个公式需要n 4个条件:(1).非端点处的界点有n 2个;(2).一阶导数连续有1-n 个条件;(3).二阶导数连续有1-n 个条件,其中边界条件:○1()()nn m x S m x S ='=' 00○2()()αα=''=''nx S x S 00 ○3()()()()16500403βααβαα=''+'=''+'n n x S x S x S x S ○4n y y =0 ()()()()000000-''=+''-'=+'nn x S x S x S x S 其中:()⎩⎨⎧=≠=j i j i x j i,1,0α ()0='j i x α ()0=j i x β 且(1,0,=j i )。

matlab牛顿插值法三次样条插值法

matlab牛顿插值法三次样条插值法

(){}21()(11),5,10,20:12521()1,(0,1,2,,)()2,(0,1,2,,)()()235,20:1100(i i i i n n k k k Newton f x x n x f x x i i n f x nx y i n Newton N x S x n x k y f x =-≤≤=+=-+====-+=题目:插值多项式和三次样条插值多项式。

已知对作、计算函数在点处的值;、求插值数据点的插值多项式和三次样条插值多项式;、对计算和相应的函数值),()() (1,2,,99)4:()max ()()max()n k n k n k n k n k n k kkN x S x k E N y N x E S y S x ==-=-和;、计算,;解释你所得到的结果。

算法组织:本题在算法上需要解决的问题主要是:求出第二问中的Newton 插值多项式)(x N n 和三次样条插值多项式()n S x 。

如此,则第三、四问则迎刃而解。

计算两种插值多项式的算法如下:一、求Newton 插值多项式)(x N n ,算法组织如下:Newton 插值多项式的表达式如下:)())(()()(110010--⋅⋅⋅--+⋅⋅⋅+-+=n n n x x x x x x c x x c c x N其中每一项的系数c i 的表达式如下:1102110),,,(),,,(),,,(x x x x x f x x x f x x x f c i i i i i -⋅⋅⋅-⋅⋅⋅=⋅⋅⋅=-根据i c 以上公式,计算的步骤如下:⎪⎪⎪⎩⎪⎪⎪⎨⎧⋅⋅⋅+⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅----),,,,(1),,,(),,,,(),(,),,(2)(,),(),(11101111011010n n n n n n n n x x x x f n x x x f x x x f n x x f x x f x f x f x f 、计算、计算、计算、计算二、求三次样条插值多项式)(x S n ,算法组织如下:所谓三次样条插值多项式)(x S n 是一种分段函数,它在节点i x 011()n n a x x x x b -=<<⋅⋅⋅<<=分成的每个小区间1[,]i i x x -上是3次多项式,其在此区间上的表达式如下:22331111111()[()()]()()666[,]1,2,,.i i i i i i i i i i i i i i ii i h x x h x x S x x x M x x M y M y M h h h x x x i n --------=-+-+-+-∈=⋅⋅⋅,, 因此,只要确定了i M 的值,就确定了整个表达式,i M 的计算方法如下: 令:11111111116()6(,,)i i i i i i i i i i i i i ii i i i i i i h h h h h h y y y y d f x x x h h h h μλμ++++--+++⎧===-⎪++⎪⎨--⎪=-=⎪+⎩, 则i M 满足如下n-1个方程:1121,2,,1i i i i i i M M M d i n μλ-+++==⋅⋅⋅-,方程中有n+1个未知量,则令0M 和n M 分别为零,则由上面的方程组可得到(11)i M i n ≤≤-的值,可得到整个区间上的三次样条插值多项式)(x S n 。

【求助】关于MATLAB解三次方程

【求助】关于MATLAB解三次方程

【求助】关于MATLAB解三次方程第一种syms za=0.013583b=0.0010855f=z^3-z^2+z*(a-b-b^2)-a*bs=solve(f,'z')x=vpa(s,6)第二种f=sym('z^3-z^2+z*(0.013583-0.0010855-0.0010855^2)-0.013583*0.0010855=0')s=solve(f,'z')d=vpa(s,6)这两种:第一种解下下来是三个虚根,第二种是三个实根,而且虚根的实部是和实根一样的?为什么呢?因为程序a,b需要不断赋新值,故要采用第一种方法,可是这两种那种计算正确呢。

作者:xiegangmai带入方程验证一下就知道了,第二种方法计算出来的正确。

建议先用solve求解出来,然后用subs替换a、b,得到结果给个简单的例子syms a b x;s = solve('x^3-x^2+x*(a-b-b^2)-a*b=0');result = subs(s,{a,b},{[0.013583,1,2,3],[0.0010855,3,2,1]})作者:xiegangmai求解结果是result =0.9874 - 0.0000i 3.9651 + 0.0000i 2.8751 1.57470.0113 + 0.0000i -0.2820 - 0.0000i -0.9376 - 0.7157i -0.2874 - 1.3500i0.0013 - 0.0000i -2.6831 + 0.0000i -0.9376 + 0.7157i -0.2874 + 1.3500i每一列对应为一个系数a和b的解。

作者:dxyan还是用虚根形式表达的呀,我的目的是计算出根,提取实根,再比较大小。

虽然解值虚根部分是0,但这样是的算是虚根呢还是实根,不论怎样,这种虚根的表达方式(虚根部分是0)没法将实根提取出来。

matlab如何求解三次方程

matlab如何求解三次方程

matlab如何求解三次方程
要用matlab求解三次方程,可以使用roots()函数。

roots()函数可以计算多项式的根,包括三次方程的根。

具体操作步骤如下:
1. 将三次方程转化为多项式的形式,例如:ax^3+bx^2+cx+d=0。

2. 将多项式的系数存储在一个一维数组中,例如:
coef=[a,b,c,d]。

3. 使用roots()函数计算多项式的根,例如:root=roots(coef)。

4. 输出根的值,例如:disp(root)。

需要注意的是,roots()函数返回的是一个复数数组,如果只需要实数根,则需要对结果进行筛选和处理。

下面是一个示例代码:
% 求解三次方程x^3-3x^2+2x+1=0
% 将方程转化为多项式的形式
coef=[1,-3,2,1];
% 计算多项式的根
root=roots(coef);
% 输出根的值
disp(root);
输出结果为:
-0.6180 + 0.0000i
1.0000 + 0.0000i
1.6180 + 0.0000i
说明这个三次方程有三个实数根,分别为-0.6180、1.0000和1.6180。

matlab 三元二次方程组

matlab 三元二次方程组

matlab 三元二次方程组1. 介绍matlab程序Matlab是一款广泛应用于科学、工程及数学领域的计算机软件,其强大的数学计算功能可以辅助工程师、科学家以及研究人员进行科学计算、建模、数据分析等工作。

2. 三元二次方程组定义三元二次方程组是指含有三个变量和三个二次项的线性方程组,通常具有以下形式:ax^2+by^2+cz^2+dxy+eyz+fxz+gx+hy+iz+j=0其中,a、b、c… i、j均为常数。

3. Matlab求解三元二次方程组代码Matlab可以通过使用matrix求解三元二次方程组。

以下是Matlab中求解三元二次方程组的代码:% 输入三元二次方程组的系数矩阵和常数向量A = [a d f; d b e; f e c];B = [g; h; i];% 通过matrix解法求解三元二次方程组X = linsolve(A, B);% 输出解向量fprintf('x = %g, y = %g, z = %g\n',X);4. Matlab的求解结果讨论通过上述代码,Matlab可以求解出三元二次方程组的解向量X。

这个解向量代表了一组使原方程组成立的x、y、z三元组。

如果X不存在或者多组解,则需要通过人工进行进一步的求解和讨论,以此确定方程组的解。

5. 结束语以上就是关于Matlab求解三元二次方程组的简要介绍和讨论。

其中,使用Matlab求解三元二次方程组是一件非常方便和实用的工具,对于进行科学计算的人员和研究者是非常有帮助的。

因此,我们需要熟练掌握该工具的使用方法,并且不断进行学习和实践,以便更好地应用于我们自己的工作中。

运用MATLAB解三、四次多项式

运用MATLAB解三、四次多项式

MATLAB解多项式用MATLAB解多项式以三次、四次为例;运用MATLAB解三、四次多项式,下面以一组数据来演示:例如,以下数据是某产品从1978年到2010年销售情况,是预测以后几年的销售情况?首先,用MATLAB画图,程序如下:x=1:33;y=[566 632 745 755 769 789 985 1110 1313 1428 1782 1920 2150 2292 2601 3149 4338 5145 5809 6241 6854 7656 8772 10007 11374 12567 14332 16614 19228 22844 26404 29688 32074];plot(x,y)画出的图形如下图:近似符合多项式,用多项式进行拟合。

用三次多项式进行拟合:设三次多项式为y=a0+a1*x+a2*x^2+a3*x^3,用最小二乘法求解多项式系数,程序如下:format longx=1:33;sumx1=sum(x(1,:)); %x中的元素相加%b=x.*x; %x中各元素的平方% sumx2=sum(b(1,:)); %x中各元素的平方相加% c=b.*x; %x中各元素的三次方% sumx3=sum(c(1,:)); %x中各元素的三次方相加%d=b.*b; %x中各元素的四次方% sumx4=sum(d(1,:)); %x中各元素的四次方相加% e=d.*x; %x中各元素的五次方% sumx5=sum(e(1,:)); %x中各元素的五次方相加% f=c.*c; %x中各元素的六次方% sumx6=sum(f(1,:)); %x中各元素的六次方相加% A=[33 sumx1 sumx2 sumx3;sumx1 sumx2 sumx3 sumx4;sumx2 sumx3 sumx4 sumx5;sumx3 sumx4 sumx5 sumx6];y=[566 632 745 755 769 789 985 1110 1313 1428 1782 1920 2150 2292 2601 3149 4338 5145 5809 6241 6854 7656 8772 10007 11374 12567 14332 16614 19228 22844 26404 29688 32074];sumy1=sum(y(1,:));i=x.*y;sumy2=sum(i(1,:));j=b.*y;sumy3=sum(j(1,:));k=c.*y;sumy4=sum(k(1,:));Y=[sumy1 sumy2 sumy3 sumy4]';B=inv(A)*YB =1.0e+002 *-5.555498533719225.33146148904227-0.500161393002780.01934485988921即a0=-555.549853371922a1= 533.146148904227a2=-50.016139300278a3=1.934485988921计算误差,程序如下:format longx=1:33;a=-555.549853371922+533.146148904227.*x-50.016139300278.*x.^2+ 1.934485988921.*x.^3;y=[566 632 745 755 769 789 985 1110 1313 1428 1782 1920 2150 2292 2601 3149 4338 5145 5809 6241 6854 7656 8772 10007 11374 12567 14332 16614 19228 22844 26404 29688 32074];b=a-y;c=abs(b)./y;d=sum(c(1,:))/32d = 0.16981183704177 误差较大。

matlab解三角方程

matlab解三角方程

在MATLAB中解三角方程,你可以使用内置的函数`solve`。

假设你有一个一元二次方程,形式为a*sin(x)^2 + b*sin(x) + c = 0,你可以使用以下的代码片段:
```matlab
% 定义参数
a = 1;
b = 0;
c = -1;
% 使用solve解方程
x = solve(a*sin(x)^2 + b*sin(x) + c, x);
```
注意,MATLAB的`solve`函数可以解决形如`f(x) = 0`的方程,其中`f(x)`是表达式,而`x`是未知数。

因此,你需要将sin(x)视为一个整体,即未知数。

此外,由于sin(x)的复杂性,结果将包含一些特殊的函数,如反正弦函数。

如果你有一个更复杂的三角方程,例如多变量的三角方程组,你可能需要使用更复杂的数值方法(例如牛顿法、雅可比法等)来解决它。

对于这种情况,你可能需要写一个自定义的函数或者使用像
`ode45`这样的函数来解决常微分方程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MATLAB解三次方程
一、介绍
三次方程是指其中的未知数的最高次数为3的方程。

解三次方程是一种在数学和工程领域中常见的问题,可以通过使用数值方法或符号计算的方法进行求解。

在MATLAB中,我们可以利用其强大的数值计算和符号计算功能来解决三次方程,得到方程的实数和复数解。

二、数值方法解三次方程
数值方法是一种通过迭代计算的方式,逼近方程的解。

对于三次方程,我们可以使用牛顿迭代法或二分法等常见的数值方法进行求解。

2.1 牛顿迭代法
牛顿迭代法是一种通过不断逼近函数的根的方法。

对于三次方程通过牛顿迭代法解的过程大致如下:
1.首先,我们需要找到一个初始的近似解。

2.然后,我们使用近似解来计算方程的导数。

3.接下来,利用计算得到的导数和近似解来进行迭代计算,直到满足特定的收
敛条件为止。

这样,通过牛顿迭代法,我们可以不断逼近方程的解。

2.2 二分法
二分法是一种通过将函数的自变量的范围不断缩小的方法,逼近函数的根。

对于三次方程通过二分法解的过程大致如下:
1.首先,我们需要找到一个函数的自变量的初始区间,使得方程在该区间内的
函数值有异号。

2.然后,我们不断将初始区间一分为二,并确定函数在新的区间内的函数值。

3.我们只保留使函数值有异号的那一半区间,并继续重复上述步骤,直到满足
特定的收敛条件为止。

这样,通过二分法,我们可以逐步缩小方程的解所在的范围。

三、符号计算解三次方程
符号计算是一种利用计算机进行代数运算的方法。

在MATLAB中,我们可以使用符号计算工具箱来求解三次方程的解,得到方程的符号解。

3.1 符号计算工具箱
MATLAB的符号计算工具箱提供了一系列用于进行代数运算的函数。

通过使用这些函数,我们可以将方程表示为符号变量,进行各种代数运算,从而求解方程的符号解。

3.2 求解符号解
在MATLAB中,我们可以使用solve函数来求解方程的符号解。

例如,对于三次方程a x^3 + b x^2 + c*x + d = 0,我们可以使用以下代码来求解:
syms x a b c d
equation = a*x^3 + b*x^2 + c*x + d == 0;
solutions = solve(equation, x);
这样,我们就可以得到方程的符号解。

四、总结
MATLAB提供了数值方法和符号计算两种方式来解三次方程。

数值方法通过迭代计算逼近方程的解,而符号计算则通过代数运算求解方程的符号解。

使用MATLAB解三次方程,能够得到方程的实数和复数解,进而对实际问题进行分析和计算。

在实际应用中,我们需要根据问题的性质和求解要求选择合适的方法进行求解。

数值方法通常更加简单和直接,适用于计算机处理大量数据的情况;而符号计算则可以得到解的符号形式,适用于需要进一步分析和推导的情况。

综上所述,MATLAB提供了强大的功能来解三次方程,无论是数值方法还是符号计算,都能够满足不同的求解需求。

在实际应用中,我们可以根据具体情况选择合适的方法,并结合MATLAB的其他功能进行更深入的分析和计算。

相关文档
最新文档