MATLAB 牛顿非线性方程

计算科学 非线性方程 牛顿法
2021-12-11 13:27:39

我有以下非线性方程:

在此处输入图像描述

在哪里w0=0.25,w0=0.5,w0=0.75. 我必须证明如果k是根,那么也是k是一个根并且只存在一个k(0,1)root,但我的 MATLAB 代码没有返回任何解决方案。

使用 wolframalpha 我计算了 w0 的导数并获得,常数 w0=0.25=0.5=0.75 被忽略。

在此处输入图像描述

在 MATLAB 中,我有以下函数来计算非线性方程的根: 在此处输入图像描述

我的测试文件如下所示: 在此处输入图像描述

任何使我的代码功能化的想法都值得赞赏。

1个回答

您已经编写w1 = @(k) ((2*k)/(log((1+k)*(1-k))))-0.25;了,但您的原始函数意味着这应该w1 = @(k) ((2*k)/(log((1+k)/(1-k))))-0.25;与其他匿名函数类似。不同之处在于除法log而不是乘法。另请注意,此函数中存在奇点k={1,0,1}并且该函数在 [0,1] 范围之外是复数值,因此牛顿法将不是很可靠(尤其是因为根非常接近于±1)。使用包围方法(例如二等分或错误位置)可能会更好。

请注意,如果您的目标是“证明”如果k(0,1)是根,那么k是根,用数字求根根本不能证明。您实际上需要对方程执行一些(相对简单的)操作以显示关于k=0.