x1=[1;4]; y1=[0.01;0.8]; p=fittype('(1+a1*(x1-b1)^-2)^-1', 'independent','x1');%定义函数定义自变量 opt=fitoptions(p); opt.StartPoint=[0.1 0.1];%设置初始参数 f1=fit(x1,y1,p,opt)
x1=[1;4]; y1=[0.01;0.8]; p=fittype('(1+a1*(x1-b1)^-2)^-1', 'independent','x1');%定义函数定义自变量 opt=fitoptions(p); opt.StartPoint=[0.1 0.1];%设置初始参数 f1=fit(x1,y1,p,opt)
转载于:https://www.cnblogs.com/-wuyong/p/7207735.html
可能是版本的问题,我的2013a可以运行
result =
[ 0.667, 0.8]
result =
[ 1.0, 1.0]
result =
[ 1.33, 1.14]
result =
[ 3.41, -2.19]
[ 0.586, 1.04]
result =
[ 1.0, 1.0]
[ 3.0, -1.5]
result =
[ 2.0, 0]
result =
[ 0.539 - 8.73e-11*i, 1.2 + 1.16e-10*i]
[ - 2.21 + 3.9e-12*i, -10.6]
[ 1.68 + 3.59e-11*i, - 1.01 - 1.16e-10*i]
result =
[ 1.0, 1.0]
[ 1.3, 0.343]
[ -2.3, -11.7]
result =
[ -2.38, -12.7]
[ 1.19 - 0.509*i, 1.2 + 1.21*i]
[ 1.19 + 0.509*i, 1.2 - 1.21*i]
result =
[ 0.518, 1.27]
[ 1.36, -0.615]
[ - 0.941 - 1.4*i, - 3.76 + 5.72*i]
[ - 0.941 + 1.4*i, - 3.76 - 5.72*i]
result =
[ 1.0, 1.0]
[ - 1.0 - 1.41*i, - 4.0 + 7.07*i]
[ - 1.0 + 1.41*i, - 4.0 - 7.07*i]
result =
[ 1.05 + 0.396*i, 1.64 - 1.09*i]
[ 1.05 - 0.396*i, 1.64 + 1.09*i]
[ - 1.05 - 1.43*i, - 4.3 + 8.35*i]
[ - 1.05 + 1.43*i, - 4.3 - 8.35*i]
result =
[ 0.508, 1.3]
[ 1.24, -0.434]
[ -1.52, -19.4]
[ - 0.117 + 1.44*i, - 1.52 - 4.04*i]
[ - 0.117 - 1.44*i, - 1.52 + 4.04*i]
result =
[ 1.0, 1.0]
[ 0.888, 1.3]
[ -1.56, -21.9]
[ - 0.164 - 1.46*i, - 1.05 + 5.15*i]
[ - 0.164 + 1.46*i, - 1.05 - 5.15*i]
result =
[ -1.6, -24.1]
[ 1.0 + 0.324*i, 1.84 - 0.945*i]
[ - 0.204 - 1.49*i, - 0.647 + 6.27*i]
[ - 0.204 + 1.49*i, - 0.647 - 6.27*i]
[ 1.0 - 0.324*i, 1.84 + 0.945*i]
MATLAB求解方程
(1)roots函数
功能:用于求解多项式方程的根,以列矢量的形式返回多项式的根。
调用格式:r=roots(p),p是多项式系数按降幂排列所形成的向量。
示例:求方程3x2-2x-4=0的根。
代码:
p=[3,-2,-4];
r=roots(p);
方程的根为x1=1.5352,x2=-0.8685.
(2)solve函数
功能:用于求解方程的符号解。
调用格式:r=solve(eq,var),eq为待求解符号函数表达式;var为自变量。
[y1,...,yn,parameters,conditions]=solve(eq,vars,Name,value),eq为待求解符号函数表达式;var为自变量;Name属性主要有'ReturnConditions','IgnoreAnalyticConstraints','IgnoreProperties','MaxDegree','PrincipalValue','Real';value值有false和true,默认为false。
ReturnConditions:是否返回参数条件;ReturnConditions为真时,返回参数条件;value值有false和true,默认为false。
IgnoreAnalyticConstraints:方程的化简方法;value值有false和true,默认为false。
IgnoreProperties:返回与变量属性不一致的解;value值有false和true,默认为false。
MaxDegree:多项式方程的最高阶次;value默认值为2。
PrincipalValue:是否返回一个根;PrincipalValue为真时,仅返回一个根,如果方程无根,则返回一个空符号;PrincipalValue为假时,返回所有的根;value值有false和true,默认为false。
Real:是否仅返回实根;Real为真时,仅返回实根;value值有false和true,默认为false。
示例1:采用solve求解方程sinx=1的解。
代码1:
syms x
eq= sin(x) == 1;
r = solve(eqn,x)
示例2:采用solve求解方程sin(x) + cos(2*x) = 1的解
代码2:
syms x
eqn = sin(x) + cos(2*x) == 1;
solve(eqn, x, 'PrincipalValue', true)
solve(eqn, x, 'PrincipalValue', false)
PrincipalValue为真时,解为0;PrincipalValue为假时,解为0,π/6,5π/6;
示例3:求方程组
的解
代码3:[x,y,z]=solve('x+2*y-z=27','x+z=3','x^2+3*y^2=28','x','y','z')
注意:待求解变量大于2个时,声明的变量顺序就是solve返回解的顺序。
有单引号时,等号用“=”;无单引号时,等号用“==”
(3)fsolve函数
功能:用最二乘法求非线性方程的根。
调用格式:r=fsolve(eq,x0),eq为非线性方程,x0为初始值;用于求非线性方程eq在x0附近的近似解。
r=fsolve(eq,x0,options),eq为非线性方程,x0为初始值,options为优化选项,用optimoptions设置选项;用指定的优化选项解方程。
示例:求解方程
的解。
代码:
fun = @root2d;
x0 = [0,0];
x = fsolve(fun,x0)
单独定义方程为函数root2dfunction F=root2d(x)
F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;求得方程的根为x1=0.3532;x2=0.6061;
(4)fzero函数
功能:求非线性方程在给定值附近的根
调用格式:
r=fzero(eq,x0),eq为非线性方程,x0为初始值;用于求非线性方程eq在x0附近的近似解。
r=fzero(eq,x0,options),eq为非线性方程,x0为初始值,options为优化选项,用optimoptions设置选项;用指定的优化选项解方程。
示例:求解方程sinx=0在3附近的根
代码:
fun = @sin;
x0 = 3;
x = fzero(fun,x0)
求得方程的根为x=3.1416.
(5)linsolve函数
功能:求线性方程组的解
调用格式:r=linsolve(A,B),用于求解线性方程组Ax=B的解,B为列向量。
r=linsolve(A,B,opts)
示例:求线性方程
的解。
代码:
A=[1 2 -1; 1 0 1; 1 3 0];
B=[2;3;8];
X=linsolve(A,B);
饭可以一日不吃
觉可以一日不睡
书不可以一日不读
使用MATLAB求解方程求根——学习笔记
碎碎念:终于参加完了某比赛,连续大约摸了两天的鱼,就在昨天由于自己的操作失误,亲手将电脑给烧了,这就是上天在暗示我是时候加油为接下来的两场比赛和一个考试努力啦~下面浅谈一下MATLAB各种求解方程的根的方法。
求方程的根
法一:
求方程的全部根。
在MATLAB命令窗口输入:
p=[1,7,0,9,-20]; %建立多项式系数向量
x=roots(p) %求根法二:
使用solve函数:
s=solve(f,v):求方程关于指定自变量的解;
s=solve(f):求方程关于默认自变量的解。
其中 f可以是用字符串表示的方程,或符号表达式;若f 中不含等号,则表示解 方程 f=0。
解方程 x^3-3*x+1=0
>>syms x; f=x^3-3*x+1;
>>s=solve(f,x)
>>s=solve(‘x^3-3*x+1’,‘x’)
>>s=solve(‘x^3-3*x+1=0’,‘x’)
Solve函数还可以用来求解方程组!
solve(f1,f2,...,fN,v1,v2,...,vN)
求解由 f1,f2,...,fN 确定的方程组关于 v1, v2,...,vN 的解。
解方程组:
>>[x,y,z]=solve(‘x+2*y-z=27’,‘x+z=3’, ...
‘x^2+3*y^2=28’,‘x’,‘y’,‘z’)注意:输出变量的顺序要书写正确!
Solve在得不到解析解时,会给出数值解。
非线性方程组求解:
fzero(f,x0):求方程f=0在x0附近的根。
几点说明:
- 方程可能有多个根,但是fzero只能给出距离x0最近的一个根;
- 若x0是一个标量,则fzero先找出一个包含x0的区间,使得f在这个区间两个端点上的值异号,然后再在这个区间内寻找方程f=0的根;如果找不到这样的区间,则返回NaN。
- 若x0是一个2维向量,则表示在[x0(1),x0(2)]区间内求方程的根,此时必须满足f在这两个端点上的值异号。
- 由于fzero是根据函数是否船业横轴来决定零点。因此它无法确定函数曲线仅触及横轴但是不穿越的零点,如|sin(x)|的所有零点。
- 函数中的f是一个函数句柄,通过以下方式给出:
字符串形式:fzero(‘x^3-3*x+1’,2);
通过@调用的函数句柄:fzero(@sin,4);
- f不能用符号表达式!
线性方程组求解:
linsolve(A,b):解线性方程组
>> A=[1 2 –1; 1 0 1; 1 3 0];
>> b=[2;3;8];
>> X=linsolve(A,b)
注意这里的b是列向量。
求解方程函数小结
roots(p):多项式的所有零点,p是多项式系数向量。
fzero(f,x0):求f=0在x0附近的根,f是函数句柄,可以由字符串给出或使用@, 但不能是符号表达式!
solve(f,v):求方程关于指定自变量的解,f可以是用字符串表示的方程,或符号表 达式,若不含等号表示f=0;
也可解方程组(包含非线性);得不到解析解时,给出数值解。
linsolve(A,b):解线性方程组。