·前言

在上一篇文章中,我们学习了

  1. 在matlab中对外输出
  2. 格式化字符串
  3. 在文件中编写
  4. 调整matlab的字符编码格式
  5. 编写代码时的一些小提示

本讲开始

计算一元二次方程

这一讲我们以科学计算开始,使用matlab计算精确度很高,我们可以尝试来计算一下黄金分割率(定义大家可以自行百度一下,这里就不再说了):

计算黄金分割率的公式是:

如果使用加法,得到的是1.618........,如果使用减法,得到的是0.618........,这两个结果都是正确的。因为他们两个只相差1.

首先,我们把这个公式转化一下,把根号去掉,转化为一个一元二次方程:

 (因为+号时无解,所以舍去)

然后我们就只需要使用matlab解开这个方程了!

clear;
clc;
%% 本程序求解黄金分割率的比值
% r^2 - r - 1 = 0的解就是比值。
p = [1 -1 -1];
% 此数组代表了上式的二次项系数、一次项系数和常数项。
r = roots(p);
print_str = sprintf('r^2 - r - 1 = 0的结果是:%f和%f\n', r);
disp(print_str);

可以看到结果如下:

可以看到,这两个数就是我们需要的结果了。

当然,如果我们实现不知道各个系数,只知道我们的公式(假设),我们可以使用solve函数来计算,可以大大节省我们的时间:

%% 第二种计算的方法。
clear;
clc;
r2 = solve('r^2 - r - 1 = 0');
print_str = sprintf('r*r - r - 1 = 0的结果是:%f和%f\n', r2);
disp(print_str);

同样也能得到我们想要的结果,但同时注意:占位符是 %f 千万不能写成其他的。

但是你可能觉得这个精确度不高,没问题,使用 vpa 方法可以提高精确度到很多位!!

第一个参数是我们的数据,第二个参数是我们精确到小数点后的位数。可以得到很多位的结果(好像理论是无限,但是前提是电脑的CPU够厉害并且你有足够的耐心并且你的内存够大!!在我的电脑上,计算到小数点后五万位已经有明显的一秒左右延迟了。)

PS: 关于版本适配的问题,感谢朋友sky1023指出了一点版本不同,solve()函数在2018版用法见图片,我教程里使用的是matlab2016R的版本。

看一元方程的图形

上面我们计算了这个方程,大家知道,在数学中,一元二次方程的表现是开口向上或者向下的抛物线,方程的解就是与X轴的交点(即零点)。

那么如何在matlab中表现呢?下面上代码!

%% 显示函数的图像
f = inline( 'x^2 - x - 1');  % 写出我们的函数
% 但是这个inline马上就不能用了,但是只是前期学习,不要介意
ezplot(f, -4, 4);   %显示我们的函数图形,
hold on;

运行我们就能得到我们想要的东西:

大家可以看到,在 x = 0 的水平线处有我们的两个x的值。

有个小疑问?

加入我们写成另一个形式呢(1/x - (x - 1))?很容易知道,这俩图像虽然图形不一样,但是也是黄金分割率公式的变形,只需移项消元即可得到这个形式,很明显,这个世子有个点是不存在的(点0,不能为分母),这个公式的图形也明显类似于反比例函数(在点0处的间断点是第二类间断点,0+0处是正无穷大,0-0处是负无穷大)。

这个没问题!matlab会计算我们需要的函数图形,有间断点会计算极限,尽可能的满足我们(这次我们在代码里标出这个解的位置),代码如下:

%% 第二种形式
f = inline('1/x - (x - 1)');  % 写出我们的函数
ezplot(f, -2, 2);
zeor1 = fzero(f, 1);  % 找第一个函数零点,在x=1附近
zero2 = fzero(f, -1); % 找第二个函数零点,在x=-1附近
hold on;
plot(zeor1, 0, 'o'); % 在第一个零点出画一个字母o
plot(zero2, 0, 'o'); % 在第一个零点出画一个字母o

而图形,如同我们预期,显示出了一个双曲线,并且在零点处标出了我们的符号:

小彩蛋:

计算 sinx/x 的0处的比值。我们知道,当x->0的时候,sinx 和x是等价无穷小,比值是1,那么,我们看一下图形把!

那么这个图形的函数,大家自己解决哦!!

今日总结

我们今天学习了如下知识点:

  1. 使用roots函数求一元二次方程的根。
  2. 使用solve函数求方程的根(注意哦,没说是几次的。大家可以试试三次函数等,甚至没实数根的大家也可以试试,我们要从认识得到实践,然后再根据实践得到新的认识!)
  3. 使用inline函数和ezplot函数一起绘制函数图形(小技巧:ezplot音似:easy plot,简单绘制,方便我们记忆)
  4. 使用 fzero 函数和 plot 函数绘制某一点处的零点。

今天到这里了!谢谢大家观看。希望我们一起进步!

MATLAB使用教程(三)——慢慢练手做项目啦——新手来看相关推荐

  1. MATLAB使用教程(二)——在文件中编程——新手来看

    ·前言 在上一篇文章中,我们学习了 如何调整自己的工作区 使用matlab时的注意事项,比如不能按CTRL+Q 语句后面加分号,不是交互式,不加分号,会同时打印结果,即交互式. 字符串使用单引号才可以 ...

  2. springboot+vue练手级项目,真实的在线博客系统

    文章目录 spring boot 练手实战项目说明 基础知识 面试准备 1. 工程搭建 1.1 新建maven工程 1.1.2遇到的bug 1.2 配置 1.3 启动类 2. 首页-文章列表 2.1 ...

  3. 练手小项目(5)安全卫士_程序锁

    最近想做的小新工具箱,一直想做一个程序锁,其实原理,很简单,先注册一个服务,检测手机所有进程,如果发现被加锁的app启动,马上弹出一个输入程序锁界面,但是这样子bug很多.我先做一个基本后面慢慢把bu ...

  4. springboot+vue练手小项目[前台搭建+后台编写](非常详细)

    [ springboot+vue练手小项目 ] 技术栈: springboot+vue3+element-plus +Mybaties-plus+hutool +mysql8 项目介绍 :最近刚学了s ...

  5. 软件测试分享15个适合练手的项目【金融/银行/商城/电商/医药......】

    还愁没有练手的项目?我已经给你准备好了,需要评论区留下你的想法吧 1.引言 1.1 文档版本 版本 作者 审批 备注 V1.0 XXXX 创建测试方案文档 1.2 项目情况 项目名称 XXX 项目版本 ...

  6. html+css+js之20个练手小项目(一)

    html+css+js之20个练手小项目(一)--Hangman 前言 一.HTML 二.CSS 三.JS 前言 前端新手练习,记录不迷失. 主要练习html和CSS布局以及JS. 来源github, ...

  7. 练手小项目(2)-生活小助手--星座运势查询

    上一篇内容 练手小项目(2)-生活小助手 今天星期一.趁着中午的歇息时间把 第二个写出来 星座运势,近期看看极客学院 用聚合数据做了天气预报的视频教程,不好评价他.看他在后面的代码变更那么大,我就知道 ...

  8. C# Socket网络编程(附赠练手小项目)

    在公司花了两天的时间来研究Socket编程,感觉也还是学到了一点点皮毛,不过也还是有一点点的小成就. 配合Winform窗体界面,实现了简单的窗体间互相通信的小项目(可以互相发消息,服务器可以给客户端 ...

  9. go语言面向对象 练手小项目

    学习一门语言,最重要的就是动手,一个项目的代码写三遍,看起来笨的方法,实际上也是最快的方法. go语言的第一个练手小项目: 家庭收支记录软件的编写: 1.项目需求说明 模拟现实基于文本界面的<家 ...

  10. 13 个适合『中级开发者』练手的项目

    本文整理自『机器之心』 编辑 / sitin 本文将列出十三个适合中级 Python 开发人员练手的项目. Web 项目设计 1.内容聚合器(Content Aggregator) 1. 技术细节 该 ...

最新文章

  1. RDBMS即关系数据库管理系统(Relational Database Management System)
  2. (HDOJ 2034)人见人爱A-B
  3. 丢弃Git中的本地提交
  4. python 读取特定字符之间数据_python 搜索每一行特定字符串之间的数据,求高人帮忙写人程序...
  5. 如何保障MySQL主从复制关系的稳定性?关键词(新特性、crash-safe)
  6. HTML5 — 知识总结篇《VI》【路径的写法】
  7. 安装一台RHEL7虚拟机
  8. Cadence之双击(DSN/brd)文件打开变新建文件的解决方法
  9. 细胞亚器文章阅读ER-to-Plasma Membrane Tethering Proteins Regulate Cell Signaling and ER Morphology
  10. H.265及最新芯片模组技术现状和研究方向
  11. 基于TBSS的DTI数据处理流程
  12. LibGDX_2.1: LibGDX 应用框架(6 大系统交互接口)
  13. 看动画理解「链表」实现LRU缓存淘汰算法
  14. 教育知识与能力·中学
  15. MT6595发布会信息汇总
  16. 【TS】1010- 细数 10 个 TypeScript 奇怪的符号
  17. 计算机版的微信的功能是什么,赶紧更新你的PC版微信:这几项新功能你绝对想要...
  18. Skiplist(跳表)实现
  19. 概念整理ia32/x86/amd64/ia64/arm64
  20. 【Sqlite】sqlite安装与使用

热门文章

  1. 机器学习之朴素贝叶斯分类算法
  2. 第四天 轨道交通仿真入门
  3. 9、(九)外汇交易技术术语表
  4. 学习js的第十三天【事件的绑定方式,执行方式】
  5. 计算机文件夹加密文件,如何加密计算机文件夹4种加密文件夹的方法
  6. 十六进制表示法(二进制/十六进制/十进制之间的转换)
  7. 数据拟合(excel)
  8. 【雕爷学编程】Arduino动手做(59)---RS232转TTL串口模块
  9. 留学回国人员申办上海常住户口实施细则
  10. AXI协议中的BURST