使用Newton-Raphson技术有两件事情不太正确……但肯定可以修复!在我们修复此问题后,您无需提到VPA错误.

错误#1 – 迭代更新

第一个是迭代本身.回想一下Newton-Raphson技术的定义:

对于下一次迭代,您使用上一次迭代的值.你正在做的是使用循环计数器并将其代入你的f(x),这是不正确的.它必须是前一次迭代的值.

错误#2 – 将符号值与数值混合

如果你看看你如何编写函数,你可以象征性地定义函数,但是你试图将数值替换为函数.遗憾的是,这并不适用于MATLAB.如果你真的想要替换值,你必须使用subs.这将替换你的实际值作为x的函数或你的函数使用的任何自变量.执行此操作后,您的值仍然是sym类型.您需要将其转换为double,以便能够以数字方式使用它.

同样为了提高效率,不需要制作数组.只需将此值设置为在每次迭代时更新自身.说到这一切,您的代码将更新为这样.请注意,我在循环之前采用了函数的导数,以减少需要采取的计算量.我还将Newton-Raphson迭代的分子和分母术语分开,以使事情变得清晰,并使其更适合潜艇.无需再费周折:

function r = mynewton(f,a,n)

syms x;

z = f(x);

diffZ = diff(z); %// Edit - Include derivative

y = a; %// Initial root

for idx = 1 : n

numZ = subs(z,x,y); %// Numerator - Substitute f(x) for f(y)

denZ = subs(diffZ,x,y); %// Denominator - Substitute for f'(x) for f'(y)

y = y - double(numZ)/double(denZ); %// Update - Cast to double to get the numerical value

end

r = y; %// Send to output

end

请注意,我在循环中用idx替换了i.原因是因为实际上不建议使用i或j作为循环索引,因为这些字母保留用于表示复数.如果您在Shai之前查看这篇文章,您会发现将这些变量用作循环索引实际上更慢:Using i and j as variables in Matlab

在任何情况下,为了测试它,假设我们的函数是y = sin(x),我的初始根是x0 = 2,有5次迭代,我们这样做:

f = @(x) sin(x);

r = mynewton(f, 2, 5)

r =

3.1416

这与我们对sin(x)的知识一致,因为sin(x)的截距位于pi的整数倍. x0 = 2位于pi附近,所以这确实像我们预期的那样工作.

给你一点奖励

您的原始代码在y中的每次迭代中都存储了根的值.如果你真的想这样做,你将不得不修改你的代码,使它看起来像这样.请记住,我预先分配了y以提高效率:

function r = mynewton(f,a,n)

syms x;

z = f(x);

diffZ = diff(z);

y = zeros(1,n+1); %// Pre-allocate output array

y(1) = a; %// First entry is the initial root

for idx = 1 : n

numZ = subs(z,x,y(idx)); %// Remember to use PREVIOUS guess for next guess

denZ = subs(diffZ,x,y(idx));

y(idx+1) = y(idx) - double(numZ)/double(denZ); %// Place next guess in right spot

end

r = y; %// Send to output

end

通过使用与上面完全相同的参数运行此代码,我们得到:

f = @(x) sin(x);

r = mynewton(f, 2, 5)

r =

2.0000 4.1850 2.4679 3.2662 3.1409 3.1416

r中的每个值都会告诉您在该特定迭代中对根的猜测.数组的第一个元素是初始猜测(当然).接下来的值是Newton-Raphson根的每次迭代的猜测.请注意,数组的最后一个元素是我们的最后一次迭代,大致等于pi.

matlab如何编newton-raphson,Matlab中的Newton-Raphson方法相关推荐

  1. c 与matlab混编,C与MATLAB混合编程之调用MATLAB引擎

    Visual Studio调用MATLAB需要的配置已经在<Visual Studio调用MATLAB的配置>一文中给出了详细的步骤,本文将介绍混合编程的示例. 在C中调用MATLAB,据 ...

  2. 噪点检测matlab,基于噪点检测的中值滤波图像去噪方法

    摘  要: 图像去噪是图像处理中一个非常重要的环节.针对传统中值滤波方法存在的不足,提出一种新的基于噪点检测的自适应中值滤波图像去噪方法.该方法通过自适应地改变滤波窗口的大小,局部检测并判断极值点是否 ...

  3. QT matlab 混编-qt调用matlab生成dll

    前言 环境: win10 Qt5.12 mingW(64位) matlab2019a(64位)----mingw w64 主要参考的文章:1. https://blog.csdn.net/Justic ...

  4. c语言matlab混编max函数,Matlab与C++混编 – engin.h

    #include #include #include "engine.h" using namespace std; void main() { Engine *ep; //定义M ...

  5. 【语音编码】基于matlab ADPCM编解码(Matlab代码实现)

  6. java中的方法在哪里_Java中的本机方法是什么,应在哪里使用?

    小编典典 Java中的本机方法是什么,应在哪里使用? 一旦看到一个小例子,就很清楚了: Main.java : public class Main { public native int intMet ...

  7. 解决了java+matlab混编+web(jsp)调用Matlab,网页中显示Figure,详细实例

    例子简介 网上java+matlab混编的挺多,大多数实例也都能实现出来,但是将matlab生成出来Figure显示在jsp页面中并配合WebFigure实现的例子却很少,所以我将自己的尝试结果详细的 ...

  8. m 文件 dll matlab 中调用_Java与MatLab混编

    该篇介绍Java与MatLab的混合编程 环境:Windows10,Jdk 1.8.0_261 64位,MatLab r2018b 64位 先安装MatLab MatLab安装 一.打开MatLab, ...

  9. matlab振动频谱分析是不是要,VB和Matlab混编实现振动信号的频谱分析

    VB和Matlab混编实现振动信号的频谱分析 3 0 物理测试 2 O O 4年第 2期 V B和 Ma t l a b混编实现振动信号的频谱分析 谭轶平, 王振清 ( 北京航空航天大学材料学院,北京 ...

  10. 码长6075的qc-ldpc编译码的MATLAB误码率仿真

    1.算法简介 为满足高的数据需求,提出一种新的QC-LDPC码.该校验矩阵的校验部分为近似下三角结构,上对角线下面的非零元素可以任意放置,因此是一种半确定的结构.这种结构的码设计灵活,性能也极高.通过 ...

最新文章

  1. UIScrollView offset in UINavigationController
  2. debian安装emacs23
  3. arduino 温度调节器_多点测平均温度实现智能控制(arduino-ds18b20)
  4. Kernel Method的理解
  5. 山西地区领取2020年下、2021年上半年证书
  6. mxnet基础到提高(51)-Activation激活函数
  7. 虚拟机硬盘启动计算机后黑屏,高手亲自教告诉你win7虚拟机启动后黑屏的操作方案...
  8. spring事务管理之事务回滚的处理
  9. 通用usb集线器驱动_多口充电、高速传输——ORICO晶锐系列7口集线器测评
  10. java实现考勤机信息同步
  11. wdcp支持两种安装方式
  12. C# 操作线程的通用类[测试通过]
  13. appium装上开始干嘛
  14. 函数体中的return以及函数的解的二分法
  15. 又一个程序员在工位上倒下了!
  16. qt高级编程附源码_c++ gui qt4编程附源码
  17. PCB加工文件—Gerber文件的导出(转载)
  18. 【算法基础三】算法如何入门?零基础入门算法应该学些什么?
  19. jsp里照片放在哪里_2020年初级会计报名照片怎么上传?
  20. 使用reg文件修改注册表

热门文章

  1. 红帽Linux自带的光盘刻录,linux下mkisofs制作光盘映像cdrecord刻录光盘
  2. selenium.webdriver网页无法正常打开的问题
  3. 宁录哨兵机器人_当天启碰上哨兵机器人孰强孰弱?这部漫画给出了答案!
  4. lilo是什么意思_Lilo
  5. 微软蓝牙鼠标3600拆解
  6. 物理化学第6版笔记和课后答案(天津大学)
  7. 微信登录服务器提示异地登录异常,最近QQ微信被异地登录怎么回事 收到微信异地登录的信息怎么办...
  8. cmf php,php cmf
  9. linux下解压iso文件
  10. NOIp模拟赛 巨神兵(状压DP 容斥)