爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8393|回复: 13

[混合编程] IDL编程学习资料

[复制链接]

新浪微博达人勋

发表于 2017-8-4 08:46:13 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 言深深 于 2017-8-4 11:30 编辑

IDL提供了一个函数COMPLEXROUND,(=conplex(复数)+round(四舍五入)),功能是对复数进行四舍五入,很好奇,复数怎么四舍五入,试了一下:
  X = [COMPLEX(1.245, 3.88), COMPLEX(9.1, 0.3345)]
  PRINT, COMPLEXROUND(X)
输出:
(      1.00000,      4.00000)(      9.00000,     0.000000)
原来只是把实部、虚部分开算罢了!

评分

参与人数 1金钱 +15 贡献 +5 收起 理由
言深深 + 15 + 5

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-8-4 09:15:37 | 显示全部楼层

IDL编程学习之对角矩阵生成与对角元素提取

对角矩阵:
飞鸽截图20170804091619.png
提取对角元素
a=indgen(4,4)
print,diag_matrix(a)
输出:0       5      10      15
生成对角矩阵
b=indgen(5)
print,diag_matrix(b)
输出:
       0       0       0       0       0
       0       1       0       0       0
       0       0       2       0       0
       0       0       0       3       0
       0       0       0       0       4
对角还可以偏移
b=indgen(5)
print,diag_matrix(b,1)(1表示向右移动一个单位)
输出:
       0       0       0       0       0       0
       0       0       1       0       0       0
       0       0       0       2      0       0
       0       0       0       0       3       0
       0       0       0       0       0       4
       0       0       0       0       0       0
如果向左移动2个单位:
b=indgen(5)
print,diag_matrix(b,-2)
输出:
       0       0       0       0       0       0       0
       0       0       0       0       0       0       0
       0       0       0       0       0       0       0
       0       1       0       0       0       0       0
       0       0       2       0       0       0       0
       0       0       0       3       0       0       0
       0       0       0       0       4       0       0
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-8-4 09:47:12 | 显示全部楼层

IDL编程学习之dist函数

The DIST function creates an array in which each array element value is proportional to its frequency(与频率正比). This array may be used for a variety of purposes, including frequency-domain filtering(频率域滤波).
这个函数经常被拿来举例,也不知为什么一直是二维的返回值?元素是怎么生成的?
可能以后看了滤波才明白吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-8-4 09:49:40 | 显示全部楼层
提取复数虚部:
imaginary()
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-8-4 10:14:44 | 显示全部楼层

IDL编程学习之ishft

一开始看到位运算,感觉很困惑,怎么退回到比特层面计算了,是不是有点原始?
后来我想着,可能位运算可以提高运算效率吧?
B = ISHFT([1,2,3,4,5], 3)
The resulting array B is [8, 16, 24, 32, 40].
1是0001,向左3位,则是0100=8
2=0010,向左3位,10000=16
3=0011,向左3位,11000=24
4=0100,向左3位,100000=32
5=0101,向左3位,101000=32+8=40
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-8-4 11:06:12 | 显示全部楼层

IDL编程学习之Lee滤波

Lee滤波是什么?
从网上的资料看,Lee滤波用于一维向量效果好,至于它的原理,我是不想推导了---手工计算谁都知道是完全不必要的,推导算法似乎也是没必要,因为无数的专业大神已经做好了各种工具,直接用工具即可,我不需要推导原理,就好像我使用计算机不需要研究底层指令一样。
QQ截图20170804103635.png
QQ截图20170804103750.png
QQ截图20170804103951.png
我试了下过滤一个向量:
a=randomn(s,50)
fig=plot(a,color='b')
b=leefilt(a)
fig=plot(b,color='r',/overplot)
结果(哎哟不错哟):
QQ截图20170804111029.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-8-4 11:26:37 | 显示全部楼层

IDL编程学习之矩阵乘方

QQ截图20170804113443.png
a=indgen(2,2)
matrix_power(a,2)
       2.0000000       3.0000000
       6.0000000       11.000000

matrix_power(x,n),x是矩阵,n是指数
matrix_power(a,2)=a##a
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-8-4 13:35:11 | 显示全部楼层
15195775117 发表于 2017-8-4 11:26
a=indgen(2,2)
matrix_power(a,2)
       2.0000000       3.0000000

之所以叫matrix_power,是因为power是乘方的意思
QQ截图20170804134325.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-8-8 15:26:22 | 显示全部楼层
拟合(fitting)之comfit函数
说明:利用6种方法之一拟合数据点对.
(1.指数模型;2.几何模型;3.Gompertz模型;4.双曲线模型;5.逻辑模型;6.对数模型)
The COMFIT function fits the paired data {xi, yi} to one of six common types of approximating models using a gradient-expansion least-squares method.
这些拟合都需要给出先验值;根据我的经验,模型公式里有N个参数,你赋一组参数,算法从这组参数开始迭代,直到获得一组符合条件的参数。
但是,不是太理解,先验值为什么要自己设?
使用案例:
(使用了LOGSQUARE模型,并赋予了该模型下的先验参数[a0,a1,a2])
飞鸽截图20170801233223.png
  X = [ 2.27, 15.01, 34.74, 36.01, 43.65, 50.02, 53.84, 58.30, 62.12, 64.66, 71.66, 79.94, 85.67, 114.95]
  Y = [ 5.16, 22.63, 34.36, 34.92, 37.98, 40.22, 41.46, 42.81, 43.91, 44.62, 46.44, 48.43, 49.70, 55.31]
  A = [1.5, 1.5, 1.5]
  result = COMFIT(X, Y, A, /LOGSQUARE)
print,result
结果:1.42494      7.21900      9.18794
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-8-8 15:47:48 | 显示全部楼层
拟合之ladfit
线性拟合(最小绝对偏差方法拟合)
The LADFIT function fits the paired data {xi, yi} to the linear model, y = A + Bx, using a “robust” least absolute deviation method.
The figure below displays a two-dimensional distribution that is fitted to the model y = A + Bx, using a minimized Chi-square(卡方) error criterion (left) and a “robust” least absolute deviation technique (right). The use of the Chi-square error statistic can result in a poor fit due to an undesired sensitivity to outlying data.
ladfit.gif
我想:卡方的结果受外围数据影响大,是不是没有降低外围数据的权重?
既然卡方线性拟合(使用Linfit函数)有这种缺陷,为什么还有有这个函数?它有什么独特的优点吗?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表