Math 求方程解的简便方法

Math 求方程解的简便方法,math,matlab,equation-solving,Math,Matlab,Equation Solving,我有以下等式: f(N): N = ((1+lam)^3 )/ ((1-lam)*(1+lam^2)); 我需要为指定的N创建一个查找lam的函数 现在,我正在使用简单循环: lam = 0.9999; n = f(lam); pow = 0; delta = 0.1; while(abs(N - n)) > 0.1 & pow < 10000) lam = lam - 0.001; n = f(lam) pow = pow+1; end lam

我有以下等式:

f(N):  N = ((1+lam)^3 )/ ((1-lam)*(1+lam^2));
我需要为指定的
N
创建一个查找
lam
的函数

现在,我正在使用简单循环:

lam = 0.9999;
n = f(lam);
pow = 0;
delta = 0.1;
while(abs(N - n)) > 0.1 & pow < 10000)
    lam = lam - 0.001;
    n = f(lam)
    pow = pow+1;
end
lam=0.9999;
n=f(lam);
功率=0;
δ=0.1;
而(abs(N-N))>0.1和功率<10000)
lam=lam-0.001;
n=f(林)
功率=功率+1;
终止

如何在不使用循环的情况下更精确地求解它

将方程重新排列为
0=f(x)/g(x)
(其中
f
g
是多项式)。然后求解
0=f(x)
。这应该很容易,因为
f
将是立方()。事实上,Matlab有
root()
函数来实现这一点。

将方程重新排列为
0=f(x)/g(x)
(其中
f
g
是多项式)。然后求解
0=f(x)
。这应该很容易,因为
f
将是立方()。事实上,Matlab有
root()函数来实现这一点。

如果有的话

N = ((1+lam)^3 )/ ((1-lam)*(1+lam^2))
那你知道吗

(1+lam)^3 = N*(1-lam)*(1+lam^2)
假设你要扩展这些术语?合并成一个简单的三次方程,实际系数等于零?有没有一个函数可以帮你解决这个问题

答案是肯定的。一种解决方案可能是使用fzero,但由于方程只是一个三次多项式,除非需要符号解,否则根就是答案。使用符号工具箱解决符号问题。

如果有

N = ((1+lam)^3 )/ ((1-lam)*(1+lam^2))
那你知道吗

(1+lam)^3 = N*(1-lam)*(1+lam^2)
假设你要扩展这些术语?合并成一个简单的三次方程,实际系数等于零?有没有一个函数可以帮你解决这个问题


答案是肯定的。一种解决方案可能是使用fzero,但由于方程只是一个三次多项式,除非需要符号解,否则根就是答案。使用符号工具箱解决符号问题。

以下是Wolfram Alpha针对N=10的解决方案:

http://www.wolframalpha.com/input/?i=(1%2Bx^3)/((1-x)*(1%2Bx^2))%3D10

代数解决方案将适用于您的特定情况,因为它并不十分困难。问题是,一般来说,非线性方程需要一个迭代解:从猜测开始,朝着一个特定的方向前进,并有望收敛到一个解。如果不进行迭代和循环,通常无法求解非线性方程组。

以下是Wolfram Alpha针对N=10的解决方案:

http://www.wolframalpha.com/input/?i=(1%2Bx^3)/((1-x)*(1%2Bx^2))%3D10

代数解决方案将适用于您的特定情况,因为它并不十分困难。问题是,一般来说,非线性方程需要一个迭代解:从猜测开始,朝着一个特定的方向前进,并有望收敛到一个解。在没有迭代和循环的情况下,一般不能求解非线性方程组。

< P>图解表明,对于n个正的,区间[-1,1 ]中正好有一个解。你应该考虑,它会较快收敛于零初始猜测。

图解表明,对于n个正的,区间中正好有一个解。[-1,1 ]。你应该考虑,它会较快收敛到零初始猜测。

< P>你的问题有代数解,N. Here的大部分值是解,如: 是的,很难看


如果你有一个精确的代数解,即使是像这样一个丑陋的大代数解,也总是优于数值解。正如达菲莫所指出的,用数值方法解决问题需要迭代(所以很慢),解算器可能会陷入局部极小值。

对于N的大多数值,您的问题有一个代数解决方案。以下是解决方案,如下所示:

是的,很难看


如果你有一个精确的代数解,即使是像这样一个丑陋的大代数解,也总是优于数值解。正如达菲莫所指出的,用数值方法解决问题需要迭代(所以很慢),解算器可能陷入局部极小。

你可以用封闭形式解这个方程,正如其他答案中所讨论的,但老实说,阶数>2的多项式的封闭形式解在实践中不是很有用,因为结果往往条件较差

对于你的特殊多项式,我同意Alexandre的观点,牛顿的方法可能是可行的


但从长远来看,我强烈建议编写(或从互联网上重用)Jenkins-Traub根查找算法的实现。Wikipedia将其描述为“实际上是黑盒多项式根查找器的标准。”它们并不夸张。多年来,它满足了我所有的多项式求解需求;根据我的经验,它比牛顿的方法更稳健(不依赖于良好的初始猜测)和基于特征值的方法,并且启动速度非常快。

你可以用封闭形式求解这个方程,正如其他答案中所讨论的,但老实说,阶数>2的多项式的封闭形式解在实践中不是很有用,因为结果往往条件较差

对于你的特殊多项式,我同意Alexandre的观点,牛顿的方法可能是可行的


但从长远来看,我强烈建议编写(或从互联网上重用)Jenkins-Traub根查找算法的实现。Wikipedia将其描述为“实际上是黑盒多项式根查找器的标准。”它们并不夸张。多年来,它满足了我所有的多项式求解需求;根据我的经验,它比牛顿法(不依赖于良好的初始猜测)和基于特征值的方法更稳健,而且启动速度相当快。

或者只是将方程放入最大值(免费)然后让它来解lam。谢谢,
fzero
做得很好:)或者把方程放在最大值(免费)然后让它为lam求解。谢谢,
fzero
做得很好:)我打赌10美元,牛顿的方法加上精心选择的初始猜测比这快。我会非常惊讶,因为这虽然很难看,但相对有效。但我很乐意