本项目根据《数值分析》课程相关知识,通过运用C++,Qt等工具,演示用五种迭代方法解方程及图示过程。
本项目将制作一个小程序,用户可以输入其需要的目标函数(仅支持含x的加、减、乘、除、幂运算,和e^x相关运算)、希望进行迭代的等价形式、进行迭代的初值x0及弦截法需要的x1,选择五中迭代法其一,得到函数图像,并通过单击按钮控制迭代过程,画出迭代过程点及输出中间值。
本项目意在形象理解课程内容,并提高工程能力。考虑到期待通过本实验学习知识:
.
├── build //Linux和Windows下的编译中间文件和可执行程序
│ ├── linux //除了Iterator外,其余均是编译链接过程产生文件,可以忽略
│ │ └── Iterator //Linux下的可执行文件,可在装有Qt5.9.2以上版本的Linux系统下运行
│ └── windows //除了Debug文件夹中内容,其余均是编译链接过程产生文件,可以忽略
│ └── Debug //添加了Windows下运行该程序需要的Qt库和平台文件,因而可以在无Qt的Windows系统运行
│ ├── Iterator.exe //Windows下的可执行文件,可以直接运行
│ ├── Iterator.ilk
│ ├── Iterator.pdb
│ ├── platforms
│ ├── Qt5Cored.dll
│ ├── Qt5Guid.dll
│ └── Qt5Widgetsd.dll
├── documents //工程相关文档,分为.markdown和.pdf格式,便于阅读
│ ├── md
│ │ ├── 代码规范.md
│ │ ├── 用户手册.md
│ │ └── 设计报告.md
│ └── pdf
│ ├── 代码规范.pdf
│ ├── 用户手册.pdf
│ └── 设计报告.pdf
├── library
│ ├── CMakeLists.txt //CMake文档,用于生成Windows下的.sln工程和Linux下的makefile
│ ├── IteratorFunction //迭代函数类,内涵读取表达式并计算代码及五种迭代法底层代码
│ │ ├── Aitken.cpp
│ │ ├── Aitken.h
│ │ ├── IteratorFunction.cpp
│ │ ├── IteratorFunction.h
│ │ ├── NewtonDownhill.cpp
│ │ ├── NewtonDownhill.h
│ │ ├── NewtonOriginal.cpp
│ │ ├── NewtonOriginal.h
│ │ ├── OnePoint.cpp
│ │ ├── OnePoint.h
│ │ ├── TwoPoint.cpp
│ │ └── TwoPoint.h
│ ├── IteratorWidget //窗口类,实现前后端交互
│ │ ├── IteratorWidget.cpp
│ │ └── IteratorWidget.h
│ └── main.cpp //主函数
├── pictures //工程相关图示,分为.drawio格式和.png格式
│ ├── drawio
│ │ ├── 时序图.drawio
│ │ ├── 模块划分.drawio
│ │ ├── 流程图.drawio
│ │ ├── 界面设计.drawio
│ │ └── 类图.drawio
│ └── png
│ ├── 时序图.png
│ ├── 模块划分.png
│ ├── 流程图.png
│ ├── 界面设计.png
│ └── 类图.png
├── README.md //仓库说明,实际上是设计报告,便于在github上阅读
├── 设计报告.pdf //设计报告,放在最外层便于用户直接阅读
└── 演示视频.mp4 //演示视频
本实验采用:
为不同的运算符号赋以不同的权值,根据算符优先算法确定进栈还是运算,即:
将表达式计算结果进入队列,绘制图像时逐步出队并绘制。
为了能看到迭代过程,初值点应当放在图像正中间。那么为了清楚看到迭代过程,就画初值左右各一格的函数图像还是比较合适的。另外,为了适应不同的图像,可以设置调节图像的放大倍率。
每单击一次next,调用一次对应的迭代函数,输出对应的点和结果。迭代满足精度要求时,输出“迭代成功!”
尽管这是一个很简单的实现,最终我的收获却远比想象中的要大。通过本项目,我不仅学习和巩固了在系统概述中提到的基础知识和技能,还提高了配置环境、遇到问题并独立解决问题的能力。
设计过程中遇到并解决的问题:
原文:https://www.cnblogs.com/fighterkaka22/p/14047756.html