用自定义度计算matlab中的多项式

时间:2015-03-27 08:38:55

标签: matlab

我有一个等式:

5 + 6x + 7x ^ 1.5 + 4x ^ 2

我可以使用matlab计算x的根吗?

谢谢。

3 个答案:

答案 0 :(得分:3)

是的,您可以使用fzero - 只要该函数具有非虚构的根。要包含虚根,请参阅answer by @Daniel

fun = @(x)5+6*x+7*x.^1.5+4*x.^2;
oneRoot = fzero(fun,0); %# find a root starting to look at zero

但是,在进行任何类型的优化问题(如果可能)之前绘制函数通常是一个好主意,既可以识别良好的起始值,也可以查看是否存在不良意外,例如没有root,你的情况。

figure
ezplot(fun,[-10 10]) 

enter image description here

您会注意到没有x< 0的数据,因为您的函数会返回负输入参数的虚数值。此外,该功能似乎是严格肯定的,因此您找不到x的任何y==0

答案 1 :(得分:3)

对于数值解法,您必须使用fminsearch来查找虚构的根。

fun = @(x)5+6*x+7*x.^1.5+4*x.^2;
%objective function: fun2 is zero for roots and never negative, searching mins of fun2 for a solution
fun2=@(x)(abs(fun(x(1)+i*x(2))));
oneRoot = sum(fminsearch(fun2,[0,0])*[1,i]);

答案 2 :(得分:2)

syms x
eq=5 + 6*x + 7*x^(15/10) + 4*x^2;
sol=solve(eq,x);
vpa(sol,16)


- 0.3923580269955611 + 0.3897288587097241i
- 0.3923580269955611 - 0.3897288587097241i