利用描点绘图法求解复杂函数
来源:互联网 发布:网络销售培训简介 编辑:程序博客网 时间:2024/05/18 01:06
假设有一个复杂函数(以一元为例),且是关于自变量的隐函数,即 f(x) = y 无法写出 x = g(y) 的表达式,那么就可以采用图像法求解。
需要用到的库为 numpy 和 matplotlib,在这里以 openSUSE 12.2 x64 为例:
sudo zypper in python-numpy python-matplotlib python-matplotlib-tk
其余 Linux 系统相似。Windows 系统需要去官方网站下载编译好的 exe 文件安装库。
范例代码:
#!usr/bin/env python# -*- coding: utf-8 -*-from __future__ import division#除法纠正import numpy as npimport matplotlib.pyplot as plt# 基本常数定义# 隐函数定义def f(x):y = f(x)return y# 定义自变量如何取值xx = np.arange(-1,1,0.1)def calc():#计算并绘图a,b = [],[]#建立绘制点的坐标列表for x in xx.tolist():#要将array对象转换成列表对象det = matrix(x)a.append(x)b.append(y)plt.plot(a,b)#绘制图形plt.show()#显示图形if __name__=='__main__':calc()
运行之后便可以得到曲线了:
左下角有移动、放大、保存图像等等选项,比较方便。
其实 plot 可以直接绘制函数图像,得到非常光滑的曲线,在曲线上取点所得的值也会准确很多;但这里之所以采用描点的方法,是出于对隐函数特殊情况的考虑,比如隐函数中有矩阵的计算的话,使用 numpy.linalg.det() 函数求矩阵的值,就对变量输入有着类型的要求,不能是数组,否则会产生诸如
ValueError: setting an array element with a sequence
这样的错误,我是觉得有点麻烦,而描点相对简单,更改自变量取值的步进长度就可以更改精度了,只要不是要求太精确的一般都可以满足需要。
至于二元函数 z = h(x,y),则同样可以通过绘制 3D 图像来求解。需要用到的是 mlab 这个库。具体可以 Google。
方法还有很多,numpy 和 matplotlib 的强大远远不止于此,但这一次课程设计,好像这样就比较够了。我感觉只要库强大,python 能做的是不输给 matlab 的。
- 利用描点绘图法求解复杂函数
- Quartz2D绘图之利用路径绘制复杂图形
- 利用Newton Raphson、最陡梯度法求解函数最小值
- 利用函数求解分段函数的值
- 使用“洋葱法”求解复杂指针
- 测试优化求解算法的一些简单绘图函数
- 利用绘图函数创建填充区
- 利用matplotlib中imshow()函数绘图
- 利用matplotlib中imshow()函数绘图
- 利用标准遗传算法求解函数
- MATLAB中利用牛顿法求解目标函数的局部最小值
- MATLAB中利用最速下降法求解多元函数的局部极小值
- 点扩散函数3D曲面绘图方法
- opencv基本绘图函数--点,线,矩形,圆等
- opencv基本绘图函数--点,线,矩形,圆等
- 分治法求解最近点对
- 分治法求解最近点距
- 分治法求解最近点对问题
- 分布式WEB服务器架构
- Phone重绘机制drawRect
- LTE note 2012.12.27
- Using Keyframes – WebKit CSS Animation Examples
- 真正的独立
- 利用描点绘图法求解复杂函数
- Tomcat不支持中文路径的解决办法
- TabStop 属性
- 二分算法
- 调用COM新建一个空白文档并加入链接
- fstream
- 一个不错的事件处理结构
- 多图详解 “Android UI”设计官方教程(一)
- tomcat6注册服务//