非线性方程(一)

非线性方程(一)此为全书第一章,主matlab入门——通过学习各种插值法:反线性插值、牛顿法之类。1、diff>>diff('x^2')ans=-26-44>>dif

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

此为全书第一章,主matlab入门——通过学习各种插值法:反线性插值、牛顿法之类。

 

1、diff

>> diff('x^2')

ans =

   -26   -44


>> diff(x^2)
 
ans =
 
2*x

 书上用的是加引号那个版本的,以至于我困了好久。

 

2、牛顿法

 f(x) = (x*exp(x))/2 - 2*x^2 进行牛顿插值

>> x = 0: 0.05: 3;
>> y = 0.5*x.*exp(x) - 2*x.^2;
>> plot(x,y);grid

非线性方程(一)

 

牛顿插值实现

1 >> f =inline('(x*exp(x))/2 - 2*x^2');
2 >> fp = inline('exp(x)/2 - 4*x + (x*exp(x))/2');  %f的导数
3 >> x0 = 0.4;
4 >> x0 = x0 - f(x0)/fp(x0)
5 
6 x0 =
7 
8     0.3611

其中line 4为公式。

 

3、误差初探

关于有限精度的作用可以用解析方法进行研究,也是必须讨论的内容,但这里只研究其对割线法和有限差分牛顿法的影响。

考虑后一种算法。

example:

  首先将其写成拟牛顿法的形式,xk+1 = xk – f(xk)/sk ,
其中
 sk
 = (f(x
k
+h) – f(x
 
k
))/h;
现在用牛顿法近似f(x)在 x=1的导数。

>> x=1; h=0.1;
>> (log(x+h) - log(x))/h

ans =

    0.9531

对于0.1的步长,这个结果还算合理【书上原话= =

>> h=10.^(-(1:20))
>> (log(x+h) - log(x))./h

ans =

  Columns 1 through 5

    0.9531    0.9950    0.9995    1.0000    1.0000

  Columns 6 through 10

    1.0000    1.0000    1.0000    1.0000    1.0000

  Columns 11 through 15

    1.0000    1.0001    0.9992    0.9992    1.1102

  Columns 16 through 20

         0         0         0         0         0

>> plot(h, abs(ans-1), 'r'), grid

非线性方程(一)

 

有图可以看到,误差有一个时期是下降的,从大约h = 1E-12开始,误差又开始增加。

这里主要指出,当h很小时,上面的计算中有两个因素在作怪:一个是分子中两个接近相等的数之间的减法,另一个是用很小的数作除数。

产生这些原因在于计算机只能表示数字的有限多位。

附几段关于计算机精度代码

>> inf*2
ans =    Inf

>> inf -inf
ans =    NaN

>> eps
ans =    2.2204e-16


>> 1+eps
ans =    1.0000

>> 1+eps == 1
ans =    0



>> 1+eps/2
ans =      1

>> ans == 1
ans =     1



>> (1+eps/2) + eps/2
ans =    1

>> ans == 1
ans =    1



>> 1 + (eps/2 + eps/2)  %计算机加法不满足结合律
ans =    1.0000

>> ans == 1
ans =     0

>> x1= 0.1; x2= pi/2;
>> abs(sin(x1+err)- sin(x1))

ans =  9.9500e-11

>> abs(sin(x2+err)- sin(x2))

ans =  0

%在x接近(pi/2)【此时导数为0】时sin(x)的求值要比x接近于零时的求值更加精确,因为零点的导数为1.
%可以看到f的导数(变化速度)越大,误差也越大

>> err = 1e-6

err =    1.0000e-06

>> abs(sin(x1+err)- sin(x1))

ans =    9.9500e-07

>> abs(sin(x2+err)- sin(x2))

ans =    5.0004e-13

 

 

非线性方程(一)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167251.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle sql列转行_oracle 列转行

    oracle sql列转行_oracle 列转行业务中做报表,需要将一列列数据汇总成一行,然后汇总,如下:需要将每个产品进行汇总,通过ichartjs进行展示,图表中需要数据的顺序是:Java代码vardata=[{name:’产品1′,value:[145,192,198,180],color:’#dad81f’},{name:’产品2′,value:[135,210,180,210],color:’#1f7e92’…

    2022年6月29日
    25
  • 对xml文件头内容的理解xmlns xmlns:xsi xsi:schemaLocation

    对xml文件头内容的理解xmlns xmlns:xsi xsi:schemaLocation

    2021年7月19日
    71
  • windows下cmd查看端口占用情况[通俗易懂]

    windows下cmd查看端口占用情况[通俗易懂]查看端口占用情况进入cmd输入netstat-ano可以列出所有端口占用情况如果只是找特定端口号,输入netstat-ano|findstr“8082”,其中8082为端口号,对应PID为16040继续输入tasklist|findstr“16040”或者到任务管理器-进程查找…

    2022年5月19日
    48
  • Linux如何安装PHPMyAdmin

    Linux如何安装PHPMyAdmin1,我们要以root帐号登入。2,PHP支持模块安装。在CentOS操作系统安装完毕后,其实PHP支持模块并没有安装上去,如果想使用PhpMyAdmin,首先需要安装PHP支持模块,我们需要两个PHP支持模块:一,“PHPscriptinglanguageforcreatingdynamicwebsites”;二,“AmoduleforPHPapplicationsthat

    2022年5月7日
    37
  • 干货 | LIDAR、ToF相机、双目相机如何科学选择?「建议收藏」

    干货 | LIDAR、ToF相机、双目相机如何科学选择?「建议收藏」点击“计算机视觉life”关注,置顶更快接收消息!本文阅读时间约5分钟本文翻译自卡内基梅隆大学Chrisasteroid三维视觉技术的选择传感器参数及定义LIDAR&ToF相机&双目相机介绍工作原理优缺点采样数据比较测试及极端情况测试三维成像技术原理和应用想必大家在之前的文章中了解过啦,今天想给大家比较一下LIDAR、ToF相机…

    2022年5月26日
    55
  • Kali WPScan的使用(WordPress扫描工具)

    Kali WPScan的使用(WordPress扫描工具)一 WPScan 简介 WordPress 网站介绍 WordPress 是全球流行的博客网站 全球有上百万人使用它来搭建博客 他使用 PHP 脚本和 Mysql 数据库来搭建网站 Wordpress 作为三大建站模板之一 在全世界范围内有大量的用户 这也导致白帽子都会去跟踪 WordPress 的安全漏洞 Wordpress 自诞生起也出现了很多漏洞 Wordpress 还可以使用插件 主题 于

    2025年9月22日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号